ROWNUM和ROWID

如果用 select rownum,c1 from t1 where rownum < 10, 只要是用小于号,

查出来的结果很容易与一般理解在概念上达成一致,不会有任何疑问。

 

可如果用 select rownum,c1 from t1 where rownum > 10 你就会发现,显示出来的结果并不会如你所愿

 

先理解 Oracle rownum 的意义。

ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。

简单的说 rownum 是对符合条件结果的序列号。总是从1开始排起。所以选出的结果不可能没有1而有其他大于1的值

 

1. select rownum,c1 from t1 where rownum != 10 总是返回前9条数据。

 

2. rownum >1 时查不到一条记录,而 rownum >0 或 rownum >=1 却能显示所有的记录

 

3. between 1 and 10 或者 between 0 and 10 能查到结果,而用 between 2 and 10 却得不到结果原因同上一样,

 

从上可以看出,任何时候想把 rownum = 1 这条记录抛弃是不对的,它在结果集中是不可或缺的。

少了rownum=1 就像空中楼阁一般不能存在,所以你的 rownum 条件要包含到 1。

 

如果想用 rownum > 10 这种条件的话话就要用嵌套语句,把 Oracle rownum 先生成,然后对他进行查询。

 

 
 
  1. select *  
  2. from (selet rownum as rn,t1.* from a where ……)  
  3. where rn >10  

 

一般代码中对结果集进行分页就是这么干的。

 

另外:rowid 与 rownum 虽都被称为伪列,但它们的存在方式是不一样的。

rowid 是物理存在的,表示记录在表空间中的唯一位置ID,在DB中唯一。只要记录没被搬动过,rowid是不变的。

 

另外还要注意:

1, rownum不能以任何基表的名称作为前缀。

2,子查询中的rownum必须要有别名,否则还是不会查出记录来。

3,查询rownum在某区间的数据,必须使用子查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值