初学oracle,碰到个奇怪的问题,为什么条件between 1 and 5有结果,between 2 and 5就没结果了,20分哦,谢谢
  1  select rownum,ename,sal,job from (select * from scott.emp order by sal desc)
  2* where rownum between 1 and 5
SQL> /    ROWNUM ENAME             SAL JOB
---------- ---------- ---------- ---------
         1 KING             5000 PRESIDENT
         2 SCOTT            3000 ANALYST
         3 FORD             3000 ANALYST
         4 JONES            2975 MANAGER
         5 BLAKE            2850 MANAGERSQL> ed
已写入文件 afiedt.buf  1  select rownum,ename,sal,job from (select * from scott.emp order by sal desc)
  2* where rownum between 2 and 5
SQL> /未选定行

解决方案 »

  1.   

    create table request(code1 varchar2(10),code2 varchar2(10));
    ///
    insert into request
    select 'A','B' from dual
    union all
    select 'A','D' from dual
    union all     
    select 'C','B' from dual
    union all     
    select 'B','D' from dual;
    ///鎵ц鏌ヨ
    SELECT code1,code2 FROM request
    GROUP BY rownum,code1,code2 HAVING rownum BETWEEN 2 AND 4;
    ///杈撳嚭缁撴灉
    A D
    C B
    B D
      

  2.   

    create table request(code1 varchar2(10),code2 varchar2(10));
    ///
    insert into request
    select 'A','B' from dual
    union all
    select 'A','D' from dual
    union all
    select 'C','B' from dual
    union all
    select 'B','D' from dual;
    ///查询语句
    SELECT code1,code2 FROM request
    GROUP BY rownum,code1,code2 HAVING rownum BETWEEN 2 AND 4;
    ///执行结果
    A D
    C B
    B D
      

  3.   

    rownum的问题
     select rn,ename,sal,job from (select scott.emp.*,rownum as rn from scott.emp order by sal desc)
      where rnbetween 2 and 5
      

  4.   

    这种写法之所以行不通,是因为 ROWNUM 列只有在记录被取出或过滤时才会应用到记录上。第一行在被取出时会被抛出,因为它的 ROWNUM 是1。然后,下一行被取出;它也会被抛出,因为它是新的“1”,以此类推,直到所有的行都被使用。所以这个查询不会返回任何记录。
    当然,楼上的方法应该也是可行的。