关于对ORACLE中的ROWNUM的理解

上一篇文章我们讲:ORACLE巧用排序 查询最大值,第二大,第三大值。。。第N大值。

这里面sql经常使用到一个Oracle数据库中的一个特性ROWNUM,从英文死翻译过来就行号,正常理解就是查出来的数据,有一个额外的编码,类似于excel左侧对所有数据有一个行号标识。

因为按照一般思维,我们在获取最大值,第二大,第三大值。。。第N大值的时候,会自然的想到,对所有数据进行排序,然后根据ROWNUM=第几,自然就会获取到我们的数据。然而事实是这样吗?

我们简单的测试一下:

select * from table where rownum = 1
select * from table where rownum = 2
select * from table where rownum = 3

。。。。

我们可以发现除了第一条sql查询到了我们想要的数据,后面并没有查询出来数据,因此我们可以知道,rownum并不是简单的表示行号。只要翻阅资料,我们 经常会发现这样一个论断,rownum无法使用大于某个数字进行查询,从上面,我们也可以知道,除了0之外,rownum使用等于也是无效的。

那么rownum到底是什么呢?

rownum 是一个始终从1开始的,且符合查询结果的序列号!

rownum始终从1开始,并给select查询的结果进行编号,它不可能不存在第一行,而直接存在大于1的行数,因此,当rownum>大于1的数,或者rownum = 大于1的数的时候,这个时候,rownum无效,且结果并不存在。因而我们常用的rownum的方式是rownum<=某个数,只有取第一行数据的时候才使用rownum=1的方式。

那么如何取第二行,第三行的数据呢?

同取第二大,第三大的方法一样,对子查询数据进行限制后,保证我们要取得数据处在最后一条,然后进行倒序排序,使其置为第一条,即可使用rownum=1的方式获取到数据。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值