oracle分页的方法,oracle分页[通俗易懂]

oracle分页的方法,oracle分页[通俗易懂]Oracle的oracle分页oracle的分页一共有三种方式方法一根据rowid来分SELECT*FROMEMPWHEREROWIDIN(SELECTRIDFROM(SELECTROWNUMRN,RIDFROM(SELECTROWIDRID,EMPNOFROMEMPORDERBYEMPNODESC)WHEREROWNUM<=((curre…

大家好,又见面了,我是你们的朋友全栈君。

Oracle 的 oracle分页

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://javaforall.net/140092.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sql查询序列是否存在_oracle if判断是否为空

    sql查询序列是否存在_oracle if判断是否为空sql如下:selectsequence_namefromuser_sequenceswheresequence_name=’参数’需要注意的是oraclesequence参数必须转换成大写。例子:(这是使用simple框架实现)//判断oraclesequence是否已经存在publicstaticbooleanisSequenceExi…

    2022年10月10日
    5
  • python df.iloc_python中loc

    python df.iloc_python中locstackoverflow原文:pandasilocvsixvslocexplanation;howaretheydifferent?在pandas0.20.0及以上版本,ix已经被loc和iloc取代了,因此不讨论它。前提,简单介绍一下它俩:–loc利用index的名称,来获取想要的行(或列)。–iloc利用index的具体位置(所以它只能是整数型参数),…

    2022年10月9日
    6
  • MATLAB中神经网络工具箱的使用「建议收藏」

    MATLAB中神经网络工具箱的使用「建议收藏」今夕何夕兮,前些天把玩了一下MATLAB中神经网络工具箱的使用,忽有“扪参历井仰胁息”之感。别的倒是没什么,只是神经网络的数据组织结构有些“怪异”,要是不小心就会导致工具箱报错。以下便是神经网络工具箱的正确打开姿势,谨供诸君参考:1.打开MATLAB,在命令行输入nntool,将出现如下界面:图1神经网络工具箱主界面其中最主要的分为6个部分:第1部分中显示的是系统的输…

    2022年6月20日
    126
  • Sublime Text3 如何安装、删除及更新插件

    Sublime Text3 如何安装、删除及更新插件1、打开SublimeText3,按Ctrl+`(和qq输入法快捷切换冲突,可以修改qq的输入法切换热键)2、复制粘黏以下代码添加至命令行,然后回车(功能:安装插件的工具,有了它,以后安装其他插件更方便)importurllib.request,os;pf=’PackageControl.sublime-package’;ipp=sublime.inst…

    2022年7月11日
    23
  • 两个pdf怎么打印到一张纸的正反面_pdf打印成小册子页数设置

    两个pdf怎么打印到一张纸的正反面_pdf打印成小册子页数设置没有打印预览费劲。

    2025年9月19日
    8
  • 主定理的证明及应用举例

    主定理的证明及应用举例主定理主定理最早出现在 算法导论 中 提供了分治方法带来的递归表达式的渐近复杂度分析 规模为 n 的问题通过分治 得到 a 个规模为 n b 的问题 每次递归带来的额外计算为 c n d T n aT n b c n d 那么就可以得到问题的复杂度为

    2025年10月23日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号