使用sql语句实现表的分页显示--实用--面试官最喜欢问的考题
2009-07-05 09:27
633 查看
Oracle 版本 Release 10.2.0.4.0 系统平台 linux 5.0 企业版
以oracle自带的emp表为例
注意:如果装完后没有emp表,可以执行下面脚本安装
SQL> @/u02/app/oracle/product/10.2.0/db2/rdbms/admin/utlsampl.sql
执行完后emp表就装上了,默认用户名和密码:scott/tiger.如果不知道密码可以更改
SQL> show user
USER is "SYS"
SQL> alter user scott identified by "123";
用户名为scott,密码为123
如果提示被锁,执行下面的命令
SQL>alter user scott account unlock;
SQL> conn scott/123
Connected.
SQL> desc emp;
Name Null? Type
----------------------------------------- -------- -------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
查看表内容,并以empno顺序排列,由大到小
SQL> select * from emp order by empno desc;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7839 KING PRESIDENT 17-NOV-81 5000 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7369 SMITH CLERK 7902 17-DEC-80 800 20
14 rows selected.
以实现员工号empno分页显示为例,总共14行,一页5行,共3页。(几页自己定)
[align=left]第一页: 第二页: 第三页:[/align]
[align=left]7934 7839 7566
7902 7788 7521
7900 7782 7499
7876 7698 7369
7844 7654[/align]
[align=left]1.显示第一页的内容:[/align]
[align=left]SQL> select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=5) where rn>=1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7934 MILLER CLERK 7782 23-JAN-82 1300 10 1
7902 FORD ANALYST 7566 03-DEC-81 3000 20 2
7900 JAMES CLERK 7698 03-DEC-81 950 30 3
7876 ADAMS CLERK 7788 23-MAY-87 1100 20 4
7844 URNER SALESMAN 7698 08-SEP-81 1500 0 30 5
2.显示第二页的内容
SQL> select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=10) where rn>=6;[/align]
[align=left]EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- -----
7839 KING PRESIDENT 17-NOV-81 5000 10 6
7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7
7782 CLARK MANAGER 7839 09-JUN-81 2450 10 8
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 9
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 10
3.显示第三页内容[/align]
[align=left]SQL> select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=14) where rn>=11;[/align]
[align=left]EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- ------
7566 JONES MANAGER 7839 02-APR-81 2975 20 11
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 12
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 13
7369 SMITH CLERK 7902 17-DEC-80 800 20 14
这样就设置就达到了分三页显示内容的目的。一些论坛上和网站上的分页显示内容就是基于sql语句来实现的。[/align]
[align=left]当然,其中的数字我们可以使用替代符&来替代,这样当我们执行语句的时候就不用一条一条的输入了,例如:[/align]
[align=left]SQL> select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=&max) where rn>=&min;
Enter value for max: 10
Enter value for min: 6
old 1: select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=&max) where rn>=&min
new 1: select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=10) where rn>=6[/align]
[align=left]EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- ------
7839 KING PRESIDENT 17-NOV-81 5000 10 6
7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7
7782 CLARK MANAGER 7839 09-JUN-81 2450 10 8
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 9
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 10[/align]
[align=left]如果要执行第二条时,如下:[/align]
[align=left]SQL> /
Enter value for max: 5
Enter value for min: 1
old 1: select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=&max) where rn>=&min
new 1: select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=5) where rn>=1[/align]
[align=left]EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- ------
7934 MILLER CLERK 7782 23-JAN-82 1300 10 1
7902 FORD ANALYST 7566 03-DEC-81 3000 20 2
7900 JAMES CLERK 7698 03-DEC-81 950 30 3
7876 ADAMS CLERK 7788 23-MAY-87 1100 20 4
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 5[/align]
[align=left]注意:上面的a为定义的别名,可以为任意字符,rn可以为任意字符[/align]
[align=left]rownum为表中的一个伪字段,我们同样可以查询,例如[/align]
[align=left]一个简单的分页显示就到这里了。 [/align]
本文出自 “宗军” 博客,请务必保留此出处http://tech110.blog.51cto.com/438717/174234
以oracle自带的emp表为例
注意:如果装完后没有emp表,可以执行下面脚本安装
SQL> @/u02/app/oracle/product/10.2.0/db2/rdbms/admin/utlsampl.sql
执行完后emp表就装上了,默认用户名和密码:scott/tiger.如果不知道密码可以更改
SQL> show user
USER is "SYS"
SQL> alter user scott identified by "123";
用户名为scott,密码为123
如果提示被锁,执行下面的命令
SQL>alter user scott account unlock;
SQL> conn scott/123
Connected.
SQL> desc emp;
Name Null? Type
----------------------------------------- -------- -------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
查看表内容,并以empno顺序排列,由大到小
SQL> select * from emp order by empno desc;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7839 KING PRESIDENT 17-NOV-81 5000 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7369 SMITH CLERK 7902 17-DEC-80 800 20
14 rows selected.
以实现员工号empno分页显示为例,总共14行,一页5行,共3页。(几页自己定)
[align=left]第一页: 第二页: 第三页:[/align]
[align=left]7934 7839 7566
7902 7788 7521
7900 7782 7499
7876 7698 7369
7844 7654[/align]
[align=left]1.显示第一页的内容:[/align]
[align=left]SQL> select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=5) where rn>=1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7934 MILLER CLERK 7782 23-JAN-82 1300 10 1
7902 FORD ANALYST 7566 03-DEC-81 3000 20 2
7900 JAMES CLERK 7698 03-DEC-81 950 30 3
7876 ADAMS CLERK 7788 23-MAY-87 1100 20 4
7844 URNER SALESMAN 7698 08-SEP-81 1500 0 30 5
2.显示第二页的内容
SQL> select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=10) where rn>=6;[/align]
[align=left]EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- -----
7839 KING PRESIDENT 17-NOV-81 5000 10 6
7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7
7782 CLARK MANAGER 7839 09-JUN-81 2450 10 8
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 9
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 10
3.显示第三页内容[/align]
[align=left]SQL> select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=14) where rn>=11;[/align]
[align=left]EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- ------
7566 JONES MANAGER 7839 02-APR-81 2975 20 11
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 12
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 13
7369 SMITH CLERK 7902 17-DEC-80 800 20 14
这样就设置就达到了分三页显示内容的目的。一些论坛上和网站上的分页显示内容就是基于sql语句来实现的。[/align]
[align=left]当然,其中的数字我们可以使用替代符&来替代,这样当我们执行语句的时候就不用一条一条的输入了,例如:[/align]
[align=left]SQL> select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=&max) where rn>=&min;
Enter value for max: 10
Enter value for min: 6
old 1: select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=&max) where rn>=&min
new 1: select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=10) where rn>=6[/align]
[align=left]EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- ------
7839 KING PRESIDENT 17-NOV-81 5000 10 6
7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7
7782 CLARK MANAGER 7839 09-JUN-81 2450 10 8
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 9
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 10[/align]
[align=left]如果要执行第二条时,如下:[/align]
[align=left]SQL> /
Enter value for max: 5
Enter value for min: 1
old 1: select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=&max) where rn>=&min
new 1: select * from (select a.*,rownum rn from (select * from emp order by empno desc) a where rownum<=5) where rn>=1[/align]
[align=left]EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- ------
7934 MILLER CLERK 7782 23-JAN-82 1300 10 1
7902 FORD ANALYST 7566 03-DEC-81 3000 20 2
7900 JAMES CLERK 7698 03-DEC-81 950 30 3
7876 ADAMS CLERK 7788 23-MAY-87 1100 20 4
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 5[/align]
[align=left]注意:上面的a为定义的别名,可以为任意字符,rn可以为任意字符[/align]
[align=left]rownum为表中的一个伪字段,我们同样可以查询,例如[/align]
[align=left]一个简单的分页显示就到这里了。 [/align]
本文出自 “宗军” 博客,请务必保留此出处http://tech110.blog.51cto.com/438717/174234
相关文章推荐
- oracle12c JSON数据 使用SQL语句实现多表左外连接 显示无效数据 分页查询
- jsp分页(使用sql语句实现,并非easyui的json)
- Oracle使用sql语句分页显示数据,C#版
- sqlServer 中使用sql语句实现固定分页功能
- SQL中使用limit实现数据分页显示
- C#拼接SQL语句,SQL Server 2005+,多行多列大数据量情况下,使用ROW_NUMBER实现的高效分页排序
- 使用SQL语句实现真分页
- 使用标准SQL语句实现分页操作(Oracle)
- 使用传入的总记录数实现一条sql语句完成分页查询
- 使用sql语句实现分页
- MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)
- Oracle中实现分页的sql语句
- SQL Server设置主键自增长列(使用sql语句实现)
- .NET数据库编程求索之路--3.使用ADO.NET实现(SQL语句篇)(2)
- 使用SQL语句实现SQL Profiler的功能
- 好记性不如烂笔头14-使用log4jdbc显示完整SQL语句和执行时间
- 使用SQL语句实现备份、还原
- 使用SQL语句来进行分页处理
- 关于SQL的over partition by 开窗语句在分页和统计中的使用总
- 配置与使用displaytag实现分页显示