Oracle数据库的rownum
在Oracle数据库中,分页方式没有MySql这样简单,它需要依靠rownum来实现.
错误的理解:
对于分页,我们只要想办法可以查询到从某一起始行到终止行就可以的,分页的逻辑可以放到程序里面。
- select*from users where rownum>=3 rownum <=4;
哈哈!是不是发现没有任何结果,原因很简单,Oracle机制就是这样的:因为第一条数据行号为1,不符合>=3的条件,所以第一行被去掉,之前的第二行变为新的第一行(即这个行号不是写死的,可以理解为是动态的),如此下去,一直到最后一行,条件始终没法满足,所以就一条数据也查不出来。
于是,我们理所当然会想到如下语句查询第2页的数据(每页2条数据,页码从1开始,所以起始行的行号为 (页码-1)*每页长度+1=3,终止行的行号为 页码*每页长度=4)
Rownum表示一条记录的行号,值得注意的是它在获取每一行后才赋予.因此,想指定rownum的区间来取得分页数据在一层查询语句中是无法做到的,要分页还要进行一次查询.
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控制分页查询的每页的范围。
上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在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最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。
上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。
相关推荐
Oracle数据库是一种广泛使用的大型关系型数据库管理系统,其在处理大量...这个源码示例可能涵盖了上述部分或全部知识点,通过学习和实践,可以加深对Oracle数据库分页原理的理解,提高Java开发中处理数据库查询的能力。
### 使用简单的SQL语句实现的Oracle数据库分页技术 #### 环境:Oracle 9i 在Oracle数据库中实现分页查询是一项常见的需求,尤其是在处理大量数据时。本文将介绍一种利用简单SQL语句来实现Oracle数据库分页的方法,...
本主题将深入探讨Oracle数据库级分页的原理以及如何在Java项目中应用。 首先,理解数据库级分页的含义。数据库级分页是指在数据库服务器端进行数据的分块处理,而不是一次性获取所有数据,然后在应用程序中进行分页...
### Oracle数据库分页知识点详解 在Oracle数据库管理与开发中,数据分页是一项常见的需求,尤其是在处理大量数据时。分页技术能够有效地提高查询效率,改善用户体验。本文将基于提供的标题、描述、标签以及部分内容...
本文将深入解析数据库分页的原理,并提供简单易学的方法。 首先,我们要理解什么是数据库分页。数据库分页是将查询结果集分割成多个部分,每个部分称为一页,用户可以逐页浏览,而不是一次性显示所有记录。这在处理...
首先,我们需要理解Oracle数据库中的分页原理。在SQL语句中,我们可以使用`ROWNUM`伪列来限制返回的行数。`ROWNUM`是在查询结果生成时就分配的,它表示当前行在所有结果中的位置。通过`WHERE ROWNUM BETWEEN x AND y...
#### 一、Oracle数据库分页 在Oracle数据库中,实现分页查询可以通过多种方法,其中一种常见的方法是使用`ROWNUM`伪列来实现。 **基本原理:** - `ROWNUM`用于标识查询结果集中的行编号。 - `ROWNUM`在查询时自动...
### Oracle数据库分页实现原理与应用 #### 一、背景介绍 在现代数据密集型应用中,高效地处理大量数据并提供用户友好的界面是非常重要的。分页是一种常见的技术,用于将大量的数据分成多个较小的页面展示给用户,...
1. **数据库分页原理**: 数据库分页的基本思想是将数据分成若干个页,每次只返回用户请求的一页数据,而不是一次性返回所有数据。这有助于减少网络传输的数据量,提高页面加载速度,并减轻服务器压力。 2. **通用...
1. 数据库分页原理: - 分页是将大型数据集分为若干小部分(页)来显示,每次只加载一部分数据,而不是一次性加载所有数据。这减少了网络传输的数据量,提高了页面加载速度。 - 常用的分页方式有两种:物理分页和...
Oracle数据库是广泛使用的大型关系型数据库系统,尤其在处理海量数据时,分页技术显得尤为重要,因为它能够有效地减少数据处理量,减轻服务器和客户端的负载,同时提供用户友好的浏览体验。在MySQL数据库中,分页...
总之,"jsp分页 oracle 插件demo"为开发者提供了一个快速理解和实践JSP与Oracle数据库分页的实例。通过这个例子,你可以学习到如何结合Java、JSP和Oracle数据库来高效地处理大数据量的展示问题,提升网页应用的性能...
### Oracle数据库基础教程知识点概述 #### 一、数据库基础 1. **数据库简介**: - 数据库的概念:介绍数据库的基本定义,以及其在信息化社会中的重要作用。 - 数据库的发展历程:从早期的文件系统到关系型数据库...
2. Oracle数据库分页: Oracle使用ROWNUM伪列来实现分页,通常结合子查询或WITH ROWNUMBER功能。但Oracle没有直接的OFFSET,所以需要一些技巧,如: ```sql SELECT * FROM ( SELECT t.*, ROWNUM rn FROM ...
Oracle数据库作为业界领先的数据库管理系统之一,提供了丰富的功能来满足各种复杂的数据处理需求。其中,分页查询是数据展示时常用的技术手段,它允许用户通过分批获取数据,从而提高系统的响应速度和用户体验。下面...
在Oracle数据库中,分页查询是一项常见的操作,特别是在大数据量的场景下,为了提高用户体验,我们需要快速有效地获取数据的一部分,而不是一次性加载所有记录。这里我们将深入探讨如何利用Oracle的存储过程来实现...
### Oracle数据库基础面试题知识点详解 #### 一、Oracle数据库概述 **知识点1:Oracle数据库的概念** - **定义**:Oracle数据库是由Oracle公司开发的一种基于网络访问的关系型数据库管理系统,支持跨平台运行,具备...
Oracle数据库提供了多种方法来实现分页查询,其中包括使用ROWNUM伪列、游标(CURSOR)以及Oracle的高级分页功能如ROW_NUMBER()、RANK()和DENSE_RANK()等。 1. ROWNUM伪列: ROWNUM是Oracle数据库特有的一个伪列,它...
一、Oracle分页原理 Oracle提供了几种不同的分页方式,包括ROWNUM、ROWNUM BETWEEN、ROWNUMBER() OVER()等。其中,ROWNUM是最基础的分页方法,它为每一行返回的结果集分配一个唯一的整数值。但是,ROWNUM在并行查询...