oracle分页

本文介绍了Oracle数据库中的三种分页方法:使用ROWID定位记录、利用分析函数ROW_NUMBER()以及通过ROWNUM实现。每种方法均有详细的SQL示例,帮助读者理解和掌握Oracle分页查询的技术细节。

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

第一种:ROWID
ROWID 是一个类似于rownum的伪列,用于定位数据库中一条记录的一个相对唯一地址值
ROWID格式:

select Rowid from emp where comm=0
AAAR3s                    AAE            AAAACX               AAJ
--对象号(6个字符)     --文件号(3个字符)   --块号(6个字符)   --  行号(3个字符) 

ROWID进行分页

SELECT *
  FROM EMP
 WHERE ROWID IN
       (SELECT RID
          FROM (SELECT ROWNUM RN, RID
                  FROM (SELECT ROWID RID, EMPNO FROM EMP ORDER BY EMPNO DESC)
                 WHERE ROWNUM <= ( (1-1) * 5 + 5 )) --每页显示几条
         WHERE RN > ((1-1) * 5) ) --当前页数
 ORDER BY EMPNO DESC;

第二种分析函数
SQL Server,oracle都支持这个函数

第一种写法:

  SELECT *
    FROM (SELECT T.*, ROW_NUMBER() OVER(ORDER BY empno DESC) RK FROM emp T)
    WHERE RK <= 6---显示的条数
    AND RK > 0;---从第几条开始

第二种写法: between and 函数

 SELECT *
FROM (SELECT T.*, ROW_NUMBER() OVER(ORDER BY empno DESC) RK FROM emp T)
where RK between   0 and 6
------0代表开始条数   6显示的条数

第三种:rownum
rownum是oracle系统顺序分配为从查询返回的行的编号
第一种写法:

select *
from(
select rownum rn,sal
from(
select sal
from emp
order by sal desc
)
)where rn <=5 and rn >=0
------------rn<=显示条数 and rn >=第几条开始

第二种写法:
这种写法执行的效率高

SELECT *
  FROM (SELECT T.*, ROWNUM RN
          FROM (SELECT * FROM EMP ORDER BY EMPNO DESC) T
         WHERE ROWNUM <= 5)
 WHERE RN > 0;
 ----然后查出0-5条记录

注意 的rownum用法:
正确的:

 SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM<=10;

错误的:

SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE rn<=10;

如果想使用外面在嵌套查询如:

select * from (
SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e
)WHERE rn<=10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值