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