欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

初学者求教查询:n-m行的查询

更新时间: 2014-01-05 02:13:09 责任编辑: Author_N1

 

菜鸟求教查询:n-m行的查询
我不是职业搞数据库的,我做的事web,因为分页,自己写的sql出错,百度别人的
会用但看不懂,所以特来求教!
这是我写的sql:

select * from 
       (select * from user_info where rownum < = 8)
       where rownum>=5

结果,这一段根本不执行!

我百度了,发现这样一段代码,和我的类似:

SELECT * FROM ( SELECT A.*, ROWNUM RN 
FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21

我看不懂这条写的,为什么他的就执行了 ?

问题:
1、我的错在哪里?
2、他的代码里,SELECT A.*, ROWNUM RN 指的是什么 ?
3、为什么我百度的代码里, WHERE RN >= 21改成WHERE ROWNUM >=21报错?

----------------
菜鸟,忘提示!!!望指教!!!
--参考方法--
rownum是oracle自动生成的行号,只能小于,不能大于。因为他永远从1开始,有了1才有2,有了2才有3.。。。。
--参考方法--
首先知道rownum永远都是死的 只能针对当个查询 如果加个别名就不同了

你的sql里面  外层rownum只是针对了外面一层的行号 所以不可能 >= 21 必然会报错

他的sql 在内层的时候已经赋值一个别名rn 等于在外面访问rn 是内层的行号 
--参考方法--
2、他的代码里,SELECT A.*, ROWNUM RN 指的是什么 ?

--先把序号查出来作为一列, 这样外层查询 就能使用 这个序号判断了,那就是真正的 行
3、为什么我百度的代码里, WHERE RN >= 21改成WHERE ROWNUM >=21报错?
--应该不会报错吧?最多是查不出数据罢了。
--参考方法--
直接让rownum >= 查不出值,rownum都是从1开始的,你让他 >21 ,它找不到21就一直又从1开始了,导致查不到值。像 HJ_daxian 说的,在里面把它别名定义出来,这样在外面就可以让他 > 了,就可以用了。
--参考方法--
rn  是起的别名,然后就可以>=了。就是这么神奇的东西,呵呵
--参考方法--
引用:
Quote: 引用:

首先知道rownum永远都是死的 只能针对当个查询 如果加个别名就不同了

你的sql里面  外层rownum只是针对了外面一层的行号 所以不可能 >= 21 必然会报错

他的sql 在内层的时候已经赋值一个别名rn 等于在外面访问rn 是内层的行号 
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:13:09
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7133/
本文WWW.DOC100.NET DOC100.NET版权所有。