MySQL与Oracle的分页

MySQL与Oracle的分页

当我们通过SQL去查询一个结果集的时候,并不需要查看所有行,可能只是查看前几行,或者中间的几行。则需要像MySQLlimitOracleROWNUMFETCH NEXT来实现。

MySQL

语法

sql 复制代码
SELECT * FROM table_name LIMIT [offset,] row_count;

LIMIT 是MySQL中用于限制返回结果行数的关键字。

  • table_name 是你要查询的表名。
  • row_count 是你要返回的行数。
  • offset 是可选的,表示从查询结果的第几行开始返回,通常用于分页查询。

实例

sql 复制代码
-- 写法1 不携带OFFSET
SELECT * FROM TEST LIMIT 10; -- 返回前10行

-- 写法2 携带OFFSET 但携带OFFSET关键字
SELECT * FROM TEST LIMIT 10,5; -- 跳过前10行后,再返回5行

-- 写法3 携带OFFSET 并携带OFFSET关键字
SELECT * FROM TEST LIMIT 10 OFFSET 5; -- 跳过前5行后,再返回10行

不同的写法对应参数的顺序是不一致的这个需要注意。

Oracle

ROWNUM

语法

首先我们要这个ROWNUM是这个什么?

在 Oracle 数据库中,ROWNUM 是一个伪列(虚拟列),用于标识返回结果集中的行号。

ROWNUM 是在查询结果返回后才赋值的,它的值是按照查询结果的顺序逐行递增的。

通常来说,使用ROWNUM我们尽量还是需要子查询来配合使用,因为如果当使用ORDER BY去进行排序的话,ROWNUM是会根据排序后的结果集重新生成的,这个时候这个行号就不是原来的行号了。另外当我们直接使用WHERE ROWNUM > 1他会导致结果集未空的情况,**因为ROWNUM 是在查询结果返回后才赋值的。**所以直接使用WHERE 则就直接过滤掉了。

实例
sql 复制代码
-- 返回从10行后的所有数据
SELECT * FROM (
    SELECT ROWNUM ROW_NUM FROM Test 
)  where ROW_NUM > 10

-- 返回从11行-20的数据
SELECT * FROM (
    SELECT ROWNUM ROW_NUM FROM Test 
)  where ROW_NUM > 10 AND ROW_NUM <= 20

FETCH NEXT(Oracle 12c及以上版本可用)

FETCH NEXTFETCH FIRST 都是返回查询结果中的前 n 行。两个关键字同义。

语法
sql 复制代码
SELECT * FROM table_name
OFFSET n ROWS
FETCH NEXT m ROWS ONLY;
  • OFFSET n ROWS:跳过前 n 行,即从第 n+1 行开始返回结果。

  • FETCH NEXT m ROWS ONLY:返回接下来的 m 行。

实例
sql 复制代码
SELECT ROWNUM FROM Test FETCH NEXT 10 ROWS ONLY; -- 返回前10行

# 这里是MySQL没法通过只使用OFfSET使用的,但是可以 limti 10,100000000 来实现😂 虽然不优雅但可以实现
SELECT ROWNUM FROM Test OFFSET 10 ROWS;   -- 跳过10行,返回之后的所有行

SELECT ROWNUM FROM Test OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY;  -- 跳过前5行后,再返回10行
相关推荐
装不满的克莱因瓶6 分钟前
什么是脏读、幻读、不可重复读?Mysql的隔离级别是什么?
数据库·mysql·事务·隔离级别·不可重复读·幻读·脏读
aramae32 分钟前
MySQL数据库入门指南
android·数据库·经验分享·笔记·mysql
Apache IoTDB1 小时前
时序数据库 IoTDB 集成 MyBatisPlus,告别复杂编码,简化时序数据 ORM 开发
数据库·struts·servlet·时序数据库·iotdb
isNotNullX1 小时前
怎么用数据仓库来进行数据治理?
大数据·数据库·数据仓库·数据治理
小坏讲微服务2 小时前
Spring Cloud Alibaba Gateway 集成 Redis 限流的完整配置
数据库·redis·分布式·后端·spring cloud·架构·gateway
whb2341741242 小时前
测试linux删除Oracle文件,使用文件句柄恢复
linux·运维·oracle
HitpointNetSuite2 小时前
连锁餐饮行业ERP系统如何选择?
大数据·数据库·oracle·netsuite·erp
百***17072 小时前
MySQL 常用 SQL 语句大全
数据库·sql·mysql
百***65952 小时前
mysql如何发现慢查询sql
数据库·sql·mysql
资深web全栈开发2 小时前
PostgreSQL 实战指南(面向 MySQL 开发者)
数据库·mysql·postgresql