oracle分页sql

本文介绍了Oracle数据库中的四种分页方法,包括minus差分页、使用rownum伪列、notin相反及id升序分页等技术,并通过具体示例展示了如何实现数据的有效分页。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值