--------------------------------------------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 */ |