oracle中四种分页。mysql中用limit关键字
第一种方法:minus差分页
SQL> select * from emp where rownum<=10 minus
2 select * from emp where rownum<=5;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7698 BLAKE MANAGER 7839 1981/5/1 星期 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 星期 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 星 1000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 星期 1500.00 0.00 30
SQL> select * from emp where rownum<=10;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980/12/17 1000.00 20
7499 ALLEN SALESMAN 7698 1981/2/20 星 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 星 1250.00 500.00 30
7566 JONES MANAGER 7839 1981/4/2 星期 1000.00 20
7654 MARTIN SALESMAN 7698 1981/9/28 星 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 星期 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 星期 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 星 1000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 星期 1500.00 0.00 30
10 rows selected
注意:这样一minus就剩下最后剩下的几行。
第二种:rownum伪列
SQL> select *
2 from (select rownum tid ,t.* from emp t where rownum<=10)--把select当做一个表
3 where tid<=10 and tid>=5
4 ;
TID EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ----- ---------- --------- ----- ----------- --------- --------- ------
5 7654 MARTIN SALESMAN 7698 1981/9/28 星 1250.00 1400.00 30
6 7698 BLAKE MANAGER 7839 1981/5/1 星期 2850.00 30
7 7782 CLARK MANAGER 7839 1981/6/9 星期 2450.00 10
8 7788 SCOTT ANALYST 7566 1987/4/19 星 1000.00 20
9 7839 KING PRESIDENT 1981/11/17 5000.00 10
10 7844 TURNER SALESMAN 7698 1981/9/8 星期 1500.00 0.00 30
6 rows selected
第三种:not in 相反
SQL> select *
2 from emp
3 where empno not in(select empno from emp where rownum<=5) and rownum<=5
4 ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7698 BLAKE MANAGER 7839 1981/5/1 星期 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 星期 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 星 1000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 星期 1500.00 0.00 30
SQL>
第四种:id升序(id =empno)
SQL> select *
2 from emp2
3 where empno>(select max(empno) from emp2 where rownum<=5) and rownum<=5
4 ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7698 BLAKE MANAGER 7839 1981/5/1 星期 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 星期 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 星 1000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 星期 1500.00 0.00 30
SQL> select rownum tid,t.*
2 from emp t
3 where rownum<=5
4 ;
TID EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ----- ---------- --------- ----- ----------- --------- --------- ------
1 7369 SMITH CLERK 7902 1980/12/17 1000.00 20
2 7499 ALLEN SALESMAN 7698 1981/2/20 星 1600.00 300.00 30
3 7521 WARD SALESMAN 7698 1981/2/22 星 1250.00 500.00 30
4 7566 JONES MANAGER 7839 1981/4/2 星期 1000.00 20
5 7654 MARTIN SALESMAN 7698 1981/9/28 星 1250.00 1400.00 30