该LIMIT
子句可以用来约束SELECT
语句 返回的行数 。 LIMIT
接受一个或两个数字参数,两个参数都必须是非负整数常数,但以下情况除外:
-
在准备好的语句中,
LIMIT
可以使用?
占位符标记指定参数。 -
在存储的程序中,
LIMIT
可以使用整数值的例程参数或局部变量来指定参数。
有两个参数,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。初始行的偏移量是0(不是1):
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
要检索从某个偏移量到结果集结尾的所有行,可以为第二个参数使用较大的数字。该语句检索从第96行到最后一行的所有行:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
使用一个参数,该值指定从结果集的开头返回的行数:
SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows
换句话说,等于: LIMIT
row_count
LIMIT 0,
row_count
对于准备好的语句,您可以使用 占位符。以下语句从tbl
表返回一行 :
SET @a=1;
PREPARE STMT FROM 'SELECT * FROM tbl LIMIT ?';
EXECUTE STMT USING @a;
以下语句返回表的第二到第六行tbl
:
SET @skip=1; SET @numrows=5;
PREPARE STMT FROM 'SELECT * FROM tbl LIMIT ?, ?';
EXECUTE STMT USING @skip, @numrows;
为了与PostgreSQL兼容,MySQL还支持 LIMIT
句法。row_count
OFFSET offset
例题:
176. 第二高的薪水
编写一个 SQL 查询,获取 Employee
表中第二高的薪水(Salary) 。
+----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+
例如上述 Employee
表,SQL查询应该返回 200
作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null
。
+---------------------+ | SecondHighestSalary | +---------------------+ | 200 | +---------------------+
# Write your MySQL query statement below select(select DISTINCT Employee.Salary AS SecondHighestSalary from Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1) AS SecondHighestSalary;
如果LIMIT
发生在带括号的 查询表达式,也是 已应用 在外部查询中,结果是不确定的,并且在将来的MySQL版本中可能会更改。