因为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,所以永远没有满足条件的记录。

解决方案 »

  1.   

    我想你是要在where条件中用吧,哪是不能用的因为rownum是在查到结果之后再加的列,
    已就是要先有结果集,所以不能用的
      

  2.   

    支持>=的啊...
    select * from emp where rownum>=1 and rownum<10
    ............
      

  3.   

    sbaz(万神渡劫)正确的解释。简单的说rownum是对符合条件结果的序列号。一定是从1开始排起的。
    所以你选出的结果不可能没有1,而有其他大于1的值。所以如果想要这个结果的话要用嵌套语句,把rownum先生成,然后对他进行查询。
    select * 
    from(selet rownum rn,a.* from a where ...)
    where rn>=10
      

  4.   

    ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。
    它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。
      

  5.   

    rownum是伪列,代表已经查询到的记录的行序号。还未查到的记录是没有rownum的。
    因此ROWNUM>=1 AND ROWNUM<=10是可以查到前10条记录但是不能证明
    ROWNUM>=500 AND ROWNUM<=600可以查处500~600的501条记录。
    ROWNUM>=1 AND ROWNUM<=10在逻辑上相当于ROWNUM<=10
      

  6.   

    嗯。
    如果要用大于的可以这样做:
    select * from (select s.*, rownum row_id from table s where rownum<1000001) where row_id>999990;