oracle的rownum的学习(二)使用rownum实现分页查询
(本文章内容仅在windows10下经测试能够运行,不能保证其他环境下的可靠性)
案例二:
分页查询
查询emp表按工资倒序排列后的以五条数据为一页,查询第二页
思路一:将倒序查询的结果作为中间表,取rownum大于5且小于11的五条记录
查询结果:查询失败
原因:rownum作为查询条件不能使用大于一个正整数
查询代码如下:
select et1.* from ( select e.* from emp e order by e.sal desc ) et1 where rownum > 5 and rownum < 11;
查询结果如下图所示:
这是由于使用rownum需要注意的第一个特性所带来的问题,
关于使用rownum需要注意的问题详情:链接在这
思路二:解决思路一存在的问题
解决方案:再次嵌套查询,将倒序查询的结果作为中间表,取小于11的五条记录作为第二张中间表,给rownum取别名, 在最外层查询的查询条件中使用取的rownum的别名的字段大于5作为查询条件
查询结果:查询成功
查询代码如下:
select et2.* from ( select rownum rn,et1.* from ( select e.* from emp e order by e.sal desc ) et1 where rownum<11 ) et2 where rn > 5;
查询结果如下:
这里给定oracle分页查询的一个通用模板
select et2.* from ( select rownum rn,et1.* from ( 经过排序和使用查询条件帅选后的查询结果 ) et1 where rownum<11 ) et2 where rn > 5;
路漫漫其修远兮,吾将上下而求索。