17,086
社区成员
发帖
与我相关
我的任务
分享
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 30
SQL> 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 10
SQL>
--下面的写法不行
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
select * from
(select a.*,rownum rn from (select * from person) a)
where rn between 11 and 20
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 20
select * from (select *,rownum rn
from person
where rownum<=20) a
where rn>=11
--一般分页都要排序,假设按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;
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;