how2j.cn


工具版本兼容问题
使用rownum进行 分页查询


步骤 1 : 只查出5条数据   
步骤 2 : 查出薪水最高的5-10条数据   

步骤 1 :

只查出5条数据

edit

select * from hr.employees e where rownum<=5
步骤 2 :

查出薪水最高的5-10条数据

edit
查出薪水最高的5-10条数据
select * from (select rownum r, e1.* from ( select e.* from hr.employees e order by e.salary desc ) e1 ) e2 where e2.r >=5 and e2.r<=10
select * from 
(select rownum r, e1.* from 
  (
   select e.* from hr.employees e  order by e.salary desc
  ) e1
) e2 where e2.r >=5 and e2.r<=10


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2018-01-05 为什么有最外面那一层,而不是两层
XF

为什么不是 select rownum r, e1.* from ( select e.* from hr.employees e order by e.salary desc ) e1 where e1.r >=5 and e1.r<=10




7 个答案

我会努力学JAVA的
答案时间:2019-06-27
首先薪水最高的

超越所有人
答案时间:2018-12-25
因为rownum得运行机制问题,所以呢,你当前查得是当前生成得e1的rownum,所以查看出来的第一条数据其给它附的id为1,然后你后面有执行e1.r的判断,所以那个e1的第一条数据(id为1)不符合大于等于5小于等于10,第一条不符合,那么它就会执行销毁,所以本来的第二条也会成为id为1,然后继续执行,所以第二条也不符合,如果想使它符合,那么只能让e1.r大于0即可,否则其它条件都是不可以的,如果你想让其大于1或者及以上,就必须多包涵一层,让其变成一个数据集,再从数据集里面取就可以取到(这就是为什么要多取一层的原因),不然你执行这个语句,一条数据都没有而且还会报错

SuperKuma
答案时间:2018-04-24
试了一下 rownum <> 8 也查不出8后面的元素,怕是rownum 碰到不符合条件的就终止了

啾啾啾
答案时间:2018-04-02
首先,看报错,是e1.r标识符无效,这是为什么呢? 因为你的e1里面压根没有r。 你新建的r列,是在你的最外层的select运行之后才会形成的一个表里面的。 并不在你括号里面select运行后所形成的表里面。 ps:我的不成熟的理解就是每次的select之后都会形成一个新的表。你仔细断句一下应该能理解上面的最后一句话

提莫小可爱
答案时间:2018-03-14
百度到的答案 因为rownum是对结果集加的一个伪列(即先查到结果集之后再加上去的一个列),简单的说rownum是对符合条件结果集添加的序列号。它总是从1开始排起的,所以选出的结果中不可能没有1,而有其他大于1的值。 rownum > 5 AND rownum <= 10 查询不到记录,因为如果第一条的 rownum = 1,不满足条件被去掉,第二条的rownum又成了1,继续判断,所以永远没有满足条件的记录。

XF
答案时间:2018-02-01
好像是因为分页rownum每次查只能从第一条记录开始,即如果是小于5就不用套最外面这一层,但是大于五小于十就需要。

YinTi
答案时间:2018-01-28
你的e1查询出来的是薪水由高到低的排序,你在where条件里面查询的e1代表的也是薪水而不是行数,所以新加了e2,查询条数
select * from (select rownum r,sa.*from (select * from hr.employees order by salary desc) sa) sal where sal.r>=5 and sal.r<=10



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到








提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 数据库-oracle-分页查询 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图