广告
返回顶部
首页 > 资讯 > 数据库 >Oracle中的分页查询~~~ROWNUM(行号)
  • 371
分享到

Oracle中的分页查询~~~ROWNUM(行号)

2024-04-02 19:04:59 371人浏览 薄情痞子
摘要

oracle中的表,除了我们建表时设计的各个字段,其实还有两个字段(此处只介绍2个),分别是ROWID(行标示符)和ROWNUM(行号)。即使我们使用DESCRIBE命令查看表的结构,也无法看到这两个列的描

oracle中的表,除了我们建表时设计的各个字段,其实还有两个字段(此处只介绍2个),分别是ROWID(行标示符)和ROWNUM(行号)。即使我们使用DESCRIBE命令查看表的结构,也无法看到这两个列的描述,因为它们其实是只在数据库内部使用的,所以也通常称它们为伪列(pseudo column)。
建一个只有两个字段(id,col)的表。使用describe命令查看表结构,可以看到确实只有建表时的两个字段。但我们可以查询的时候,可以查找到伪列的值。

select rowid,rownum,id,col from table;

这个rowid我们一般用不到,Oracle数据库内部使用它来存储行的物理位置,是一个18位的数字,采用base-64编码。而这个rownum,我们正是用它来进行分页查询的,它的值,就是表示的该行的行号。
对于分页查询,我们只要想办法可以查询到从某一起始行到终止行就可以的,分页的逻辑可以放到程序里面。于是,我们理所当然会想到如下语句查询第2页的数据(每页2条数据,页码从1开始,所以起始行的行号为 (页码-1)*每页长度+1=3,终止行的行号为 页码*每页长度=4):

select * from table where rownum>=3 rownum <= 4;

出人意料,没有任何结果。原因很简单,Oracle机制就是这样的:因为第一条数据行号为1,不符合>=3的条件,所以第一行被去掉,之前的第二行变为新的第一行(即这个行号不是写死的,可以理解为是动态的),如此下去,一直到最后一行,条件始终没法满足,所以就一条数据也查不出来。
对症下药,要想解决这个问题,我们只要将行号查询出来生成一个结果集,然后再从这个结果集中,选择行号大于我们设定的那个值就可以了,上面的分页查找正确的写法应该是这样:

select id,col from(
select rownum rn,u.* from table u) ua
where ua.rn between 3 and 4;

上面的语句还可以优化:虽然不能用">=",但"<="却可以用。为提高查询效率,我们可以使用终止行筛选子查询的结果,sql如下:

select id,col from(
select rownum rn,u.* from table u where rownum<=4) ua
where ua.rn >= 3;

很多时候,我们并不是盲目的分页查找的,而是按某一个或多个字段的升序或降序分页,即包含 order by 语句的分页查询,我们先看一下 order by 的查询结果中rownum是怎样的:

select rownum,id,col from table order by col;

结果,这时候的行号并不是经过 order by 后结果的增序行号。
但有了上面的嵌套查询的经验,这里也可以好好应用一下,怎么做呢:先查找出排序好的结果集,然后应用上面的方法得到最终结果,sql如下:

select id,col from(
select rownum rn,uo.* from
(select * from table order by col) uo
where rownum<=4 ) ua
where ua.rn>=3;

分页效果的实现,思路有三种:

其一:纯js实现分页。一次性查询记录并加载到html的table中。然后通过选择性地显示某些行来达到分页显示的目的。这是一种伪分页,障眼法而已。只能用于数据少的情况下。一旦数据多了,十几万条数据加载到html中会变得很慢。而且不实时,一次加载完后数据就写死在页面了,若数据库中有变化,浏览器端显示的仍是上次加载过来的数据。

其二:一次查询,分批显示。
就是说,我们可以执行一个数据库查询操作,得到结果集rs。然后,通过指针的移动来显示当前页面的记录。这样,就可以以 rs.absolute(当前页面号*每页记录数)定位到当前页的第一条记录,然后通过while循环显示n条记录(n为每页显示记录数)。在跳页时,只需修改currentPage,即可在重定位到下一页时把当前页面号改掉,重新定位记录指针,通过while遍历显示n条记录。与JS选择性显示不同,这里是选择性遍历。与JS分页不同的是,这里分页每次跳页修改的是遍历的指针,每次跳页都要进行一次全面查询。同样地,不适合大数据量查询。这里比JS分页优化的地方在于——实时性。每次跳页都会查询一次数据库,保证数据的实时性。

其三:在服务端分页。跳到第n页才查询、显示第n页内容。要点就是根据客户端表格的“页面”计算出数据库要查询的当前页面的第一条记录的位置。优点:实时性:跳页才查询。数据量小:只加载当前页的记录进行显示。

您可能感兴趣的文档:

--结束END--

本文标题: Oracle中的分页查询~~~ROWNUM(行号)

本文链接: https://www.lsjlt.com/news/44555.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle中的分页查询~~~ROWNUM(行号)
    Oracle中的表,除了我们建表时设计的各个字段,其实还有两个字段(此处只介绍2个),分别是ROWID(行标示符)和ROWNUM(行号)。即使我们使用DESCRIBE命令查看表的结构,也无法看到这两个列的描...
    99+
    2022-10-18
  • Oracle分页查询的示例分析
    这篇文章主要介绍Oracle分页查询的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Oracle分页查询的实例详解1.Oracle分页查询:SELECT *...
    99+
    2022-10-18
  • 使用rownum分页排序前后几次查询数据不一样的示例分析
    这篇文章主要介绍使用rownum分页排序前后几次查询数据不一样的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 1.环境:创建一个表create ...
    99+
    2022-10-18
  • SQLServer和Oracle中怎么实现分页查询
    本篇文章为大家展示了SQLServer和Oracle中怎么实现分页查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.分页算法 最开始我在网上查找资料的...
    99+
    2022-10-18
  • 详解oracle分页查询的基础原理
    本文从数据查询原理,以及分页实现的方法详细分析了oracle分页查询的基础知识,以下是本文内容: 原因一 oracle默认为每个表生成rowmun,rowid字段,这些字段我们称之为伪列 1 创建测试表 ...
    99+
    2022-10-18
  • oracle分页查询优化的方法是什么
    Oracle数据库提供了几种方法来优化分页查询:1. 使用ROWNUM:ROWNUM是一个伪列,表示返回结果集中的行数。可以在查询中...
    99+
    2023-09-20
    oracle
  • oracle+mybatis-plus+springboot实现分页查询的实例
    今天蠢了一上午才弄出这玩意,话不多说上代码! 1、建一个配置类 package com.sie.demo.config; import com.baomidou.mybati...
    99+
    2022-11-12
  • Oracle使用MyBatis中RowBounds实现分页查询功能
    Oracle中分页查询因为存在伪列rownum,sql语句写起来较为复杂,现在介绍一种通过使用MyBatis中的RowBounds进行分页查询,非常方便。 使用MyBatis中的RowBounds进行分页查...
    99+
    2022-10-18
  • mysql和mssql以及oracle的分页查询方法介绍
    本篇内容介绍了“mysql和mssql以及oracle的分页查询方法介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2022-10-18
  • 怎么理解Oracle数据库中的多表查询,分组查询,子查询
    本篇内容介绍了“怎么理解Oracle数据库中的多表查询,分组查询,子查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2022-10-18
  • Oracle字段根据逗号分割查询数据的方法
    需求是表里的某个字段存储的值是以逗号分隔开来的,要求根据分隔的每一个值都能查出来数据,但是不能使用like查询。 数据是这样的: 查询的sql如下: select * from ( sel...
    99+
    2022-10-18
  • Oracle中集合查询的示例分析
    这篇文章主要介绍了Oracle中集合查询的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用并集运算,查询20号部门或30号部门的员...
    99+
    2022-10-18
  • oracle中空间查询的示例分析
    这篇文章主要介绍oracle中空间查询的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! ~~~~~~~~~~~~~ORACLE查看某用户占用了多少...
    99+
    2022-10-18
  • oracle、mysql和SqlServer三种数据库的分页查询实例
    这篇文章主要介绍“oracle、mysql和SqlServer三种数据库的分页查询实例”,在日常操作中,相信很多人在oracle、mysql和SqlServer三种数据库的分页查询实例问题上存在疑惑,小编查...
    99+
    2022-10-18
  • MySQL查询中分页的思路和优化
    这篇文章主要介绍“MySQL查询中分页的思路和优化”,在日常操作中,相信很多人在MySQL查询中分页的思路和优化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL查询中...
    99+
    2022-10-18
  • 【MybatisPlus】MP的分页查询、多条件查询以及查询过程中解决null的空值判定
    文章目录 前言一.分页处理1.调用方法传入参数获取返回值2.设置分页拦截器 二.条件查询2.1通过QueryWrapper对象来执行分页查询2.2在QueryWrapper对象的基础上使用lambda表达式2.3直接通过Lam...
    99+
    2023-08-25
    java spring mybatis
  • MybatisPlus分页查询与多条件查询介绍及查询过程中空值问题的解决
    目录前言一.分页处理1.调用方法传入参数获取返回值2.设置分页拦截器二.条件查询2.1通过QueryWrapper对象来执行分页查询2.2在QueryWrapper对象的基础上使用l...
    99+
    2022-11-13
    MybatisPlus分页查询 MybatisPlus多条件查询 MybatisPlus null
  • SQL Server、MySQL和Oracle数据库分页查询的区别与联系
    摘要:本文将通过一个现实例子,详细解释SQL Server、MySQL和Oracle这三种常见关系型数据库在分页查询方面的区别与联系。我们将提供具体场景下的SQL语句示例,并解释每个数据库的分页查询用...
    99+
    2023-08-31
    数据库 mysql oracle sqlserver sql
  • mysql数据库中分页查询的使用方法
    这篇文章给大家分享的是有关mysql数据库中分页查询的使用方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。作用:把行按照字段分组Select column,...
    99+
    2022-10-18
  • Java中Mybatis分页查询的四种传参方式
    目录一、顺序传参 1. 持久层接口方法2. UserMapper.xml映射文件新增标签3. 新增测试方法4. 运行结果二、@param传参 1. 持久...
    99+
    2023-05-13
    Java Mybatis分页查询 Mybatis分页查询 Mybatis传参方式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作