分页查询与TOP-N特性

1. 分页查询

分页起始行=(页码-1)* 每页长度+1

分页终止行=页码 * 每页长度

用法:

SQL> select * from temp;

ID     ENAME    SAL
---------- -------------------- ----------
1    SMITH      5000
2    ALLEN        5000
3    WARD      5000
4    JONES     5000
5       MARTIN      5000
6       BLAKE        2000
7    CLARK        2000
8      SCOTT        4000
9      KING            4000

9 rows selected.

用分页查询 ID=4/5/6三行的数据

 /**通过内联视图进行查询**/

SQL> select * from (select rownum num,t.* from temp t where rownum<7) a where a.num>3;

NUM    ID   ENAME   SAL
---------- ---------- -------------------- ----------
4      4   JONES    5000
5      5   MARTIN     5000
6      6   BLAKE     2000

2. 使用TOP-N特性查询

/**offset 3 rows 表示跳过三行,取后面的三行**/

SQL> select * from temp offset 3 rows fetch first 3 rows only;

ID     ENAME   SAL
---------- -------------------- ----------
4     JONES    5000
5     MARTIN   5000
6     BLAKE     2000

TOP-N特性的其他用法:

/**只取前两行**/

SQL> select * from temp fetch first 2 rows only;

ID     ENAME   SAL
---------- -------------------- ----------
1     SMITH    5000
2     ALLEN    5000

/**按照SAL倒叙取前20%的数据,rows only 表示即使有重复值也只取总数据的20%**/

SQL> select * from temp order by sal desc fetch first 20 percent rows only;

ID     ENAME    SAL
---------- -------------------- ----------
1     SMITH    5000
2     ALLEN    5000

/**按照SAL倒叙取前20%的数据,rows with ties表示如果存在重复值,一并取出,即使超过实际需要的百分比条目数**/

SQL> select * from temp order by sal desc fetch first 20 percent rows with ties;

ID     ENAME   SAL
---------- -------------------- ----------
1     SMITH    5000
2     ALLEN    5000
3     WARD    5000
4     JONES   5000
5     MARTIN    5000

/**注意:如果没有对结果进行排序,即使使用了with ties,也不会取出重复值**/

SQL>select * from temp fetch first 20 percent rows with ties;

ID     ENAME   SAL
---------- -------------------- ----------
1     SMITH    5000
2     ALLEN    5000

原文地址:https://www.cnblogs.com/eniniemand/p/14057430.html