`

oracle利用rownum和rowid分页时order by问题

阅读更多

利用rownum分页可以参考下面的sql

select * from (select a.*, rownum rn 
                  from (select * from tb_test where name = 'XXX'   
                             order by state asc, adddate desc , rownum asc
                          ) a
             where rownum <= 20  )  
where rn > 0 

  

order by 后面的rownum asc(或desc) 是必须的 否则会出现意想不到的结果。

 

利用rowid分页可以参考下面的sql,rowid的效率比rownum高

第一种:

select * from tb_test where rowid in ( --这里选择要查询出的字段
             select rid from (
                           select rownum rn,rid from (
                                     select rowid rid from tb_test  WHERE name = 'XXX'                                      ORDER BY state ASC, adddate DESC --这里进行表排序
                            ) where rownum <= 20 --这里是上限
             ) where rn > 0 --这里是下限
)  ORDER BY state ASC, adddate DESC --这里再次排序

 

第二种:

select * from (select rid 
                      from (select a.rid, rownum rn 
                               from (select rowid rid from tb_test where name = 'XXX' order by state asc, adddate desc) a 
            where rownum <= 20) 
      where rn > 0) t1, tb_test t2 
where t1.rid = t2.rowid order by state asc, adddate desc

 

使用rowid进行分页 在最里层 和 最外层都必须使用order by排序,此时rownum asc(或desc)不是必须的了。

 

参考:http://www.jianbage.com/basic/database/567.html

           http://www.jianbage.com/basic/database/565.html

 

 

分享到:
评论

相关推荐

    在oracle中灵活使用Rownum和rowId

    在Oracle数据库中,`ROWNUM` 和 `ROWID` 是两个非常重要的概念,它们可以帮助我们在查询数据时实现更灵活的数据管理。本文将详细介绍这两个概念的区别及其使用方法,并通过示例来帮助读者更好地理解。 #### 一、...

    oracle_SQL中rowid与rownum的使用

    在Oracle SQL中,`ROWID`和`ROWNUM`是两个非常重要的概念,它们在数据库查询和数据操作中起着至关重要的作用。本文将详细探讨这两个特性,包括它们的定义、用途以及如何在实际场景中有效利用它们。 一、ROWID详解 `...

    oracle的分页查询

    本文将讲解 Oracle 中的分页查询,包括使用 ROWNUM 伪列和 ORDER BY 子句对查询结果进行排序和分页。 一、使用 ROWNUM 伪列实现分页查询 在 Oracle 中,ROWNUP 伪列是一个特殊的列,可以用来实现分页查询。例如,...

    oracle_SQL-rowid--rownum.zip_oracle

    在实际开发中,理解并合理利用`ROWID`和`ROWNUM`,可以有效地提升Oracle数据库的管理和查询效率。同时,从提供的压缩文件名来看,除了`oracle_SQL中rowid与rownum的使用.doc`直接相关外,其他文件如`ssi2配置整合...

    oracle rownum 学习

    SELECT ROWNUM, ID, NAME FROM STUDENT ORDER BY NAME; ``` 可以看出,ROWNUM并不是按照NAME列来生成的序号。系统是按照记录插入时的顺序给记录排的号,ROWID也是顺序分配的。为了解决这个问题,必须使用子查询。 ...

    oracle的伪列与分页

    综上所述,Oracle伪列如ROWID和ROWNUM在实际应用中发挥着重要作用,不仅可以帮助优化查询性能,还能轻松实现复杂的分页功能。同时,通过Java JDBC编程,可以进一步提升应用程序与Oracle数据库的集成度和灵活性。

    Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出

    在描述中提到的问题中,当使用`ORDER BY`对包含非唯一值的列进行排序,并结合分页查询时,发现不同页码的数据可能会有重复。这进一步证实了`ORDER BY`在Oracle中的不稳定特性。在没有唯一索引或主键约束的情况下,...

    rowid与rownumber

    rowid 和 rownum 是 Oracle 数据库中的两个重要概念,对于数据库开发人员来说非常重要。下面我们将详细介绍 rowid 和 rownum 的概念、结构、应用场景等。 一、rowid 概念 rowid 是 Oracle 数据库中的一个虚列,...

    oracle分页程序的实现

    Oracle数据库在处理大量数据时,为了提高查询效率和用户体验,常常需要使用分页查询。分页不仅能够有效地减少网络传输的数据量,还能让用户逐步浏览数据,提高网页加载速度。以下将详细介绍Oracle数据库中实现分页...

    oracle分页查询

    在Oracle数据库中,分页查询是一项非常常见的操作,特别是在处理大量数据时,为了提高用户体验,通常需要只显示一部分数据,而不是一次性加载所有记录。本文将详细介绍Oracle中的分页查询原理及其实现方法。 首先,...

    myeclise+oracle分页

    2. **ROWNUM+子查询**:为了解决ROWNUM无法实现降序分页的问题,可以结合子查询和ORDER BY来实现。 3. **DBMS_ROWID**:Oracle 9i引入了DBMS_ROWID包,可以用来获取每行的唯一行标识,辅助进行分页。 4. **Oracle ...

    对Oracle数据库三种分页方法的测试与研究.pdf

    本文主要探讨了Oracle数据库中的三种分页方法:基于ROWNUM的分页、基于ROW_NUMBER()解析函数的分页和基于ROWID的分页。首先,我们创建了一个名为stu的测试表,包含学生的基本信息,如学号、考试号、姓名、专业、考试...

    分页的sql总结

    在众多的SQL操作中,分页查询是数据库管理员和开发人员频繁使用的场景之一,尤其是在处理大量数据时,有效地进行分页不仅能够提升查询性能,还能优化用户体验。以下是对分页SQL查询技术的深入解析,旨在帮助读者理解...

    Oracle中实现MySql中limit+SqlServer分页+分页的存储过程

    Oracle不直接支持`LIMIT`和`OFFSET`,但它可以通过`ROWNUM`伪列来实现分页。以下是一些常见的方式: 1. **NOT IN子查询**: ```sql SELECT * FROM a_matrix_navigation_map WHERE rowid NOT IN (SELECT rowid ...

    17.Oracle伪列1

    - 排序和过滤:rownum可以在ORDER BY之后结合使用,以筛选特定行。 三、rowid的局限性和注意事项 - 兼容性:rowid是Oracle特有的,不适用于其他数据库系统,跨数据库迁移时需注意。 - 物理位置:rowid记录的数据...

    Oracle,mysql,sqlserver等各种数据库的分页方法

    Oracle数据库提供了`ROWNUM`伪列来进行分页查询,但在使用时需要注意一些细节。 #### 3. 使用`ROWNUM`伪列 - **获取指定范围的数据**(例如第2至第3条记录): ```sql SELECT ID FROM ( SELECT ID, ROWNUM AS ...

    数据库分页查询整理(oracle、mysql、SqlServer、access、db2等)

    select * from (select 字段 1, 字段 2, 字段 3, 字段 4, 字段 5, rownumber() over(order by 排序字段 asc) as rowid from 表名) as a where a.rowid &gt;= startPage AND a.rowid ; ``` 其中,startPage 是计算出的...

    Oracle2.pdf

    这篇笔记主要探讨了Oracle中的两个重要概念——伪列(Rownum和Rowid),以及如何使用子查询进行复杂的数据操作。 首先,伪列是Oracle数据库中一种特殊类型的列,它们并不实际存在于表的结构中,但可以通过SQL查询来...

    老二牛车在Oracle数据库上构建JAVA应用程序二理论课.pdf

    - 结合ROWNUM和ROWID对数据进行分页。 - 通过子查询与`IN`关键字来限定数据的范围,实现分页效果。 ### 3. 使用存储过程和函数进行数据操作 #### 3.1 使用REFCursor返回数据集 - REFCursor是Oracle提供的一个游标...

Global site tag (gtag.js) - Google Analytics