在Oracle数据库中
如:user表
ID Name
1   A
4   B
7   C
2   D
5   E
8   F
其中ID是主键,如何先按照ID排序,再检索出第四条到第六条之间的数据?

解决方案 »

  1.   

    select * from (select *,rownum num from user order by id) t where t.num>=4 and t.num<=6
      

  2.   


    select * 
      from (select id,Name ,row_number() over(order by id) rn 
              from basshp) t 
     where t.rn>=4 and t.rn<=6
      

  3.   

    如果是“top N”的问题
    SELECT * FROM (SELECT × from user order by id) where rownum <N;
    第四条到第六条之间的数据:
    select * 
      from (select id,name,row_number() over(order by id) rn 
              from user) t 
     where t.rn>=4 and t.rn<=6
      

  4.   

    应该后面多加个t.* 吧
    select t.* from (select *,rownum num from user order by id) t where t.num>=4 and t.num <=6
      

  5.   

    1楼思路是正确的,直接执行有点问题,细节问题
    select * from (select user.*,rownum num from user order by id) t where t.num>=4 and t.num <=6
      

  6.   


    1楼的没问题
    SQL> select * from scott.emp;     EMPNO ENAME      JOB              MGR HIREDATE                  SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- ------------------ ---------- ---------- ----------
          7369 SMITH      CLERK           7902 17-12る-80                800                    20
          7499 ALLEN      SALESMAN        7698 20-2る -81               1600        300         30
          7521 WARD       SALESMAN        7698 22-2る -81               1250        500         30
          7566 JONES      MANAGER         7839 02-4る -81               2975                    20
          7654 MARTIN     SALESMAN        7698 28-9る -81               1250       1400         30
          7698 BLAKE      MANAGER         7839 01-5る -81               2850                    30
          7782 CLARK      MANAGER         7839 09-6る -81               2450                    10
          7839 KING       PRESIDENT            17-11る-81               5000                    10
          7844 TURNER     SALESMAN        7698 08-9る -81               1500          0         30
          7900 JAMES      CLERK           7698 03-12る-81                950                    30
          7902 FORD       ANALYST         7566 03-12る-81               3000                    20
          7934 MILLER     CLERK           7782 23-1る -82               1300                    10匡 12 SQL> select empno,rownum rn from scott.emp order by empno;     EMPNO         RN
    ---------- ----------
          7369          1
          7499          2
          7521          3
          7566          4
          7654          5
          7698          6
          7782          7
          7839          8
          7844          9
          7900         10
          7902         11
          7934         12匡 12 SQL> select * from (select empno,rownum rn from scott.emp order by empno) t
      2  where t.rn between 4 and 6;     EMPNO         RN
    ---------- ----------
          7566          4
          7654          5
          7698          6SQL> 
      

  7.   

    先在此谢谢大家的帮忙  
    不过还是不明白  按理说数据结果集应该是:5,7,8.
    user表中id为7的rownum=3 怎么会在4和6之间呢?
      

  8.   

    SQL> select empno,rownum rn from scott.emp order by empno;     EMPNO         RN
    ---------- ----------
          7369          1
          7499          2
          7521          3
          7566          4
          7654          5
          7698          6
          7782          7
          7839          8
          7844          9
          7900         10
          7902         11
          7934         12匡 12 SQL> select * from (select empno,rownum rn from scott.emp order by empno) t
      2  where t.rn between 4 and 6;     EMPNO         RN
    ---------- ----------
          7566          4
          7654          5
          7698          6SQL> 
    这个rownum显然是按顺序的
    如果变成这样:
        EMPNO         RN
    ---------- ----------
          7369          4
          7499          5
          7521          6
          7566          1
          7654          2
          7698          3
          7782          7
          7839          8
          7844          9
          7900         10
          7902         11
          7934         12
    你说得到的结果应该是前三条数据!!!!!!
      

  9.   

    后面那种情况不会发生的select empno,rownum rn from scott.emp order by empno得到的数据室固定为:   EMPNO        RN 
    ---------- ---------- 
          7369          1 
          7499          2 
          7521          3 
          7566          4 
          7654          5 
          7698          6 
          7782          7 
          7839          8 
          7844          9 
          7900        10 
          7902        11 
          7934        12 select * from (select empno,rownum rn from scott.emp order by empno) t 
      2  where t.rn between 4 and 6; 
    是从上面的结果中选4--6,不会出现别的情况
      

  10.   

    select * from (
    select id,val,rownum num from test order by id)t where t.num>=4 and t.num <=6
    这种写法是不对的
    select * from test order by id:ID VAL1 val1
    2 val2
    3 val3
    3 valxxx3
    4 val4
    5 val5
    6 val6
    7 val7
    8 val8
    9 val9
    10 val10select * from (
    select id,val,rownum num from test order by id)t where t.num>=4 and t.num <=6
    得到的结果是:
    ID VAL NUM4 val4 4
    5 val5 5
    6 val6 6
    应该是
    3 valxxx3
    4 val4
    5 val5
    才对啊
      

  11.   

    ls明显没有测试
    SQL> create table test (id number,val varchar2(10));表已创建。SQL> insert into test values(1,'val1');已创建 1 行。SQL> insert into test values(2,'val2');已创建 1 行。SQL> insert into test values(3,'val3');已创建 1 行。SQL> insert into test values(3,'valxxx3');已创建 1 行。SQL> insert into test values(4,'val4');已创建 1 行。SQL> insert into test values(5,'val5');已创建 1 行。SQL> insert into test values(6,'val6');已创建 1 行。SQL> insert into test values(7,'val7');已创建 1 行。SQL> insert into test values(8,'val8');已创建 1 行。SQL> insert into test values(9,'val9');已创建 1 行。SQL> insert into test values(10,'val10');已创建 1 行。SQL> commit;提交完成。SQL> select * from test order by id;       ID VAL
    --------- --------------------
            1 val1
            2 val2
            3 val3
            3 valxxx3
            4 val4
            5 val5
            6 val6
            7 val7
            8 val8
            9 val9
           10 val10已选择11行。SQL> select * from ( 
      2  select id,val,rownum num from test order by id)t where t.num>=4 and t.num <=6 
      3  ;       ID VAL                        NUM
    --------- -------------------- ---------
            3 valxxx3                      4
            4 val4                         5
            5 val5                         6SQL> 
      

  12.   

    大家都有自己的想法  我这边真的是不知道到底哪个是真确答案了 
    希望哪位好心人 帮帮忙 按照我的表 执行下!
    我这oracle正在下载中 没法试验 希望可以快点找到正确答案 然后结贴散分!  
      

  13.   

    今天看到这感觉有趣,我的oracle 10G 不能将*与rownum连用,用下面语句能得到楼主期待的数据:
    SELECT ID,NAME FROM(select ROWNUM R,ID,NAME from (select * from users order by id)) WHERE R<=6
    AND R>=4;