oracle中rownum和row_number()

Oracle数据库中,rownum和row_number()都是用于对查询结果集进行行计数和排序的函数,但它们在实现和用法上有着很大的不同。接下来我将为您详细讲解它们的使用方法和区别,并附带两个示例说明。

ROWNUM函数

ROWNUM是Oracle的一个伪列,可以用来表示查询结果集中的行号。其运作原理是对于查询结果集中的第一行返回1,第二行返回2,以此类推。 ROWNUM在数据记录被输出前先把所有记录的ROWNUM编号分配好,而不是在输出时再进行计算。

ROWNUM的基本用法

 SELECT *
 FROM table
 WHERE ROWNUM <= 10

上述SQL语句表示从表table中查询出前10条记录,其中ROWNUM是行号,行号从1开始,直到查询结果集的最后一行。

ROWNUM的限制

因为ROWNUM在数据记录输出前就将所有记录的ROWNUM编号分配好,所以它不能对结果集进行排序,在使用分页查询时还需要注意一下偏移量。

示例1:

SELECT *
FROM (
    SELECT A.*, ROWNUM RN
    FROM (
        SELECT *
        FROM employees
        ORDER BY salary DESC
    ) A
    WHERE ROWNUM <= 10
) 
WHERE RN >= 6;

上述SQL语句表示从employees表中查询前10条数据,按照salary字段的降序排序,并返回第6条记录到第10条记录。需要注意的是,查询使用了ROWNUM来限制返回记录的数量,因此SQL语句将内层排序结果赋予ROWNUM分配行号之后再进行条件限制,以保证外层语句查询结果从第6条开始输出。

ROW_NUMBER()函数

ROW_NUMBER()函数也是用于对查询结果集进行排序和分页的函数,它是一个窗口函数。WINDOW FUNCTION关键字是2003ANSI标准的关键字,但是Oracle的窗口函数的实现比较尴尬要写很多的语法,所以Oracle 8.1.6这个版本中就将它们作为扩展的SELECT语句的标准扩展正式引入,Window function就成为了Oracle 8i之后的一个函数。

ROW_NUMBER()函数的基本用法

SELECT ROW_NUMBER() OVER (ORDER BY column_1 DESC)
FROM Table

上述SQL语句表示对Table表中的记录按照column_1字段进行降序排序,并对排序结果进行编号,从1开始。

ROW_NUMBER()函数的限制

ROW_NUMBER()函数的计算是在数据被输出前进行的,而ROWNUM是在数据输出后才进行计算的,因此ROW_NUMBER()可以用于排序和分组统计查询,而ROWNUM则不能。

示例2:

SELECT *
FROM (
    SELECT A.*, ROW_NUMBER() OVER (ORDER BY salary DESC) RN
    FROM employees A
) 
WHERE RN BETWEEN 6 AND 10;

上述SQL语句表示从employees表中查询前10条数据,在查询结果集上按照salary字段进行降序排序,并返回第6条记录到第10条记录。需要注意的是,查询使用了ROW_NUMBER()函数进行排序并赋予每一行一个编号,以保证外层语句查询结果从第6条开始输出。

综上所述,ROWNUM和ROW_NUMBER()这两个函数在Oracle数据库中有着不同的应用场景和使用方法。在使用时需要根据具体场景选择正确的函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:oracle中rownum和row_number() - Python技术站

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

相关文章

  • Oracle中的MD5加密详解

    Oracle中的MD5加密详解 什么是MD5加密? MD5加密是一种常用的单向加密算法,通过将密码等原始数据进行不可逆的加密来保证数据的安全性。它在信息安全、数据传输、数字签名等方面都有广泛应用。 Oracle中如何使用MD5加密? Oracle数据库提供了一个名为DBMS_CRYPTO的包来支持MD5加密,使用该包需要先确认是否已经安装了该包并获取相关权限…

    Oracle 2023年5月16日
    00
  • oracle中的一些常用函数及示例

    下面我将详细讲解“oracle中的一些常用函数及示例”的完整攻略。 1. 常用函数 1.1 字符串函数 CONCAT(str1, str2):将两个字符串连接在一起,返回连接后的字符串。 LENGTH(str):返回字符串的长度。 SUBSTRING(str, start_index, length):返回字符串从指定位置开始指定长度的子串。 UPPER(s…

    Oracle 2023年5月16日
    00
  • Oracle19c安装与基本配置教程(超详细!)

    下面我就详细为您讲解《Oracle19c安装与基本配置教程(超详细!)》的完整攻略。 标题 1. 前言 在这个章节中,作者介绍了Oracle19c的一些基本概念,以及安装前需要注意的事项,比如Oracle19c的最小系统配置要求、需要下载哪些文件等等。 2. Oracle19c安装 步骤一:从Oracle官网下载相关文件 在这个步骤中,作者讲到了如何从Ora…

    Oracle 2023年5月16日
    00
  • plsql 连接oracle数据库详细配置的方法步骤

    配置PL/SQL开发环境连接Oracle数据库,需要进行以下几个步骤: 步骤一:下载安装Oracle客户端 在Oracle官网下载Oracle客户端,选择合适的版本和操作系统,安装后找到tnsnames.ora文件所在目录,位置可能有所不同,例如在Windows系统下,该文件通常位于C:\app\username\product\version\client…

    Oracle 2023年5月16日
    00
  • Oracle 存储过程总结(一、基本应用)

    关于“Oracle 存储过程总结(一、基本应用)”的完整攻略,我将详细讲解如下: 一、基本概念 文章首先介绍了存储过程的概念,即将一组 SQL 语句集合起来,形成一个编译后的可执行的“程序”,常用于提高性能、简化工作量等方面。同时,存储过程具有独立的命名空间、权限控制和调用等特点,使得我们能够更好的管理和维护数据库。 二、基本语法 该部分详细讲解了存储过程的…

    Oracle 2023年5月16日
    00
  • Oracle表分区详解

    Oracle表的分区详解 什么是表分区? 表分区是将表按照一定的规则,分成多个逻辑部分,每个部分称之为一个分区。 它是 Oracle 数据库中非常重要的功能,它可以极大的提高数据库的性能、可靠性和管理效率。 表分区的优点 使用表分区有以下几个优点: 提高查询性能。 在查询时,如果能够排除掉一些数据分区,就会大幅度提高查询效率,从而缩短查询时间。 提高数据文件…

    Oracle 2023年5月16日
    00
  • 基于Oracle的面向对象技术入门基础简析开发者网络Oracle

    基于Oracle的面向对象技术入门基础简析开发者网络Oracle 简述 基于Oracle的面向对象技术是现代软件开发中重要的一环,它可以提高程序的可重用性、维护性和安全性等方面的特性。在本教程中,我们将介绍如何在开发者网络Oracle环境下,入门基础的面向对象技术。 环境设置 在开始学习前,我们需要在本地搭建Oracle开发环境。具体步骤如下: 下载Orac…

    Oracle 2023年5月16日
    00
  • Oracle常用函数Trunc及Trunc函数用法讲解

    Oracle常用函数Trunc及Trunc函数用法讲解 前言 在 Oracle 数据库中,有许多可以让我们简单、快捷地完成数据处理的函数。其中,Trunc 函数是非常常用的函数之一。在本篇攻略中,我们将详细讲解 Trunc 函数的用法,并通过两条示例说明其使用方法。 Trunc 函数定义 Trunc 是 Oracle 中数值函数的一种,可以将某个数值截断为指…

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