已知oracle表结构如下:
CREATE TABLE person
(

id number(5) NOT NULL PRIMARY KEY ,                                  
pid varchar2(32) ,     
         name varchar2(32) ,   
         password varchar2(20)  
) 表里有好多条记录,求一条语句,能查出表中第11条记录到第20条记录,谢谢了。

解决方案 »

  1.   

    SELECT * FROM PERSON
    WHERE ROWNUM <=20
    MINUS
    SELECT * FORM PERSON
    WHERE ROWNUM<11;SELECT *
    FROM (
    SELECT *,ROWNUM RN
    FROM PERSON
    )WHERE RN BETWEEN 11 AND 20;
      

  2.   

    oracle中的rownum字段是记录行数的,但是是个虚字段,不能用大于,如当你的条件是rownum > 10的时候,它先从1开始判断,记录1不符合条件,被排除,这时记录2就变成rownum = 1了,所以用>1的rownum会变成所有记录都不符合条件
    一般用三层select套用,把rownum用别名变成一个实际列字段来处理,当然如果只是要找记录<的,可以直接用,只要不用>什么都无所谓
      

  3.   

    --一般分页都要排序,假设按id排序
    SELECT id, pid, NAME, password
      FROM (SELECT t.*, rownum rn
              FROM (SELECT * FROM person t ORDER BY id) t
             WHERE rownum <= 20)
     WHERE rn >= 10;
      

  4.   

    select id,pid,name,password
    (select id,pid,name,password,row_number() over(partition by id order by id) rn
    from person) a
    where rn between 11 and 20select * from (select *,rownum rn
    from person
    where rownum<=20) a
    where rn>=11
      

  5.   

    select * from
    (select a.*,rownum rn from (select * from person) a)
    where rn between 11 and 20
      

  6.   

    SELECT *
      FROM (SELECT ROWNUM AS pagesortid, temp_exppagequery.*
              FROM (select * from person) temp_exppagequery)
     WHERE pagesortid > 0 AND pagesortid <= 10;
      

  7.   

    顶一下
        新建oracle QQ 群 
                 群号:54775466
             欢迎爱好者积极者 入群一起探讨。
      

  8.   

    看了楼上各位的写法,把过程贴出来大家学习一下。
    SQL> select * from 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
          7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20
          7839 KING       PRESIDENT            17-11月-81           5000                    10
          7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30
          7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
          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已选择14行。SQL> select * from emp
      2  where rownum<=10
      3  minus
      4  select * from emp
      5  where rownum<=5
      6  /     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
          7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30
          7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10
          7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20
          7839 KING       PRESIDENT            17-11月-81           5000                    10
          7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30SQL> select * from (select t.*,rownum rn from emp t) where rn between 6 and 10;     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO         RN
    ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- ----------
          7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30          6
          7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10          7
          7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20          8
          7839 KING       PRESIDENT            17-11月-81           5000                    10          9
          7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30         10SQL>--下面的写法不行
    SQL> select * from (select *,rownum rn from emp) where rn between 5 and 10;
    select * from (select *,rownum rn from emp) where rn between 5 and 10
                           *
    第 1 行出现错误:
    ORA-00923: FROM keyword not found where expected