文章内容
2021/9/4 14:48:00,作 者: 黄兵
带有 LIMIT 和 OFFSET 的 SQL 分页
MySQL 和 PostgreSQL 都支持一个非常酷的特性,称为 OFFSET
通常与 LIMIT
子句一起使用的特性。
该 LIMIT
子句用于限制 SQL 语句中返回的结果数。因此,如果表中有 1000 行,但只想返回前 10 行,则可以执行以下操作:
SQL 返回前 10 行:
SELECT column FROM table LIMIT 10
这类似于 Microsoft SQL Server TOP
上的子句。然而,该 LIMIT
子句总是出现在 MySQL 和 PostgreSQL 查询的末尾。
现在假设您想显示结果 11-20。使用 OFFSET
关键字同样简单,以下查询将执行:
SQL 分页(返回第 11 到 20 行):
SELECT column FROM table LIMIT 10 OFFSET 10
这使得使用 SQL 编写多页结果或分页变得容易。通常使用的方法是对 SELECT 所有记录进行过滤,然后在应用服务器层过滤它们,而不是直接在数据库上过滤。正如您所想象的那样,在数据库上执行此操作会产生更好的性能。
从页码计算偏移量
我在 SQL 中对分页进行编码有两种不同的方式,要么直接将限制和偏移量作为变量传递,要么将页码作为变量提供。页码方法可能更安全一些,因为有人无法通过操作输入变量来制作返回表中所有行的页面。
假设您想要 SQL 结果的第 3 页,在这种情况下您想要 LIMIT 10 OFFSET 20
,这里是一些用于计算页面的伪代码:
limit = 10; offset = (limit * pageNumber) - limit;
MySQL 和 PostgreSQL 的 SQL 分页
我知道 PostgreSQL 支持 OFFSET
关键字已经有一段时间了,但出于某种原因,我一直认为 MySQL 不支持它。好吧,事实证明它现在得到支持。能够在 MySQL 和 PostgreSQL 上对 SQL 分页使用相同的语法真是太好了。
我使用过许多不同的数据库平台,我认为 MySQL
和 PostgreSQL
有最干净的方式来进行 SQL 分页 LIMIT
和 OFFSET
。
评论列表