博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 分页
阅读量:5101 次
发布时间:2019-06-13

本文共 2226 字,大约阅读时间需要 7 分钟。

oracle的分页一共有三种方式

方法一 根据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 <= ( (currentPage-1) * pageSize + pageSize )) --每页显示几条          WHERE RN > ((currentPage-1) * pageSize) ) --当前页数  ORDER BY EMPNO DESC; eg、 -- 5 = (currentPage-1) * pageSize + pageSize   每页显示几条 -- 0 = (currentPage-1) * pageSize              当前页数 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;

          

方法二 按分析函数来分

SELECT * FROM (SELECT T.*, ROW_NUMBER() OVER(ORDER BY empno DESC) RK FROM emp T) WHERE RK <= ( (currentPage-1) * pageSize + pageSize ) --每页显示几条 AND RK > ( (currentPage-1) * pageSize ); --当前页数
eg、 -- 5 = (currentPage-1) * pageSize + pageSize   每页显示几条 -- 0 = (currentPage-1) * pageSize              当前页数 SELECT * FROM (SELECT T.*, ROW_NUMBER() OVER(ORDER BY empno DESC) RK FROM emp T) WHERE RK <= 5 AND RK > 0;

               

方法三 按rownum 来分

SELECT *   FROM (SELECT T.*, ROWNUM RN           FROM (SELECT * FROM EMP ORDER BY EMPNO DESC) T          WHERE ROWNUM <= ( (currentPage-1) * pageSize + pageSize )) --每页显示几条  WHERE RN > ( (currentPage-1) * pageSize ); --当前页数 eg、 -- 5 = (currentPage-1) * pageSize + pageSize   每页显示几条 -- 0 = (currentPage-1) * pageSize              当前页数 SELECT *   FROM (SELECT T.*, ROWNUM RN           FROM (SELECT * FROM EMP ORDER BY EMPNO DESC) T          WHERE ROWNUM <= 5)  WHERE RN > 0;

其中emp为表名称,empno 为表的主键id,获取按empno降序排序后的第1-5条记录,emp表有70000 多条记录。

个人感觉方法一的效率最好,方法三 次之,方法二 最差。

               

下面通过方法三来分析oracle怎么通过rownum分页的

1、 SELECT * FROM emp; 2、显示rownum,由oracle分配的 SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e; --rn相当于Oracle分配的行的ID号 3、先查出1-10条记录 正确的: SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM<=10; 错误的:SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE rn<=10; 4、然后查出6-10条记录 SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM<=10) WHERE rn>=6;

转载于:https://www.cnblogs.com/zmwf/p/9040636.html

你可能感兴趣的文章
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
SDN第四次作业
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
[最小割][Kruskal] Luogu P5039 最小生成树
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
python第九天课程:遇到了金角大王
查看>>
字符串处理
查看>>
ECharts(Enterprise Charts 商业产品图表库)初识
查看>>
LeetCode Factorial Trailing Zeroes (阶乘后缀零)
查看>>
hdu 5402 Travelling Salesman Problem (技巧,未写完)
查看>>
[AIR] 获取U盘,打开U盘
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>