MySQL 限制和偏移关系

示例

考虑下users表:

ID用户名
1用户1
2用户2
3用户3
4用户4
5用户5

为了限制SELECT查询结果集中的行数,该LIMIT子句可以与一个或两个正整数一起用作参数(包括零)。

LIMIT 有一个参数的子句

使用一个参数时,结果集将仅被约束为以以下方式指定的数字:

SELECT * FROM users ORDER BY id ASC LIMIT 2

ID用户名
1用户1
2用户2

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

还要注意,该ORDER BY子句可能很重要,以便指定将要显示的结果集的第一行(按另一列排序时)。

LIMIT有两个参数的子句

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

  • 一个参数表示将要从中显示结果集行的行–该数字通常被称为offset,因为它表示受约束结果集的初始行之前的行。这允许自变量0作为值接收,因此考虑了非约束结果集的第一行。

  • 第二参数指定在结果集中(所述一个参数的例子同样地)将被返回的行的最大数量。

因此查询:

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

呈现以下结果集:

ID用户名
3用户3
4用户4
5用户5

注意,当offset参数为时0,结果集将等效于一个参数LIMIT子句。这意味着以下两个查询:

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

SELECT * FROM users ORDER BY id ASC LIMIT 2

产生相同的结果集:

ID用户名
1用户1
2用户2

OFFSET 关键字:替代语法

LIMIT具有两个参数的子句的另一种语法包括以OFFSET下列方式在第一个参数之后使用关键字:

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

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

ID用户名
3用户3
4用户4

注意,在这种替代语法中,参数的位置已切换:

  • 一个参数表示结果集中要返回的行数;

  • 第二参数表示偏移。