a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 60|回复: 0

[综合] Oracle辅导:Oracle查询rownum和rowid的区别

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
在Oracle中,有一个很有趣的工具,那就是rownum。当你年夜某个表中发芽数据的时辰,返回的结不美观集中城市带有rownum这个字段,而且有时辰也可以使用rownum进行一些前提发芽。
/ n! i. P% f1 y1 ?' R. @: p) w  在发芽中,我们可以注重到,近似于“select xx from table where rownum < n”(n>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的记实。
. R: \1 X$ |$ J9 c5 B5 E3 f2 P  让我们回头来剖析一下在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 < 10,那么在执行的时辰,是先按照zz>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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-16 05:34 , Processed in 0.180860 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表