• SQL查询系列之五:SQL分页查询

    发布:51Code 时间: 2017-11-08 14:31

  • 如果希望查询结果集只显示一部分,而不是全部,即常用的分页查询技术,MySQL可以使用LIMIT关键字,Oralce需要子查询来实现, 下面先使用MySQL的来实现分页查询。MySQL的LIMIT的语法如下:...

  • 如果希望查询结果集只显示一部分,而不是全部,即常用的分页查询技术,MySQL可以使用LIMIT关键字,Oralce需要子查询来实现,

           下面先使用MySQL的来实现分页查询。MySQL的LIMIT的语法如下:

    SELECT ……[LIMIT offset_start,row_count]

    其中offset_start表示记录的起始偏移量,row_count表示显示的行数。

           在默认情况下,起始偏移量为0,只需要写记录行数就可以,这时候,显示的实际就是前n条记录,看下面例子:
     
           示例:显示emp表中按照sal排序后的前3条记录。

    mysql> select * from emp order by sal limit 3;
           +--------+------------+---------+--------+
           | ename  | hiredate   | sal     | deptno |
           +--------+------------+---------+--------+
           | zzx    | 2000-01-01 | 2000.00 | 1      |
           | bwf   | 2003-02-01 | 4000.00 | 2      |
           | bzshen | 2005-04-01 | 4000.00 | 3      |
           +--------+------------+---------+--------+
           3 rows in set (0.00 sec)

     如果要显示emp表中按照sal排序后从第二条记录开始,显示3条记录:

           示例: 显示emp表中按照sal排序后从第二条记录开始,显示3条记录。

    mysql> select * from emp order by sal limit 1,3;
           +--------+------------+---------+--------+
           | ename  | hiredate   | sal     | deptno |
           +--------+------------+---------+--------+
           | bwf   | 2003-02-01 | 4000.00 | 2      |
           | bzshen | 2005-04-01| 4000.00 | 3      |
           | bjguan | 2004-04-02 | 5000.00 | 1      |
           +--------+------------+---------+--------+
           3 rows in set (0.00 sec)

    limit经常和order by一起配合使用来进行记录的分页显示。
     
           接下来使用Oracle的子查询来实现分页查询:

           示例: 显示emp表中按照sal排序后从第二条记录开始,显示3条记录。

    SQL>  SELECT t.empno,t.ename,t.job,t.mgr,t.hiredate,t.sal,t.comm,t.deptno
           2  from (SELECT rownum as r,emp.* FROM EMP) t
           3  where r>=1 and r<=3;
           EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
           ----- ---------- --------- ----- ----------- --------- --------- ------
           7369 SMITH      CLERK      7902 1980/12/17     800.00               20
           7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
           7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30

    其中子查询SELECT rownum as r,emp.* FROM EMP是用来查询所有员工信息并增加伪列r用于查询记录记数。然后外层查询使用该子查询的查询条件使用r作为选择分页记录范围。

  • 上一篇:SQL查询系列之四:SQL查询结果集排序

    下一篇:Java技术:JavaSE 常量、进制转换

网站导航
Copyright(C)51Code软件开发网 2003-2018 , 沪ICP备05003035号