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;

 

posted @ 2020-06-05 16:07  DNoSay  阅读(511)  评论(0编辑  收藏  举报