本教程我们将演示如何使用SQL LIMIT
子句来限制SELECT
语句返回的行数。
要检索查询返回的行的一部分,请使用LIMIT
和OFFSET
子句。 以下说明了这些子句的语法:

在这个语法中,
row_count
确定将返回的行数。
OFFSET
子句在开始返回行之前跳过偏移行。 OFFSET
子句是可选的。 如果同时使用LIMIT
和OFFSET
子句,OFFSET
会在LIMIT
约束行数之前先跳过偏移行。
在使用LIMIT
子句时,使用ORDER BY
子句确保返回的行按指定顺序非常重要。
我们将使用
示例数据库中的
employees
表来演示
LIMIT
子句用法。
以下语句返回employees
表中按first_name
列排序的所有行。

执行上面查询语句,得到以下结果 -

如果要只返回前5
行,请使用LIMIT
子句,如以下语句。

执行上面查询语句,得到以下结果 -

要跳过两行并获取接下来的五行,请使用LIMIT
和OFFSET
子句,如以下语句所示。

结果如下图所示 -

如果使用的是MySQL,则可以使用LIMIT OFFSET
子句的较短形式。

2. 使用SQL LIMIT获取具有最高或最低值的前N行
可以使用LIMIT
子句获取具有最高或最低值的前N行。 例如,以下声明获得薪资最高的前五名员工。

执行上面示例代码,得到以下结果 -

首先,ORDER BY子句按工资按降序对员工进行排序,然后LIMIT
子句限制从查询返回的五行。
为了获得薪资最低的前五名员工,可以按升序对员工进行排序。
3. 获取具有第N个最高值的行
假设必须得到公司薪水第二高的员工。请使用LIMIT OFFSET
子句,如下所示。
ORDER BY
子句按工资降序对员工进行排序。 LIMIT 1 OFFSET 1
子句从结果集中获取第二行。
此查询的假设是每个员工都有不同的薪水。 如果有两名员工拥有相同的最高薪水,那么它将会失败。 此外,如果有两个或更多具有相同第二高薪的员工,则查询只返回第一个。
要解决此问题,可以使用以下语句首先获得第二高薪。
ORDER BY
子句按工资降序对员工进行排序。 LIMIT 1 OFFSET 1
子句从结果集中获取第二行。
此查询的假设是每个员工都有不同的薪水。 如果有两名员工拥有相同的最高薪水,那么它将会失败。 此外,如果有两个或更多具有相同第二高薪的员工,则查询只返回第一个。
要解决此问题,可以使用以下语句首先获得第二高薪。
执行上面示例代码,得到以下结果 -

并将结果传递给另一个查询:

结果如下所示 -

如果使用子查询,则可以将两个查询组合到单个查询中,如下所示:

结果如下所示 -

SQL LIMIT
和OFFSET
子句,这些子句用于限制查询返回的行数。
延伸阅读:https://www.runoob.com/sqlite/sqlite-limit-clause.html
https://www.yiibai.com/sql/sql-limit.html