概览:在本教程中,您将学习如何使用 SQL LIMIT
从查询中限制返回行数。
SQL LIMIT 子句简介
要限制 select 语句返回的行数,可以使用 LIMIT
和 OFFSET
子句。
下面为 LIMIT
和 OFFSET
子句的语法:
SELECT
column_list
FROM
table1
ORDER BY column_list
LIMIT row_count OFFSET offset;
Code language: SQL (Structured Query Language) (sql)
在此语法中:
LIMIT row_count
确定查询返回的行数(row_count
)。OFFSET offset
子句在开始返回行之前跳过offset
行。
OFFSET
子句为可选子句。如果您省略它,查询将从 SELECT
子句返回的第一行返回 row_count 行。
使用 LIMIT
子句时,重要的是使用 ORDER BY
子句确保结果集中的行顺序。
并非所有数据库系统都支持 LIMIT
子句。因此,LIMIT
子句仅在某些数据库系统中可用,例如 MySQL、PostgreSQL、SQLite、Sybase SQL Anywhere 和 HSQLDB。如果您使用 SQL Server,可以使用 SELECT TOP
代替。
SQL LIMIT 子句示例
我们将在 示例数据库 中使用 employees
表来演示 LIMIT 和 OFFSET
子句。

以下语句按 first_name
列对 employees
表中的所有行进行排序。
SELECT
employee_id,
first_name,
last_name
FROM
employees
ORDER BY
first_name;
Code language: SQL (Structured Query Language) (sql)

以下示例使用 LIMIT 子句来返回 SELECT 子句返回的结果集中前 5 行
SELECT
employee_id,
first_name,
last_name
FROM
employees
ORDER BY
first_name
LIMIT 5;
Code language: SQL (Structured Query Language) (sql)

以下示例同时使用 LIMIT
和 OFFSET
子句从第 4 行开始返回 5 行
SELECT
employee_id, first_name, last_name
FROM
employees
ORDER BY first_name
LIMIT 5 OFFSET 3;
Code language: SQL (Structured Query Language) (sql)

在 MySQL 中,您可以使用更简短的 LIMIT 和 OFFSET
子句形式,如下所示:
SELECT
employee_id,
first_name,
last_name
FROM
employees
ORDER BY
first_name
LIMIT 3 , 5;
Code language: SQL (Structured Query Language) (sql)
使用 SQL LIMIT 获取具有最高或最低值的前 N 行
可以使用 LIMIT
子句来获取具有最高或最低值的前 N 行。例如,以下语句获取薪水最高的五名员工。
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
ORDER BY
salary DESC
LIMIT 5;
Code language: SQL (Structured Query Language) (sql)

首先,ORDER BY
子句按降序对员工进行排序,然后 LIMIT
子句限制查询返回的 5 行。
要获取薪水最低的前五名员工,您按升序对员工进行排序。

获取值为第 Nth 高的行
假设您必须找到公司中薪水排名第二的员工。为此,可以使用 LIMIT OFFSET
子句,如下所示:
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
ORDER BY
salary DESC
LIMIT 1 OFFSET 1;
Code language: SQL (Structured Query Language) (sql)
ORDER BY
子句按降序对员工进行排序。LIMIT 1 OFFSET 1
子句从结果集中获取第二行。
此查询基于一个假设,即每位员工的薪水都不同。如果两位员工的薪水相同,则该查询将失败。
另外,如果您有两个或更多员工的第 2 高薪相同,则查询只会返回第一个员工。
要解决此问题,您可以先使用以下语句获取第二高薪。
SELECT DISTINCT
salary
FROM
employees
ORDER BY salary DESC
LIMIT 1 , 1;
Code language: SQL (Structured Query Language) (sql)

并将其结果传递给另一个查询
SELECT
employee_id, first_name, last_name, salary
FROM
employees
WHERE
salary = 17000;
Code language: SQL (Structured Query Language) (sql)

如果您知道子查询,您可以将这两个查询合并为一个查询,如下所示
SELECT
employee_id, first_name, last_name, salary
FROM
employees
WHERE
salary = (SELECT DISTINCT
salary
FROM
employees
ORDER BY salary DESC
LIMIT 1 , 1);
Code language: SQL (Structured Query Language) (sql)
摘要
- 使用 LIMIT 和 OFFSET 子句来限制查询返回的行数。
- LIMIT 和 OFFSET 不是 SQL 标准。