MySQL、Oracle、SQL Server 和 PostgreSQL 的分页查询

server/2024/12/2 7:38:52/

在不同的数据库中,分页查询是常见的操作,用于从大量数据中获取部分数据集。不同的数据库有不同的分页实现方式。下面是 MySQLOracleSQL ServerPostgreSQL 的分页查询语法介绍。

1. MySQL 分页

在 MySQL 中,可以使用 LIMITOFFSET 子句进行分页查询。LIMIT 用于指定返回的行数,OFFSET 用于指定从哪一行开始返回。

语法:
SELECT column1, column2, ...
FROM table_name
ORDER BY column_name
LIMIT offset, row_count;
  • offset:指定开始返回的行数。
  • row_count:指定返回的记录数。
示例:

假设我们有一个 users 表,包含 idname 字段,想要分页显示第 2 页的数据(每页 10 条数据):

SELECT id, name
FROM users
ORDER BY id
LIMIT 10 OFFSET 10;  -- 从第 11 条记录开始,返回 10 条数据

或者使用更简洁的写法:

SELECT id, name
FROM users
ORDER BY id
LIMIT 10 OFFSET 10;  -- 相同效果

2. Oracle 分页

在 Oracle 中,分页查询可以使用 ROWNUM 或者更常见的 ROW_NUMBER() 窗口函数(自 Oracle 12c 以后)。ROWNUM 更为传统,而 ROW_NUMBER() 是标准的 SQL 方式。

使用 ROWNUM
SELECT * FROM (SELECT id, nameFROM usersORDER BY id
)
WHERE ROWNUM BETWEEN start_row AND end_row;
使用 ROW_NUMBER()(推荐):
SELECT id, name
FROM (SELECT id, name,ROW_NUMBER() OVER (ORDER BY id) AS rownumFROM users
)
WHERE rownum BETWEEN start_row AND end_row;
  • start_row 是开始的行号,end_row 是结束的行号。
  • ROW_NUMBER() 会为每一行分配一个唯一的行号,然后你可以基于行号进行分页。
示例:

假设每页显示 10 条记录,想获取第 2 页的数据:

SELECT id, name
FROM (SELECT id, name,ROW_NUMBER() OVER (ORDER BY id) AS rownumFROM users
)
WHERE rownum BETWEEN 11 AND 20;  -- 获取第 2 页(第 11 到 20 条数据)

3. SQL Server 分页

在 SQL Server 中,从 2005 版本开始,分页通常使用 ROW_NUMBER() 函数。SQL Server 2012 版本以后,提供了 OFFSET-FETCH 子句,它简化了分页操作。

使用 OFFSET-FETCH(推荐):
SELECT id, name
FROM users
ORDER BY id
OFFSET start_row ROWS FETCH NEXT row_count ROWS ONLY;
示例:

假设每页显示 10 条记录,想获取第 2 页的数据:

SELECT id, name
FROM users
ORDER BY id
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;  -- 从第 11 条开始,获取 10 条数据
使用 ROW_NUMBER()
WITH paged AS (SELECT id, name,ROW_NUMBER() OVER (ORDER BY id) AS rownumFROM users
)
SELECT id, name
FROM paged
WHERE rownum BETWEEN start_row AND end_row;

4. PostgreSQL 分页

PostgreSQL 的分页查询与 MySQL 类似,使用 LIMITOFFSET 来实现分页。

语法:
SELECT column1, column2, ...
FROM table_name
ORDER BY column_name
LIMIT row_count OFFSET offset;
示例:

假设每页显示 10 条记录,想获取第 2 页的数据:

SELECT id, name
FROM users
ORDER BY id
LIMIT 10 OFFSET 10;  -- 从第 11 条记录开始,返回 10 条数据

总结:

数据库分页方式语法
MySQLLIMITOFFSETSELECT * FROM table LIMIT 10 OFFSET 10;
OracleROWNUMROW_NUMBER()SELECT * FROM (SELECT id, ROW_NUMBER()...) WHERE rownum BETWEEN 11 AND 20;
SQL ServerOFFSET-FETCHROW_NUMBER()SELECT * FROM users ORDER BY id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
PostgreSQLLIMITOFFSETSELECT * FROM users LIMIT 10 OFFSET 10;
参考:
  • MySQL:通过 LIMITOFFSET 控制分页,适合快速查询少量数据。
  • Oracle:使用 ROWNUMROW_NUMBER() 可以更灵活地控制分页,尤其是对复杂查询的分页处理。
  • SQL ServerOFFSET-FETCH 更加简洁,ROW_NUMBER() 提供了更多的灵活性,适合复杂的分页需求。
  • PostgreSQL:与 MySQL 相似,使用 LIMITOFFSET 来实现分页。

这些分页方法可以根据不同的业务需求进行选择。如果你在复杂查询中需要对数据进行排序或聚合,推荐使用支持窗口函数(如 ROW_NUMBER())的分页方法。


http://www.ppmy.cn/server/146653.html

相关文章

开源 - Ideal库 - Excel帮助类,设计思路(一)

今天开始和大家分享关于Excel最长常用操作封装。 01、起因 市面上有很多Excel操作库,这些库设计之初的目标是提供对Excel的各种操作功能,包括数据、样式、公式、图表等等。而对于我们平时开发来说,大多时候并不需要那么多强大的功能&#xf…

java 接口防抖

防抖:防止重复提交 在Web系统中,表单提交是一个非常常见的功能,如果不加控制,容易因为用户的误操作或网络延迟导致同一请求被发送多次,进而生成重复的数据记录。要针对用户的误操作,前端通常会实现按钮的l…

【西瓜书】支持向量机(SVM)

支持向量机(Support Vector Machine,简称SVM)。 超平面 分类学习最基本的想法就是基于训练集合D在样本空间中找到一个划分超平面,将不同类别的样本分开。 但能将训练样本分开的划分超平面可能有很多,应该努力去找到哪…

当新能源遇见低空经济:无人机在光伏领域的创新应用

随着全球能源结构的转型和技术的不断进步,新能源行业已成为推动经济社会发展的重要力量。其中,低空经济作为新兴的战略性产业,正深刻改变着人类社会的出行方式和产业链格局。在这一背景下,无人机与光伏产业的结合,不仅…

.net core 创建linux服务,并实现服务的自我更新

目录 创建服务创建另一个服务,用于执行更新操作给你的用户配置一些systemctl命令权限 创建服务 /etc/systemd/system下新建服务配置文件:yourapp.service,内容如下: [Unit] Descriptionyourapp Afternetwork.target[Service] Ty…

Spring Boot优雅读取配置信息 @EnableConfigurationProperties

很多时候我们需要将一些常用的配置信息比如oss等相关配置信息放到配置文件中。常用的有以下几种,相信大家比较熟悉: 1、Value(“${property}”) 读取比较简单的配置信息: 2、ConfigurationProperties(prefix “property”)读取配置信息并与 …

嵌入式Linux中常用的文件系统类型

嵌入式Linux系统中使用的文件系统类型多种多样,每种都有其特点和适用场景。以下是几种常见的嵌入式Linux文件系统类型及其特性: 只读压缩文件系统 SquashFS:一种高度压缩的只读文件系统,适合用于固件映像,它能够提供高…

使用Gradle编译前端的项目

使用Gradle编译前端的项目 前言项目结构根项目(parent-project)的 settings.gradle.kts后端项目(backend)的 build.gradle.kts前端项目(frontend)的 build.gradle.kts打包bootJar 前言 最近的项目都是使用…