`

[转]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最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。

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

转自http://database.51cto.com/art/201011/233898.htm
分享到:
评论

相关推荐

    Oracle的分页查询语句.docx

    "Oracle分页查询语句详解" Oracle 的分页查询语句是数据库查询中的一种优化手段,用于控制查询结果集的大小,以提高查询效率。在 Oracle 中,分页查询语句可以使用 ROWNUM 和子查询来实现。本文将详细介绍 Oracle ...

    Oracle的分页查询语句 Oracle分页的存储过程

    本文将详细探讨Oracle的分页查询语句及其存储过程。 首先,Oracle的分页查询语句通常遵循一个标准格式,如下所示: ```sql SELECT * FROM ( SELECT A.*, ROWNUM RN FROM ( SELECT * FROM TABLE_NAME ) A WHERE ...

    Oracle分页查询(很不错的介绍)

    首先,理解Oracle分页查询的基本结构。通常,Oracle的分页查询采用嵌套查询的方式实现。以下是一个典型的分页查询模板: ```sql SELECT * FROM ( SELECT A.*, ROWNUM RN FROM ( SELECT * FROM TABLE_NAME ) A ...

    oracle认证详解Oracle的几种分页查询语句

    ### Oracle认证详解:Oracle的几种分页查询语句 #### 分页查询背景及重要性 在数据库管理系统(DBMS)中,特别是在Oracle这样的大型关系型数据库中,分页查询是一种非常实用的技术。它允许用户根据需求获取特定...

    oracle分页查询

    ### Oracle分页查询详解 #### 一、Oracle分页查询基础 在Oracle数据库中,分页查询是一项常用的技术,主要用于处理大数据量时的查询需求,能够有效地减少每次查询返回的数据量,提高系统的响应速度和用户体验。 ##...

    Sql语法转换为Oracle语法

    这通常是因为在系统迁移或跨平台开发时,需要将SQL Server的查询语句适应Oracle数据库的语法。 描述中提到的"SqlConvertToOracle.pas"是一个关键文件,它可能是一个用Delphi编写的源代码文件,包含了实现SQL语句...

    Oracle分页查询

    ### Oracle分页查询详解 #### 一、Oracle分页查询基础 在Oracle数据库中,实现分页查询是一项常见的需求,特别是在处理大量数据时。本文将详细介绍Oracle中的分页查询技术,帮助初学者快速掌握这一技能。 #### 二...

    分页代码Oracle

    在Oracle数据库中,分页查询是一项非常常见的操作,特别是在数据量庞大的情况下,为了提高用户体验,避免一次性加载过多数据导致页面响应变慢,我们通常会采用分页的方式展示数据。本篇将详细介绍Oracle数据库中的...

    oracle分页操作

    1. 最内层查询:`SELECT * FROM TABLE_NAME`,这是原始的不进行分页的查询语句。 2. 中间层查询:`SELECT A.*, ROWNUM RN FROM (原始查询) A WHERE ROWNUM ,这里`ROWNUM 用于控制返回的最大行数,即每页的上限。 3....

    Oracle实现分页查询的SQL语法汇总

    总结来说,Oracle中实现分页查询有多种方法,无ORDER BY的写法在效率上更优,但无法保证数据的排序。有ORDER BY的写法则可确保排序,但性能较差。在实际应用中,应根据具体需求选择合适的方法,并考虑优化策略,如...

    oracle的伪列与分页

    3. **分页查询的另一种写法**: ```sql SELECT USRID, GRPID, UNAME, SAL, BRITH FROM ( SELECT A.*, ROWNUM AS RN FROM (SELECT * FROM T_USER ORDER BY USRID) A WHERE ROWNUM ) WHERE RN ; ``` 上述...

    oracle面试题

    #### 二、Oracle分页语句的写法 在Oracle中实现分页主要通过`RowNum`来完成。具体步骤如下: 1. **确定起始行号**:计算出要跳过的行数。 2. **使用`RowNum`**:给所有行加上行号。 3. **过滤行号**:根据需要显示...

    Oracle到mysql转换的问题总结要点.doc

    2. **SQL语句写法差异**: - Oracle中字符串用单引号包围,而MySQL中可用单引号或双引号。 - MySQL在使用子查询时,如`FROM (SELECT...)`,需要在子查询后添加别名。 - 在删除数据时,MySQL不支持对表使用别名,...

    Oracle到mysql转换的问题总结.doc

    2. 语句写法的区别: - Oracle字符串使用单引号,而MySQL可以使用单引号或双引号。 - MySQL在`FROM`后面跟子查询时,子查询必须有别名,如`FROM (SELECT ...) AS alias`。 - MySQL的`DELETE`语句不支持对表加别名...

    oracle sql 帮助文档

    Oracle SQL是甲骨文公司开发的一种关系数据库管理系统(RDBMS)中使用的...通过上述知识点的学习,可以更深入地理解Oracle SQL的基本语法和特性,进而编写有效且高效的SQL查询语句来操作和管理Oracle数据库中的数据。

    Oracle到mysql转换的问题总结[收集].pdf

    2. **SQL语句写法的区别**: - Oracle字符串使用单引号 `'` 包裹,而MySQL接受单引号和双引号 `''` 或 `""`。 - MySQL在从子查询中选择数据时,`FROM`后面的子查询必须加上别名。 - MySQL的`DELETE`语句不支持...

Global site tag (gtag.js) - Google Analytics