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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tasklist详解

    tasklist详解TASKLIST[/Ssystem[/Uusername[/P[password]]]]     [/M[module]|/SVC|/V][/FIfilter][/FOformat][/NH]描述:  该工具显示在本地或远程机器上当前运行的进程列表。参数列表:  /S  system     指定连

    2022年5月22日
  • 静态内部类和内部类的区别_内部类不能定义为抽象类

    静态内部类和内部类的区别_内部类不能定义为抽象类今天稍微复习一下静态内部类和内部类的相关知识,平常很少用静态内部类静态内部类,不能访问外部类的非静态成员静态内部类不需要创建外部类的对象就可访问(外部类名.内部类比如newMyMain.Person().display();就创建了静态内部类对象)静态内部类可以有public、protected、默认的、private等多种类型(这个功能我倒是从来没听说,通过实验的确ok…

    2022年10月11日
  • 已知网关,子网掩码,算IP地址段_ip地址子网掩码网关怎么计算

    已知网关,子网掩码,算IP地址段_ip地址子网掩码网关怎么计算首先要铺垫一些基础知识,整个互联网就是一个单一的、抽象的网络。IP地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32位的标识符。注意,每个IP地址都是独一无二的,就像人的身份证号码一样。而IP地址又分为A类、B类、C类、D类和E类地址,其中我们常用的是A、B、C三类,它们是单播地址(一对一通信),每一类地址都由两个固定长度的字段组成,其中第一个字段是

    2022年10月23日
  • dirsearch讲解_mv命令使用

    dirsearch讲解_mv命令使用dirsearch用法github地址参数选项(机翻)强制:字典设置:常规设置:请求设置:github地址https://github.com/maurosoria/dirsearch参数选项(机翻)强制:Mandatory:-uURL,–url=URL 目标URL-lFILE,–url-list=FILE 目标URL列表文件–stdin TargetURLlistfromSTDIN–cidr=CIDR

    2022年10月5日
  • C# delegate_sql case用法

    C# delegate_sql case用法委托从字面上理解就是一种代理,类似于房屋中介,由租房人委托中介为其租赁房屋。在C#语言中,委托则委托某个方法来实现具体的功能。委托是一种引用类型,虽然在定义委托时与方法有些相似,但不能将其称为方法。委托在使用时遵循三步走的原则,即定义声明委托、实例化委托以及调用委托。从数据结构来讲,委托是和类一样是一种用户自定义类型。委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。委托是C#语言中的一个特色,通常将委托分为命名方法委托

    2022年11月2日
  • 正在跳转_域名地址www为顶级域名

    正在跳转_域名地址www为顶级域名<formname=loading><palign=center><fontcolor="#0066ff"size="2&quo

    2022年8月3日

发表回复

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

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