SQL LIMIT

概览:在本教程中,您将学习如何使用 SQL LIMIT 从查询中限制返回行数。

SQL LIMIT 子句简介

要限制 select 语句返回的行数,可以使用 LIMITOFFSET 子句。

下面为 LIMITOFFSET 子句的语法:

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 子句仅在某些数据库系统中可用,例如 MySQLPostgreSQLSQLite、Sybase SQL Anywhere 和 HSQLDB。如果您使用 SQL Server,可以使用 SELECT TOP 代替。

SQL LIMIT 子句示例

我们将在 示例数据库 中使用 employees 表来演示 LIMIT 和 OFFSET 子句。

employees_table

以下语句按 first_name 列对 employees 表中的所有行进行排序。

SELECT 
    employee_id, 
    first_name, 
    last_name
FROM
    employees
ORDER BY 
	first_name;Code language: SQL (Structured Query Language) (sql)

试一试

SQL LIMIT example

以下示例使用 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)

试一试

SQL LIMIT 5 example

以下示例同时使用 LIMITOFFSET 子句从第 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)

试一试

SQL LIMIT OFFSET example

在 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)

试一试

SQL LIMIT top 5 highest salary

首先,ORDER BY 子句按降序对员工进行排序,然后 LIMIT 子句限制查询返回的 5 行。

要获取薪水最低的前五名员工,您按升序对员工进行排序。

SQL LIMIT top 5 lowest salary

获取值为第 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)

试一试

SQL LIMIT 2nd highest salary

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

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary = 17000;Code language: SQL (Structured Query Language) (sql)

试一试

SQL LIMIT 2nd highest salary example

如果您知道子查询,您可以将这两个查询合并为一个查询,如下所示

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 标准。
本教程是否有用?