首页 > Oracle中分页查询语句

Oracle中分页查询语句

Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看。

Oracle分页查询语句基本上可以按照本文给出的格式来进行套用。

Oracle分分页查询格式:

复制代码
SELECT * FROM  
(  
SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21 
复制代码

 

其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。

上面给出的这个Oracle分分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。

选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。查询语句如下:

SELECT * FROM  
(  
SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) WHERE RN BETWEEN 21 AND 40 

 

对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。

这是由于CBO 优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。

而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。

上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。

 

分页计算方式:

复制代码
        //page是页数,rows是显示行数int page=2;int rows=5; List list=a.select(page*rows+1,(page-1)*rows); // sql语句: select * from(select a.*,rownum rn from (select * from t_articles) a where rownum < 11) where rn>5

      //第一个参数,对应着第一个rownum<11,第二个参数对应着rn>5

转载于:https://www.cnblogs.com/lcword/p/9566778.html

更多相关:

  • 关注我的头条号,获取更多运维相关知识。你想了解哪方面的运维知识,请评论区告诉我,我会尽快更新~MySQL 数据库,基本上运维都会接触到,而对于数据库的性能优化,想必是大家比较关注的,下面分享一些调优技巧。先决条件安装 MySQL,版本大于 5.7有部分数据操作系统、数据库管理员权限MySQL 系统性能优化在系统层面,调整硬件和软件选项...

  • spring data jpa提供了多种查询方式,如下:方法名称查询继承Repository接口测试代码方法名称中支持的关键字(官方文档提供)使用JPA命名查询在User实体中定义jpql(类似于hql)jpql(百度百科)继承JpaRepository接口测试使用@Query查询和命名查询不同的是,将jpql写到了 dao 方法上,...

  • 转自:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html   对于SqlServer的优化来说,可能优化查询是很常见的事情。关于数据库的优化,本身也是一个涉及面比较的广的话题,本文只谈优化查询时如何看懂SqlServer查询计划。由于我对SqlServer的认识...

  • 一.实现基础功能之一(记账)   一个记账本最基础之一的功能就是记账,所以也是首先要解决的问题,我选择了上学期使用的MySQL数据库来对账本进行存储。   我选择记账的方法是分开记账,就是支出放在一个表,收入放在一个表,这样在数据库方面会比较的直观的看到,但是在显示的时候就会产生部美观的问题,就是支出和收入都是分开来的,没有办法按照时...

  • 在Navicat中,我们选中一个表,双击打开,这是如果要新建查询这个表的sql语句,可以直接用快捷键  ctrl+q  会自动打开查询窗口,并直接写好 sql:select * from (当前打开的表名) 我们直接在后面补全查询条件即可,非常方便。 转载于:https://www.cnblogs.com/libin6505/...

  • 零(将字符串转化成数字的函数)       int num = atoi(arr);      该函数具有把字符串转化成整型数的作用。 壹(vim显示行号)       Linux终端下直接输入vim   ~/.vimrc,打开是一个空白的页面,然后进入插入模式,直接输入set nu,然后保存并退出,以      后每次  ...

  • windows下 Source Monitor代码度量工具的使用 引用链接: https://www.cnblogs.com/xuehanyu/p/4520965.html 1.总体介绍 SourceMonitor是一款免费的软件,运行在Windows平台下。它可对多种语言写就的代码进行度量,包括C、C++、C#、Java、V...

  •   python基础知识(二)   (二)常用控制流 1、控制语句 分支语句:起到一个分支分流的作用,类似马路上的红绿灯 循环语句:for while 可以使代码不断重复的执行   2、判断语句:关键字是if..elif..else  a、if条件语句后面可以接比较运算、逻辑运算、成员运算;当if后面的语句满足条件,允许的结果是Tru...

  • 1.Python : 是一门解释型 弱类型 高级开发编程语言. 2.第一个Python程序的编写: print ("hell,world") 3.变量:把程序运行过程中的值储存起来,方便后面的程序调用. 4.变量的命名要求: 1,只能是数字或字母或下划线组成; 2,不能是数字开头,也不能全是数字; 3,不能是Python的关键字; 4...

  • 一 程序的三种基本结构              顺序结构:程序从上往下依次执行,这个叫顺序结构         分支结构:有选择的执行或者不执行某段代码         循环结构:重复的执行某段代码 二 分支结构之if 最简单的俩种用法   (tips: if语句后面的大括号可以省略:如果省略:那么这个if语句只能管理离它最近的那...

  • reportviewer 不设置分页 通过设置“report”的属性interactivesize 的height的值为0In 就可以,不再分页,正页显示全篇 转载于:https://www.cnblogs.com/Kazaf/archive/2012/07/23/2604772.html...