select * from 表名 where rownum>10,表里面的数据有14条,为什么rownum>10的时候没有数据,当rownum<10的时候会显示1-9条数据?

解决方案 »

  1.   

    rownum是oracle里面的一个伪列,它是为返回的数据集合做一个行标,从1开始;
    可以这么使用:
    select * from 
    (select col_1,col_2,rownum rn from tb)
    where rn<10;
    下面是错误的使用:
    select * from tb
    where rownum >一个指定的数字
    正确版:
    select * from (
    select * from 
    (select tb.*,rownum rn from tb)
    where rn < 14)
    where rn >10
      

  2.   

    -- 没有为什么! 在同一层查询中,rownum 只能是小于(或小于等于)才会出数据,用大于是不会出数据的,
    -- 要用大于的话,只能借用子查询:
    select col1, col2, col3
    from (select col1, col2, col3, rownum as rn
                from tb_name  ) tb
    where rn>10;
      

  3.   


    SQL> select * from (
      2         select * from (
      3                select ename,job,sal,rownum rn from emp
      4                order by sal desc
      5         )where rn>10)
      6  /
     
    ENAME      JOB             SAL         RN
    ---------- --------- --------- ----------
    FORD       ANALYST     3000.00         13
    MILLER     CLERK       1300.00         14
    ADAMS      CLERK       1100.00         11
    JAMES      CLERK        950.00         12SQL> select * from (
      2         select * from (
      3                select ename,job,sal,rownum rn from emp
      4                order by sal desc
      5         )where rn<10
      6         )where rn>5
      7  /
     
    ENAME      JOB             SAL         RN
    ---------- --------- --------- ----------
    KING       PRESIDENT   5000.00          9
    SCOTT      ANALYST     3100.00          8
    BLAKE      MANAGER     2850.00          6
    CLARK      MANAGER     2450.00          7
      

  4.   

    因为rownum是在查询时才生成的,是动态的不是静态的。当数据库在执行这条语句时,
    select * from table_name where rownum>10先判断所查询的表中的第一条数据,其rownum=1;所以where为false,这时,该条数据没有被选入查询的结果集中,然后再去判断该表中的第二条数据,这时第二条数据的rownum不等于2,依然是rownum = 1;因为第一条数据没有被选入查询的结果集中,所以第二条数据的rownum依然等于1,(所以说rownum是动态生成的,不是静态的)
    依次类推,每次判断where rownum>10时,所判断的数据行的rownum都是1,所以都选不中。也就是你说的没有数据。不知道,这样解释你清楚了没有。 
      

  5.   

    所以说,rownum应该是给查询出的数据结果集来用的,不知道这样理解正确不正确。