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

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

oracle的分页一共有三种方式

参见:http://www.cnblogs.com/linjiqin/archive/2012/02/03/2336731.html

方法一 根据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/GtShare/p/7520328.html

你可能感兴趣的文章
MyEclipse连接SQL Server 2008数据库的操作方法
查看>>
SqlCel 和MySQL for Excel在批量处理数据上的优劣
查看>>
leetcode【67】-Bulb Switcher
查看>>
JS验证图片格式和大小并预览
查看>>
调节心态的十种做法
查看>>
laravel5.2 移植到新服务器上除了“/”路由 ,其它路由对应的页面显示报404错误(Object not found!)———新装的LAMP没有加载Rewrite模块...
查看>>
乱七八糟
查看>>
潜罪犯
查看>>
python函数
查看>>
编写高质量代码--改善python程序的建议(六)
查看>>
windows xp 中的administrator帐户不在用户登录内怎么解决?
查看>>
[spfa] Jzoj P4722 跳楼机
查看>>
代码审计入门后审计技巧
查看>>
Linux-Rsync服务器/客户端搭建实战
查看>>
接口和抽象类有什么区别
查看>>
简单通过百度api自动获取定位-前端实现
查看>>
180117 我的宠物识别判断语句
查看>>
JavaScript修炼之道pdf
查看>>
自己动手构造编译系统++编译、汇编与链接pdf
查看>>
JAVA 中文件读写函数BufferedReader 和 BufferedWriter 的使用
查看>>