oracle虚列中不能使用>的问题

关于Oracle 的 rownum 问题,它只能用如下运算符号“<、<=、!=”,而!=使用的时候相当于<的效果。而使用“>、>=、=、between..and”运算符号时,只要开始值大于1,则就会无结果显示。因为rownum总是从1开始的,第一条不满足去掉的话,第二条的rownum 又成了1。依此类推,所以永远没有满足条件的记录。

rowid 与 rownum 虽都被称为伪列,但存在方式不一样:
rowid 是物理存在的,表示记录在表空间中的唯一位置ID,在DB中是唯一的。只要记录没被搬动过,rowid是不变的。它相对于表来说又像表中的一般列,所以,以 rowid 为条件就不会有rownum那些莫名其妙的结果出现。

rownum不能以任何基表的名称作为前缀。是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。
可以这样理解:rownum是一个序列,是Oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2。依次类推。

可以直接理解为:使用rownum对数据进行查询时,开始值知道大于1就会无结果显示,要想查询伪劣第3行到第9行的值就得使用嵌套的写法:
SELECT * FROM (SELECT rownum as num,ename,sal FROM emp WHERE rownum<=9 )
WHERE num>=3
注:如果子查询里rownum不起别名的话同样不能用大于符号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值