-------------------------------------------Oracle的rownum和分页--------------------------------------------------
Rownum
ROWNUM:表示行号,实际上此是一个列,但是这个列是一个伪列,此列可以在每张表中出现。
范例:查询emp表带有rownum列
selectrownum, t.* from emp t
我们可以根据rownum来取结果集的前几行,比如前5行
但是我们不能取到中间几行,因为rownum不支持大于号,只支持小于号,如果想 实现我们的需求怎么办呢?答案是使用子查询,也正是oracle分页的做法。
select *
from (selectrownum rm, a.* from (select * from emp) a whererownum < 11) b where b.rm > 5
代码示例:
select rownum, t.* from emp t; --使用rownum来显示行号
select rownum, t.* from emp t where rownum<6; --使用rownum来限制查找的行数
--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;
/*
pageNo:当前的页码
pageSize:每页的记录数
pageNo pageSize startNum endNum
1 5 1 6
2 5 5 11
3 5 10 16
已知pageNo和pageSize数计算startNum和endNum的公式
startNum = (pageNo - 1) * pageSize
endNum = (pageNo * pageSize) + 1
*/
---------------------
参考:https://blog.csdn.net/weixin_41547486/article/details/80601186