oracle 使用rownum的三种分页方式

下面来详细讲解“Oracle 使用 ROWNUM 的三种分页方式”的完整攻略。

什么是 ROWNUM

ROWNUM是Oracle中一个伪列(伪列是一个看起来像是表中某个字段、但实际上不是字段、由oracle为其预先设置了值的列),表示被检索出来的数据行的序号,起始值为1,每次增加1。

ROWNUM分页

在Oracle中使用ROWNUM进行分页,要注意结果集是先生成再排序,而ROWNUM值是在排序之后才生成。所以在使用ROWNUM分页时,它是不能直接根据数据行的序号进行翻页的,需要一定技巧。

目前常用的基于ROWNUM进行分页的方式有以下三种:

第一种方式:子查询

子查询方式是通过先进行查询操作,再在结果集上进行ROWNUM的限制,从而得到分页结果。其SQL写法如下:

SELECT 
    * 
FROM 
    (SELECT 
        ROWNUM rn, t.* 
     FROM 
        (SELECT 
            *
         FROM 
            表名
         ORDER BY 
            字段名 ASC/DESC) t
    ) tt 
WHERE 
    tt.rn > (当前页数-1)*每页显示的记录数 
AND 
    tt.rn <= 当前页数*每页显示的记录数;

示例:

假设表名为userinfo,包含idusernameage三个字段,现在需要查看第2页,每页显示5条数据,按照id升序排列,如下所示:

SELECT 
    * 
FROM 
    (SELECT 
        ROWNUM rn, t.* 
     FROM 
        (SELECT 
            *
         FROM 
            userinfo
         ORDER BY 
            id ASC) t
    ) tt 
WHERE 
    tt.rn > 5 
AND 
    tt.rn <= 10;

第二种方式:Oracle 12c 中的 FETCH FIRST

Oracle 12c中新增了一个语法,即 FETCH FIRST n ROWS ONLY,可以直接按照行数限制返回结果集的行数,非常便利。但需要注意的是,这个语法在其他数据库中不一定适用。

其SQL写法如下:

SELECT 
    *
FROM 
    表名 
ORDER BY 
    字段名 ASC/DESC 
FETCH FIRST n ROWS ONLY;

示例:

假设表名为userinfo,包含idusernameage三个字段,现在需要查看第2页,每页显示5条数据,按照id升序排列,如下所示:

SELECT 
    *
FROM 
    userinfo
ORDER BY 
    id ASC 
FETCH FIRST 5 ROWS ONLY 
OFFSET 5 ROW;

第三种方式:ROW_NUMBER()函数

ROW_NUMBER()函数是Oracle中的一个内置函数,可生成一个一组结果集中的行号,支持一些复杂的分页查询。

其SQL写法如下(注意必须使用分号进行多条SQL分隔):

WITH 
    t AS 
    (
        SELECT 
            *
            ,ROW_NUMBER() OVER (ORDER BY 字段名) AS row_num
        FROM 
            表名
    )
SELECT 
    * 
FROM 
    t 
WHERE 
    row_num BETWEEN m AND n;

示例:

假设表名为userinfo,包含idusernameage三个字段,现在需要查看第2页,每页显示5条数据,按照id升序排列,如下所示:

WITH 
    t AS 
    (
        SELECT 
            *
            ,ROW_NUMBER() OVER (ORDER BY id) AS row_num
        FROM 
            userinfo
    )
SELECT 
    * 
FROM 
    t 
WHERE 
    row_num BETWEEN 6 AND 10;

这就是使用ROWNUM进行分页的三种方式。希望对您有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:oracle 使用rownum的三种分页方式 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Linux下定时自动备份Docker中所有SqlServer数据库的脚本

    下面就是“Linux下定时自动备份Docker中所有SqlServer数据库的脚本”的攻略。 准备工作 在开始操作脚本之前,需要先进行一些准备工作。 安装mssql-cli工具 为了能够操作SqlServer数据库,需要安装mssql-cli工具。mssql-cli是微软推出的命令行工具,能够方便地连接SqlServer数据库以及执行T-SQL语句。 安装方…

    database 2023年5月22日
    00
  • 深入了解Mysql逻辑架构

    下面是深入了解Mysql逻辑架构的完整攻略: Mysql逻辑架构 Mysql逻辑架构可以分为以下几层: 连接层:接受客户端的连接并验证身份。 查询缓存层:直接从缓存中返回结果,避免执行一些耗时的查询。 解析层:对SQL语句进行解析,并转换为内部数据结构。 优化层:优化查询的执行方案,生成最优的执行计划。 执行层:执行查询计划,访问存储引擎并返回结果。 存储引…

    database 2023年5月19日
    00
  • php连接oracle数据库的核心步骤

    连接 Oracle 数据库是 PHP 开发过程中常用的操作之一。以下是连接 Oracle 数据库的核心步骤: 安装 Oracle 客户端 要连接 Oracle 数据库,首先需要安装 Oracle 客户端,它提供了连接 Oracle 数据库所需的驱动和文件。可以从 Oracle 官网上下载和安装最新版本客户端。 开启 Oracle 扩展 在连接 Oracle …

    database 2023年5月22日
    00
  • mysql字符集相关总结

    MySQL字符集相关总结 MySQL字符集是指在数据库中使用的字符编码方式,包括每个字符所占的位数、用于存储的字节及其排序规则等方面。正确选择和设置字符集对于保障数据库数据的完整性及避免乱码问题具有非常重要的意义。 MySQL字符集类型 MySQL字符集主要分为以下几种类型: ASCII:一种只有128个字符的字符集,包括数字、字母和一些标点符号等。 Uni…

    database 2023年5月22日
    00
  • 怪物猎人世界PC版会心流斩击斧配装分享

    怪物猎人世界PC版会心流斩击斧配装分享攻略 简介 本文将介绍PC版怪物猎人世界中会心流斩击斧配装分享的详细攻略,包括装备选择、技能搭配等方面。 装备选择 武器选择 会心流斩击斧升级要求较高,因此推荐使用以下几把斩击斧: 隼斧【飞鸟】 华戟斧 弧月斩 焰双斩 盾选择 盾牌不是核心装备,因此可以根据自己的喜好进行选择。 护甲选择 推荐以下三种套装: 恐暴龙王α套…

    database 2023年5月21日
    00
  • MySQL 不等于的三种使用及区别

    以下是MySQL不等于的三种使用及区别: 不等于的三种使用 MySQL中不等于的运算符有三种常见的使用方式:!=,<>和NOT IN()。 !=操作符 !=是MySQL中比较常用的不等于操作符,它的使用方式跟其他编程语言中的不等于操作符类似。例如,我们想要查找表中 age 不等于 25 的数据,可以使用以下语句: SELECT * FROM `t…

    database 2023年5月22日
    00
  • Linux连接windows的ftp unzip出现问题的解决方法

    针对如何在 Linux 上连接 Windows 的 FTP 并解压的问题,提供以下解决方案: 问题描述 Linux 可以通过FTP连接Windows,但在解压文件时出现问题。 原因分析 默认情况下,Linux上只自带了zip格式的解压工具,WinZip和WinRAR都不能在Linux上直接安装和使用。但是,我们可以通过安装一些第三方工具解决这个问题。 解决方…

    database 2023年5月22日
    00
  • JSP动态实现web网页登陆和注册功能

    JSP(Java Server Pages)是一种使用Java编程语言编写的动态Web页面技术。在JSP中,使用Java代码、HTML、CSS、JavaScript和JSP页面特定元素来开发Web应用程序。 下面是实现JSP动态实现Web网页登陆和注册功能的完整攻略: 第一步:搭建Web应用程序 要实现令人担心的Web登录和注册功能,必须首先建立您的Web应…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部