rownum 和 分页
rownum
-
ROWNUM:表示行号,实际上此是一个列,但是这个列是一个伪列,此列可以在每张表中出现。
-
范例:查询 emp 表带有 rownum 列
-
示例图:
-
可以根据 rownum 来取结果集的前几行,比如前 5行
-
示例图:
-
但是我们不能取到中间几行,因为 rownum 不支持大于号,只支持小于号,如果想实现我们的需求怎么办呢?答案是使用子查询,也正是 oracle 分页的做法。
分页
- 示例图:
- 起始行号的计算方法
以上操作完整源码:
--查询 emp 表带有 rownum 列
select rownum, t.* from emp t;
--查询 emp 表带有 rownu<6 的列
select rownum, t.* from emp t where rownum < 6;
--rownum 不支持大于号,所以下面的这种分页方式是错误的
select rownum, t.* from emp t where rownum > 5 and rownum < 11;
--分页步骤
--第一步查询全量的数据
select * from emp;
--第二步以第一步的结果集作为一张表,限定条件是 rownum 小于结束行号, 结果列把 rownum 作为结果集
select rownum rw, a.* from (select * from emp) a where rownum < 6;
--第三步以第二步的结果集作为一张表,限定条件是第二步的 rownum 列大于开始行号,结果列是 *
select *
from (select rownum rw, a.*
from (
select * from emp
) a
where rownum < 11) b
where b.rw > 5;
如有错误,欢迎指正!