oracle 分页查询 为什么第一次子查询用rownum,第二次用rn,其他方式都不可以呢?

 我来答
badkano
推荐于2017-11-26 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144777 获赞数:885359
团长

向TA提问 私信TA
展开全部
第一次的rownum是oracle中的一个虚拟列
你说的rn是给这个rownum起的别名,也就是在子查询中的别名要在外查询中调用

oracle中的分页查询不止是只有rownum
还可以用row_number等函数(不过这个是根据某个字段排序后的排名,这个在数据量较大的情况下很影响查询效率),不过这个的调用方式也跟上边的那个类似,并且,这个row_number函数在sqlserver中也是可以使用的,具体的你可以搜索一下
dzmcobk
2021-04-15 · TA获得超过748个赞
知道小有建树答主
回答量:431
采纳率:76%
帮助的人:119万
展开全部
rownum 是一个虚列,不属于表,只是用来给结果序号
要考虑结果逻辑。
比如我可以写rownum>0或者rownum >= 1,查询结果是全部结果
但是如果写rownum > 1 结果就是空的。
解答:因为第一个结果rownum应该为1,不符合,所以排除
第二条,因为第一条被排除了,这一条应被安排在结果的第一个,rownum也应该排为1,所以不符合,排除
依次类推,全部都不符合,所以结果为空
而如果我将rownum作为一个临时结果,再从这个临时结果进行查询,就可以使用这个值了
所以我们可以先成立一个临时结果:select t1.*, rownum as "rn" from t1
然后从这个结果尽心查询:select * from (select t1.*, rownum as "rn" from t1) where "rn" > 10 and "rn" <= 20
但是一般都会把小于等于放在第一个结果中,因为第一个结果是临时的,会占用内存,而且还不确定这个表的数据量具体有多大,所以,尽量减少临时结果的大小,能起到增加效率的效果
select * from (select t1.*, rownum as "rn" from t1 where rownum <= 20) where "rn" > 10
注:你提到的rn,并不是一个固定值,而是临时存放rownum的临时结果的列,起了一个名字叫rn, 在字段的后面,用[as 列名] 表示,也能用 [as "列名"]表示,语句当然可以写成:select * from (select t1.*, rownum as aaa1234 from t1) where aaa1234 > 10 and aaa1234 <= 20;
别名的命名规则基本上是毫无顾忌的。只是如果不符合命名规则,比如数字开头,拥有空格,运算符号,关键字 等情况的列名,需要用双引号引起来,但是要注意,双引号的列名,使用时也最好(非必须)用双引号,因为系统执行sql语句时,会将没有引号的字母全部翻译成大写,再执行,如果使用as "rn" ,然后使用rn查询时,查询语句中的rn会翻译成RN,与字段名的rn对应不上,报:找不到该字段的错误。(当然,如果定义为 "RN",查询语句中用rn 可以对应上,中文,大写,符号,都无大小写之分)
比如:
select * from (select t1.*, rownum as 1234 from t1) where 1234 > 10 and 1234 <= 20; 会报错,因为1234不符合字段命名规则
select * from (select t1.*, rownum as "1234" from t1) where 1234 > 10 and 1234 <= 20; 查询为空,因为后一个1234会被认为是数字,而1234<= 20是一个恒false的条件
select * from (select t1.*, rownum as "1234" from t1) where "1234" > 10 and "1234" <= 20; 查询结果正常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友07553bf0
2014-01-18 · TA获得超过1986个赞
知道大有可为答主
回答量:2464
采纳率:75%
帮助的人:1841万
展开全部
限制行数 一般用rownum方便

【SQL优化】Oracle中的Top-N与分页匹配查询
http://www.askmaclean.com/archives/topn-pagination-pattern.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
聊城王长安
2014-01-18 · TA获得超过925个赞
知道小有建树答主
回答量:499
采纳率:88%
帮助的人:127万
展开全部
你去csdn搜一下rownum,我用手机不方便
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式