请教rownum问题,为何不支持>,>=,=,between...and

jayli426 2006-07-04 10:49:11
对应rownum问题,资料都说不支持>,>=,=,between...and
只能用以上符号(<、<=、!=)。
一直没明白为什么,哪位大虾能解释一下吗??
select * from tablename where rownum != 10
为何是返回前9条数据呢??
其实
select * from tablename where rownum < 10
效果是一致的阿
...全文
472 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
buoll 2006-08-16
  • 打赏
  • 举报
回复
嗯。
如果要用大于的可以这样做:
select * from (select s.*, rownum row_id from table s where rownum<1000001) where row_id>999990;
yqx123 2006-08-16
  • 打赏
  • 举报
回复
今天豁然开朗了。呵呵,学习
认真读书 2006-08-15
  • 打赏
  • 举报
回复
正解。。。
gw_delphi 2006-08-14
  • 打赏
  • 举报
回复
rownum是伪列,代表已经查询到的记录的行序号。还未查到的记录是没有rownum的。
因此ROWNUM>=1 AND ROWNUM<=10是可以查到前10条记录但是不能证明
ROWNUM>=500 AND ROWNUM<=600可以查处500~600的501条记录。
ROWNUM>=1 AND ROWNUM<=10在逻辑上相当于ROWNUM<=10
springzct 2006-08-14
  • 打赏
  • 举报
回复
up
yz_oracle 2006-07-05
  • 打赏
  • 举报
回复
支持zhouguoling(zhou)的说法
loveyt 2006-07-04
  • 打赏
  • 举报
回复
支持>=的啊...
select * from emp where rownum>=1 and rownum<10
............
yl_muchyong 2006-07-04
  • 打赏
  • 举报
回复
我想你是要在where条件中用吧,哪是不能用的

因为rownum是在查到结果之后再加的列,
已就是要先有结果集,所以不能用的
超叔csdn 2006-07-04
  • 打赏
  • 举报
回复
因为ROWNUM是对结果集加的一个伪列。

比如:结果集为:
a
b
c
d
e
f
g

你的ROWNUM如果是<>4则加了
1 a
2 b
3 c
后,d的rownum为4,则去掉。
去掉后e的rownum为4,则去掉。
。。。
如此下去,就只剩前3个了。

这也就是为什么rownum>=2没有记录了,因为第一条不满足去掉的话,第二条的ROWNUM又成了1,所以永远没有满足条件的记录。
david_xu322 2006-07-04
  • 打赏
  • 举报
回复
楼上正解!
电力信息系统 2006-07-04
  • 打赏
  • 举报
回复
ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。
它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。
yqwd911 2006-07-04
  • 打赏
  • 举报
回复
sbaz(万神渡劫)正确的解释。

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

所以如果想要这个结果的话要用嵌套语句,把rownum先生成,然后对他进行查询。
select *
from(selet rownum rn,a.* from a where ...)
where rn>=10
超叔csdn 2006-07-04
  • 打赏
  • 举报
回复
>=1就是=1,大于号没起到任何作用。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧