oracle数据排序后获取前几行数据的写法(rownum、fetch方式)
作者:搏·梦 发布时间:2023-07-02 01:15:09
0. 前言
无论在工作中,还是学习中,都会出现这样子的需求,对某张表进行了排序(按时间排序也好,其他字段排序也罢),然后获取前x行的数据,由于工作中经常出现,因此写篇文章记录一下多种写法。
1. 先说结论
第一种使用rownum方式,在oracle数据库中,查询出来的数据,可以通过rownum(行数)来指定具体第几行数据,但需要注意以下几点:
查询出来的数据,第一行是 rownum=1,并不是从0开始的。
用rownum方式获取数据,必须要有一层嵌套select语句,这也是此方法最大的缺点,导致sql多一层。
常用语法: select * from ( select * from people order by id desc ) where rownum = 1
第二种使用fetch方式,其还可以用于分页查询使用,fetch使用需要注意如下几点:
oracle版本得12以上,否则无法使用了。
使用格式: OFFSET n ROWS FETCH NEXT m ROWS ONLY 从第n行开始,往后取m行(注 不包括第n行数据)
也可以简写为 FETCH NEXT m ROWS ONLY 从头开始往后取m行
无需多一层select嵌套,可以直接写在sql最后
2. 举个例子
1. 数据准备
在之前所说的,在线oracle学习网站中准备好数据如下:
CREATE TABLE people (
id varchar2(10),
name varchar2(10),
sex varchar2(10)
);
INSERT INTO people VALUES ('1', '小明', '男');
INSERT INTO people VALUES ('2', '小红', '女');
INSERT INTO people VALUES ('3', '小黄', '男');
INSERT INTO people VALUES ('4', '小紫', '男');
INSERT INTO people VALUES ('5', '小绿', '男');
INSERT INTO people VALUES ('6', '小白', '男');
INSERT INTO people VALUES ('7', '大强', '男');
INSERT INTO people VALUES ('8', '大青', '男');
这里将id类比时间字段,一般查询根据时间进行倒序:
select * from people
order by id desc
2. 使用rownum方式获取前几行数据
在oracle数据库中,查询出来的数据,可以通过rownum(行数)来指定具体第几行数据,但需要注意以下几点:
查询出来的数据,第一行是 rownum=1,并不是从0开始的。
用rownum方式获取数据,必须要有一层嵌套select语句,这也是此方法最大的缺点,导致sql多一层。
倒序查询之后,获取第一行数据:
select * from (
select * from people
order by id desc
)
where rownum = 1
倒序查询之后,获取前4行数据:
select * from (
select * from people
order by id desc
)
where rownum <= 4
如果不使用嵌套select,则会报错语法错误:
3. 使用fetch方式获取前几行数据(推荐)
fetch方式除了获取前几行数据,还有另一个作用,就是进行分页的时候使用。
fetch使用需要注意如下几点:
oracle版本得12以上,因此上面的在线学习oracle网页无法使用了。
使用格式: OFFSET n ROWS FETCH NEXT m ROWS ONLY 从第n行开始,往后取m行(注 不包括第n行数据)
也可以简写为 FETCH NEXT m ROWS ONLY 从头开始往后取m行
无需多一层select嵌套,可以直接写在sql最后
倒序查询之后,获取第一行数据:
select * from people
order by id desc
fetch next 1 rows only
倒序查询之后,获取前4行数据:
select * from people
order by id desc
fetch next 4 rows only
fetch用于分页,从第n行后,取m返回结果集
select * from people
order by id desc
OFFSET n ROWS FETCH NEXT m ROWS ONLY
来源:https://blog.csdn.net/xueyijin/article/details/127473518


猜你喜欢
- 目录1、发送get请求2、发送post请求3、发送https请求4、文件上传5、文件下载6、timeout超时7、鉴权7.1、auth参数鉴
- 今天来记录下js来自定义鼠标右键,同样先来分解下它的实现原理:1、屏蔽右键默认事件;(一度我以为修改的就是默认事件)2、对一个ul的隐藏;(
- #!/bin/sh#code by scpman#功能:检查并修复mysql数据库表#将此脚本加到定时中,脚本执行时,等会读库,列出要修复的
- HTTP头中一般断点下载时才用到Range和Content-Range实体头,Range用户请求头中,指定第一个字节的位置和最后一个字节的位
- 一、类和对象通俗理解:类就是模板,对象就是通过模板创造出来的物体类(Class)由3个部分构成:类的名称: 类名类的属性: 一组数据类的方法
- 本文实例为大家分享了python matlibplot绘制3D图形的具体代码,供大家参考,具体内容如下1、散点图使用scatterfrom
- django外键使用 一对一因为django中处于安全和方便将数据库中的表封装成模型,所以很多sql原生的功能无法使用, 比如 left j
- 一、安装插件npm install -D vuedraggable二、在需要排序的界面中引入组件<script>import d
- 在CSS森林群里讨论一个margin的问题中无意间发现overflow也可以用来清除浮动,嘿嘿,这个方法不单使用简单,而且FF、OP、IE7
- 简单方法:models.pyclass IceCreamBar(models.Model): title
- 本文实例讲述了Python实现计算文件MD5和SHA1的方法。分享给大家供大家参考,具体如下:不多说,直接源码:#file md5impor
- GO语言的控制语句判断结构:if-else和大多数编程语言一样,if-else的用法基本都一样,直接来一个GO语言的例子package ma
- 一:什么是exe?exe是Windows环境中的文件扩展名之一,它是一个可执行文件,虽然扩展程序在一般情况下是隐藏的,但是我们可以通过取消选
- 语句格式:numpy.zeros(shape, dtype=float, order='C')参数说明:shape:整型或元
- 最近在OpenCV的官方文档上看到一个人脸识别的示例代码,想要实现。由于我之前下好的OpenCV3.1中并不自带相关的函数,即opencv2
- 昨天在网上找资料的时间无意进了一个站,糊里糊涂就进去了,想提权提不起来,后来加上服务商的Q号想社工一下,射了半天得知服务器的安全是绿盟的人给
- 需求对于部署在阿里云上的重要系统一般是不让其他人访问的,所以会在负载均衡(SLB)上加上访问控制列表。而使用ASDL拨号上网的宽带来说一般公
- with/as使用open打开过文件的对with/as都已经非常熟悉,其实with/as是对try/finally的一种替代方案。当某个对象
- pycharm是个很不错的python开发工具,大大缩短了python项目的创建时间以及调试时间在使用python写脚本一段时间后,想尝试使
- 本文实例讲述了python中bisect模块用法,分享给大家供大家参考。具体方法分析如下:这个模块只有几个函数,一旦决定使用二分搜索时,立马