`

分页查询中 rownum 的应用解析

 
阅读更多
在查询中,我们可以注意到,类似于“select xx from table where rownum < n”(n>1)这样的查询是有正确含义的,而“select xx from table where rownum = n”这样的查询只在n=1的时候成立,“select xx from table where rownum > n”(n>1)这样的查询只能得到一个空集。另外“select xx from table where rownum > 0”这个查询会返回所有的记录。这是为什么呢?原因就在于Oracle对rownum的处理上,rownum是在得到结果集的时候产生的,用于标记结果集中结果顺序的一个字段,这个字段被称为“伪数列”,也就是事实上不存在的一个数列。它的特点是按顺序标记,而且是逐次递加的,换句话说就是只有有rownum=1的记录,才可能有rownum=2的记录。

    让我们回头来分析一下在where中使用rownum作为查询条件的情况。在rownum取=1,或者rownum <= n (n>1)的时候,没有问题。那么为什么当条件为rownum = n或者rownum >= n时明明有数据却只能得到一个空集呢?假设我们的查询条件为rownum = 2,那么在查询出的第一条记录的时候,oracle标记此条记录rownum为1,结果发现和rownum=2的条件不符,于是结果集为空。

和rownum相似,oracle还提供了另外一个伪数列:rowid。不过rowid和rownum不同,一般说来每一行数据对应的rowid是固定而且唯一的,在这一行数据存入数据库的时候就确定了。可以利用rowid来查询记录,而且通过rowid查询记录是查询速度最快的查询方法。(这个我没有试过,另外要记住一个长度在18位,而且没有太明显规律的字符串是一个很困难的事情,所以我个人认为利用rowid查询记录的实用性不是很大)rowid只有在表发生移动(比如表空间变化,数据导入/导出以后),才会发生变化。
根据我个人理解,rowid是和索引关联的。利用索引时,就是通过索引对应的rowid去具体的表查询的。

分享到:
评论

相关推荐

    javamabatis分页查询

    #### 一、分页查询概念及应用场景 在进行数据查询时,特别是对于大型数据库系统来说,一次性获取所有数据可能会导致性能问题,如响应时间过长、服务器资源占用过大等。因此,通常会采用分页查询的方式来优化用户...

    java自定义分页标签实现带条件的分页查询

    在Java开发中,分页查询是一项常见的需求,尤其是在构建大型Web应用时,为了提高用户体验,通常需要对大量的数据进行分页展示。本话题主要探讨如何使用自定义的Java分页标签来实现带条件的分页查询,这将帮助开发者...

    Oracle数据库中分页查询介绍

    在Oracle数据库中,分页查询是一项...总的来说,实现Oracle数据库中的分页查询需要理解ROWNUM的特性和正确使用子查询或存储过程。通过合理利用这些技术,开发人员可以在保证性能的同时,为用户提供流畅的分页浏览体验。

    如何在Oracle中实现搜索分页查询

    综上所述,实现Oracle中的搜索分页查询需要理解ROWNUM的工作原理,合理地构造子查询和绑定变量,以及考虑是否利用存储过程进行优化。通过这些技术,可以有效地在大量数据中实现分页查询,提供高效且用户友好的数据...

    分页的sql总结

    利用ROWNUM进行分页查询,需要注意的是,必须在子查询中使用ROWNUM,否则可能会导致不正确的结果。具体实现如下: ```sql SELECT * FROM ( SELECT t.*, ROWNUM rn FROM ( SELECT * FROM t_xiaoxi ORDER BY cid ...

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

    在Oracle中,实现分页查询有两种常见方法:第一种方法是利用`ROWNUM`伪列结合子查询;第二种方法则是使用`FETCH FIRST`子句(在Oracle 12c及以上版本中可用)。本文将重点介绍第一种方法,并详细解析其背后的原理与...

    解析函数高效实现分页

    本文将详细介绍如何利用Oracle中的`ROW_NUMBER()`解析函数来实现高效的分页功能,并通过示例对比不同分页方法的优劣。 #### 传统分页方法的问题 1. **ROWNUM方法**: - **原理**:通过`ROWNUM`为结果集中的每一行...

    oracle分页查询sql

    在 Oracle 中,可以通过 `ROWNUM` 函数来实现简单的分页查询。下面是一段典型的分页查询 SQL 语句: ```sql SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM ) WHERE ...

    浅谈分页思路

    其中,“真分页”是指每次只从数据库中查询所需展示的那一部分数据,即按需加载,这种方式可以显著降低数据库压力,提高系统响应速度。“假分页”则是在应用程序启动或用户请求时,一次性将所有数据加载到内存中,再...

    解析rownum

    在实际应用中,为了提高性能,我们通常使用`ROWNUM`配合`BETWEEN`来实现分页。例如,获取第m到n行的数据,可以这样写: ```sql SELECT * FROM ( SELECT ROWNUM AS rn, id, name FROM student ORDER BY id ) ...

    源代码_JavaWeb实现分页查询_java_

    注意这里的`LIMIT`和`OFFSET`是MySQL中的分页语法,其他数据库系统如Oracle、SQL Server可能使用不同的语法,如`ROWNUM`、`FETCH NEXT`等。 3. **执行SQL**:使用Java的JDBC API连接数据库,执行SQL查询,获取结果...

    oracle 分页语句

    通过以上分析,我们可以看出Oracle中使用`ROWNUM`实现分页查询是一种简单有效的方法。然而,在实际应用中还需要结合具体场景,考虑查询性能、索引利用等因素,以达到最佳的效果。希望本文能够帮助大家更好地理解和...

    三种数据库利用SQL语句进行高效果分页

    ### 三种数据库利用SQL语句进行高效分页 在数据处理和展示中,分页是一项常见且重要的技术。尤其在数据库查询中,合理地使用分页可以极大地提高...在实际应用中,应根据具体需求和数据库特性灵活选择合适的分页策略。

    oracle分页存储过程千万级

    2. **ROWNUM与子查询结合**:利用ROWNUM函数结合子查询的方式实现分页,通过限制ROWNUM的范围来获取特定页的数据。 3. **条件与排序处理**:对WHERE子句和ORDER BY子句进行智能处理,确保查询的准确性和效率。 ### ...

    用标准的SQL语句实现查询记录分页

    下面,我们将详细解析几种实现SQL分页查询的方法,并探讨其适用场景。 ### 方法一:使用TOP子句与ROWCOUNT 对于支持`TOP`子句的数据库系统(如SQL Server),可以利用`TOP`来限制返回的行数,再结合`ROWCOUNT`设置...

    在sql语句中分页

    在Oracle数据库中,实现分页查询主要依赖于`ROWNUM`伪列。`ROWNUM`用于标识行的顺序,在没有特别设置的情况下,它会根据数据在表中的物理存储顺序来分配编号。但当我们需要按照特定字段排序时,简单的`ROWNUM`就显得...

    zong分页查询

    在进行分页查询时,我们可以在SQL语句中添加LIMIT和OFFSET子句(MySQL)或ROWNUM(Oracle)来获取特定范围的数据。 - 例如,MySQL中的SQL语句可能如下: ```sql SELECT * FROM table LIMIT start, count; ``` ...

    jdbc 分页 sql语句

    - 然后,再次使用子查询,将内层查询的结果作为外层查询的数据源,并通过`WHERE`子句限制`ROWNUM`的范围,从而实现分页效果。 3. **变量计算**:题目中还提到了一段Java代码,用于计算分页所需的`pageCount`(即总...

    分页查询sql

    - MySQL中可以使用`LIMIT`关键字实现分页查询,而Oracle则提供了`ROWNUM`伪列。 通过以上介绍,我们可以了解到使用`ROW_NUMBER()`函数结合`OVER()`子句进行分页查询的基本方法及其应用场景。在实际开发过程中,还...

    oracle的rownum深入解析

    Oracle的ROWNUM是一个非常重要的概念,它在数据库查询中用于限制返回的结果集数量,尤其是在处理大量数据时,如实现分页功能。ROWNUM是一个伪列,即它并不是表中的实际列,而是Oracle在执行查询时动态生成的一个...

Global site tag (gtag.js) - Google Analytics