第 6.1 节:LIMIT 和 OFFSET 的关系

考虑以下用户表:

id username
1 User1
2 User2
3 User3
4 User4
5 User5

为了限制 SELECT 查询结果集中的行数,可以使用 LIMIT 子句,并配合一个或两个正整数作为参数(零也可)。

带一个参数的 LIMIT 子句

当使用一个参数时,结果集将被限制为指定的行数,方式如下:

SELECT * FROM users ORDER BY id ASC LIMIT 2;

结果:

id username
1 User1
2 User2

如果参数的值为 0,结果集将为空。

另外请注意,ORDER BY 子句对于指定结果集中将显示哪些首行可能很重要(当按其他列排序时)。

带两个参数的 LIMIT 子句

当在 LIMIT 子句中使用两个参数时:

  • 第一个参数表示结果集中将从中开始显示行的行号(通常称为偏移量(offset)),因为它表示受限结果集起始行之前的行。这允许该参数接收 0 值,从而考虑非受限结果集的第一行。
  • 第二个参数指定结果集中要返回的最大行数(类似于单参数示例)。

因此查询:

SELECT * FROM users ORDER BY id ASC LIMIT 2, 3;

呈现以下结果集:

id username
3 User3
4 User4
5 User5

注意,当偏移量参数为 0 时,结果集等同于单参数 LIMIT 子句。这意味着以下两个查询:

SELECT * FROM users ORDER BY id ASC LIMIT 0, 2;
SELECT * FROM users ORDER BY id ASC LIMIT 2;

产生相同的结果集:

id username
1 User1
2 User2

OFFSET 关键字:替代语法

带有两个参数的 LIMIT 子句的另一种语法是在第一个参数后使用 OFFSET 关键字,方式如下:

SELECT * FROM users ORDER BY id ASC LIMIT 2 OFFSET 3;

此查询将返回以下结果集:

id username
3 User3
4 User4

请注意,在这种替代语法中,参数的位置发生了交换:

  • 第一个参数表示结果集中要返回的行数。
  • 第二个参数表示偏移量。