Oracle中查询rownum和rowid的区别

本文探讨了Oracle数据库中rownum和rowid的区别,rownum作为一个伪数列,用于标记查询结果集中的行顺序;rowid则作为每条记录的唯一标识符。文章深入分析了rownum的工作原理,并提供了实用的查询示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle中查询rownum和rowid的区别


[url=http://database.51cto.com/]http://database.51cto.com[/url]


2009-05-25 10:00 ljh0242 51CTO博客 我要评论(


0

)


[list]


摘要:

在Oracle中,有一个很有趣的东西,那就是rownum。当你从某个表中查询数据的时候,返回的结果集中都会带有rownum这个字段,而且有时候也可以使用rownum进行一些条件查询。

标签:

[url=http://www.51cto.com/php/search.php?keyword=Oracle]Oracle[/url]


[url=http://www.51cto.com/php/search.php?keyword=rownum]rownum[/url]


[url=http://www.51cto.com/php/search.php?keyword=rowid]rowid[/url]


Oracle帮您准确洞察各个物流环节


[/list]


在查询中,我们可以注意到,类似于“select xx from table


where rownum 1)这样的查询是有正确含义的,而“select xx from table where

rownum = n”这样的查询只在n=1的时候成立,“select xx from table where rownum >

n”(n>1)这样的查询只能得到一个空集。另外“select xx from table where rownum >

0”这个查询会返回所有的记录。这是为什么呢?原因就在于Oracle对rownum的处理上,rownum是在得到结果集的时候产生的,用于标记结果集

中结果顺序的一个字段,这个字段被称为“伪数列”,也就是事实上不存在的一个数列。它的特点是按顺序标记,而且是逐次递加的,换句话说就是只有有

rownum=1的记录,才可能有rownum=2的记录。


让我们回头来分析一下在where中使用rownum作为查询条件的情况。在rownum取=1,或者rownum 1)的时候,没有问题。那么为什么当条件为rownum = n或者rownum >=

n时明明有数据却只能得到一个空集呢?假设我们的查询条件为rownum =

2,那么在查询出的第一条记录的时候,oracle标记此条记录rownum为1,结果发现和rownum=2的条件不符,于是结果集为空。写到这里,我

忽然有一个有趣的想法:假如有一条查询语句为select xx,yy from table where zz > 20 and

rownum 20的条件查询出一个结果集,然后按照rownum取出前10条返回?还是在按照zz>20的条件先

查询,然后有一个记录就标记一个rownum,到rownum20) where xyz between 10

and 20”这样就可以了。另外使用oracle提供的结果集处理函数minus也可以做到,例如“select xx,yy from table

where zz > 20 and rownum 20 and rownum 巧用dbms_rowid包获得rowid的详细信息


浅析Oracle中的表空间查询方法


Oracle数据库中的字符处理技巧


[url=http://developer.51cto.com/art/200902/110254.htm] [/url]


[/list]

【责任编辑:彭凡

TEL:(010)68476606】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值