本帖最后由 w091b 于 2012-12-20 16:28:20 编辑

解决方案 »

  1.   

    ROWNUM只适用于小于或小于等于,如果进行等于判断,那么只能等于1,不能进行大于的比较。
    ROWNUM的返回很简单,ROWNUM总是从1开始,不管当前的记录是否满足查询结果,ROWNUM返回的值都是1,如果这条记录的值最终满足所有的条件,那么ROWNUM会递加,下一条记录的ROWNUM会返回2,否则下一条记录的ROWNUM仍然返回1。
    理解了这一点,就清楚为什么一般的ROWNUM大于某个值或等于某个不为1的值是无法返回结果的,因此对于每条记录的ROWNUM都是1,而ROWNUM为1不满足查询的结果,所以下一条记录的ROWNUM不会递增,仍然是1,因此所有的记录都不满足条件。
      

  2.   

    rownum  不是 my_table 中的字段, 可以理解为一个递增的常量。
    这样的话,在where 中时取不到rownum 的值的
    select * from 
      (
          select my_table.*,rownum my_rownum from
         (
              select student_id,NAME from student
              union
              select student_id,cno from sc
          )my_table where rownum<21
      )where my_rownum>10 这种写法是间接的把rownum 变成子查询中的一个字段,所以你可以查出来数据
      

  3.   


    那那个my_rownum是什么,其什么作用啊,欢迎积极回答啊,圣诞快乐!
      

  4.   

    额....rownum   my_rownum , 是 rownum 别名..  间接的变成了子查询的一个字段.. 
      

  5.   

    初学者,请多多指教!别名我懂,但是为什么这么用?为什么别名之后就可以用大于号啊,一楼大哥说的:(ROWNUM只适用于小于或小于等于,如果进行等于判断,那么只能等于1,不能进行大于的比较。)
      

  6.   

    rownum取一个别名 再嵌套一层
      

  7.   

    rownumb值从1开始,简单的可以理解,有1,才会有2,依次类推。
    所以rounum>=1 ,rounum=1,rownum<=n 都可以返回出数据而oracle使用rownum分组是利用这个序号将其实例化,如楼主提到的蓝色字体:
    rownum my_rownum 这样根据排序字段确定的my_rownum就是固定值,从而可以任意取范围了。