已知oracle表结构如下:
CREATE TABLE person
(
id number(5) NOT NULL PRIMARY KEY ,
pid varchar2(32) ,
name varchar2(32) ,
password varchar2(20)
) 表里有好多条记录,求一条语句,能查出表中第11条记录到第20条记录,谢谢了。
CREATE TABLE person
(
id number(5) NOT NULL PRIMARY KEY ,
pid varchar2(32) ,
name varchar2(32) ,
password varchar2(20)
) 表里有好多条记录,求一条语句,能查出表中第11条记录到第20条记录,谢谢了。
WHERE ROWNUM <=20
MINUS
SELECT * FORM PERSON
WHERE ROWNUM<11;SELECT *
FROM (
SELECT *,ROWNUM RN
FROM PERSON
)WHERE RN BETWEEN 11 AND 20;
一般用三层select套用,把rownum用别名变成一个实际列字段来处理,当然如果只是要找记录<的,可以直接用,只要不用>什么都无所谓
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;
(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
(select a.*,rownum rn from (select * from person) a)
where rn between 11 and 20
FROM (SELECT ROWNUM AS pagesortid, temp_exppagequery.*
FROM (select * from person) temp_exppagequery)
WHERE pagesortid > 0 AND pagesortid <= 10;
新建oracle QQ 群
群号:54775466
欢迎爱好者积极者 入群一起探讨。
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