`
hongzhguan
  • 浏览: 273052 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle数据库中的分页语句

阅读更多
方式一:
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
)
WHERE RN BETWEEN 3*(3-1)+1 AND 3*3

方式二分页查询格式:

SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME ORDER BY VALUE) A
WHERE ROWNUM <= 20*2
)
WHERE RN >20*(2-1)

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

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

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

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

这里就不对包含排序的查询进行说明了,下一篇文章会通过例子来详细说明。下面简单讨论一下多表联合的情况。对于最常见的等值表连接查询,CBO一般可能会采用两种连接方式NESTED LOOP和HASH JOIN(MERGE JOIN效率比HASH JOIN效率低,一般CBO不会考虑)。在这里,由于使用了分页,因此指定了一个返回的最大记录数,NESTED LOOP在返回记录数超过最大值时可以马上停止并将结果返回给中间层,而HASH JOIN必须处理完所有结果集(MERGE JOIN也是)。那么在大部分的情况下,对于分页查询选择NESTED LOOP作为查询的连接方法具有较高的效率(分页查询的时候绝大部分的情况是查询前几页的数据,越靠后面的页数访问几率越小)。

如果不介意在系统中使用HINT的话,可以将分页的查询语句改写为:

SELECT /*+ FIRST_ROWS */ * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21


使用row_number()高效分页
SELECT T.* FROM(
SELECT S.*,ROW_NUMBER() OVER(ORDER BY VALUE) AS NUM
FROM TABLENAME S
) T
WHERE NUM BETWEEN 3*(1-1)+1 AND 3*1

还有使用Minus关键字实现分页:
select * from studybook where rownum<=3*2
minus
select * from studybook where rownum<=3*(2-1)

*********************************************************************************

Mysql分页采用limt关键字

select * from t_order limit 5,10; #返回第6-15行数据
select * from  t_order limit  5; #返回前5行
select * from  t_order limit  0,5; #返回前5行

Mssql 2000分页采用top关键字(20005以上版本也支持关键字rownum)

Select top 10 * from t_order where id not in (select id from t_order where id>5 ); //返回第6到15行数据

其中10表示取10记录 5表示从第5条记录开始取


分享到:
评论

相关推荐

    java连接数据库的分页语句

    Java 连接数据库的分页语句主要包括连接 Oracle、SQL Server 和 MySQL 数据库的语句,以及连接这些数据库的分页语句。 连接 Oracle 数据库的语句: 使用 Oracle 数据库时,需要使用 Oracle 的 JDBC 驱动程序。首先...

    oracle数据库级分页(java)

    Oracle数据库级分页是数据库管理中的一个重要概念,特别是在处理大量数据时,为了提高查询效率和用户体验,分页技术显得尤为关键。在Java开发中,我们通常利用JDBC(Java Database Connectivity)来实现这一功能。本...

    三大数据库的分页语句

    在实际应用中,为了提高性能,通常会结合索引来使用这些分页语句。同时,要注意处理边界情况,比如当查询的页数超过实际存在的页数时,应有适当的处理机制。另外,对于大数据量的表,使用`ROW_NUMBER()`函数(在...

    常用的数据库分页语句

    数据库分页是数据库管理系统中一个重要的查询技术,用于在大量数据中实现高效的检索。当用户在网页或应用程序中浏览数据时,通常不希望一次性加载所有记录,而是分页显示,这样可以减少网络传输的数据量,提高用户...

    几条常见的数据库分页SQL 语句

    几条常见的数据库分页SQL 语句,针对oracle,sqlserver,mysql三种常见数据库的分页显示。

    使用简单的SQL语句实现的Oracle数据库分页技术

    ### 使用简单的SQL语句实现的Oracle数据库分页技术 #### 环境:Oracle 9i 在Oracle数据库中实现分页查询是一项常见的需求,尤其是在处理大量数据时。本文将介绍一种利用简单SQL语句来实现Oracle数据库分页的方法,...

    毕业设计jsp+Sturts+hibernate的添删改查以及分页!采用Oracle数据库

    采用Oracle数据库" 是一个基于Web的新闻管理系统,它利用了Java Web技术栈中的核心组件,包括JSP(JavaServer Pages)、Struts、Hibernate,以及数据库管理工具Oracle。这个系统的主要功能是实现对新闻数据的添加、...

    数据库分页SQL语句实现

    ### 数据库分页SQL语句实现 在开发MIS系统或Web应用系统时,经常会遇到对数据库进行分页处理的需求。这是因为数据量庞大时,一次性加载所有数据会给系统带来很大的负担,同时也会影响用户体验。因此,分页技术成为...

    常用数据库sql分页

    Oracle的分页语句使用ROWNUM关键字,语法为: ```sql SELECT * FROM (SELECT ROWNUM R, t.* FROM table_name WHERE ROWNUM ) WHERE R &gt;= startIndex; ``` 其中,startIndex指定从第几行开始提取,endIndex指定要提取...

    TERADATA、ORACLE数据库分页

    ORACLE数据库则采用`ROWNUM`伪列来进行分页。`ROWNUM`会为每行分配一个唯一的数字,我们可以结合子查询来实现分页: ```sql SELECT * FROM ( SELECT t.*, ROWNUM AS rn FROM 表名 t ORDER BY 排序字段 ) WHERE ...

    C#版Oracle数据库通用操作类

    在现代软件开发中,数据库操作是必不可少的一部分,而 C# 结合 Oracle 数据库的应用尤为广泛。本文将深入探讨一个用于简化 Oracle 数据库操作的 C# 类——`ConnForOracle`。该类提供了一系列方法,包括基础连接、...

    java连接Oracle分页显示

    在Java编程中,连接Oracle数据库并实现分页显示是一项常见的任务。这涉及到对数据库的查询操作,特别是当数据量较大时,为了提高用户体验和系统性能,分页展示数据显得尤为重要。Oracle数据库支持多种方式进行分页,...

    oracle 分页语句

    在Oracle数据库中,实现分页查询是常见的需求之一。通过合理的分页查询可以提高数据检索的效率,优化用户体验。本文将详细介绍一个特定的Oracle分页查询语句:“`select * from (select a.*,rownum rn from (select ...

    oracle数据库表的分页

    在Oracle数据库中,分页查询是一项非常常见的操作,特别是在处理大量数据时,为了提高用户体验,我们通常会将数据分批加载,这就是所谓的“分页”。Java作为一种常用的后端开发语言,提供了多种方式来实现对Oracle...

    Oracle的分页查询语句.docx

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

    JSP+JDBC_真分页(基于Oracle数据库分页).

    在Oracle数据库中,实现分页通常涉及到SQL的`ROWNUM`或`FETCH FIRST`子句(Oracle 12c及更高版本)。`ROWNUM`是一个伪列,表示行的顺序号,而`FETCH FIRST`则允许我们限制返回的行数,从而实现分页效果。 以下是...

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

    Oracle数据库在处理大数据量查询时,分页查询是一种常见的优化策略,目的是限制返回结果集的大小,加快查询速度,提供更好的用户体验。本文将详细探讨Oracle的分页查询语句及其存储过程。 首先,Oracle的分页查询...

    各数据库分页语法支持

    #### Oracle 数据库分页 Oracle 支持多种分页方式,包括三层嵌套分页、ROW_NUMBER() 函数分页及 ROWNUM 控制最大条数的方法。 1. **三层嵌套分页**: ```sql SELECT * FROM ( SELECT row_.*, ROWNUM as rownum ...

    ORACLE学习之常用数据库系统表语句

    Oracle数据库中,系统表存储了数据库对象的元数据,例如表、视图、索引等,以及用户权限、统计信息等关键信息。掌握常用系统表语句对于数据库的管理和日常维护至关重要。接下来将详细介绍一些常用的Oracle系统表语句...

    ORACLE数据库基础测试题oracle数据库复习题[借鉴].pdf

    Oracle数据库基础知识点总结 在 Oracle 数据库中,DDL(Data Definition Language,数据定义语言)是一种用于定义数据库结构的语言,包括创建、修改和删除数据库对象的语句,如 CREATE、ALTER 和 DROP 等。DDL 语句...

Global site tag (gtag.js) - Google Analytics