摘要:在此教程中,你将学习如何使用 SQL FETCH
子句来限制查询返回的行数。
SQL FETCH 子句简介
要限制查询返回的行数,请使用 LIMIT
子句。LIMIT
子句得到包括 MySQL、H2 和 HSQLDB 等在内的许多数据库系统的广泛支持。然而,LIMIT
子句并不在 SQL 标准中。
SQL:2008 引入了 OFFSET FETCH
子句,其函数与 LIMIT
子句类似。OFFSET FETCH
子句允许你在结果集中跳过前 N
行,然后再开始返回任何行。
以下是 SQL FETCH
子句的语法:
OFFSET offset_rows { ROW | ROWS }
FETCH { FIRST | NEXT } [ fetch_rows ] { ROW | ROWS } ONLY
Code language: SQL (Structured Query Language) (sql)
在此语法中:
ROW
和ROWS
、FIRST
和NEXT
是同义词。因此,你可以交替使用它们。offset_rows
是一个整数,它必须为零或正数。如果offset_rows
大于结果集中的行数,则将不返回任何行。fetch_rows
也是一个整数,它确定要返回的行数。fetch_rows
的值为等于或大于 1。
由于行以未指定顺序存储在表中,因此你应该始终将 FETCH
子句与 ORDER BY
子句一起使用,以获得一致的输出。
包括 Oracle 数据库 12c+、PostgreSQL 10+ 和 Microsoft SQL Server 2012+ 在内的许多数据库系统都支持 OFFSET FETCH
子句。但是,每个数据库系统以一些差异以不同的方式实现 OFFSET FETCH
子句。
OFFSET FETCH
子句通常用于需要分页的客户端或 Web 应用程序。例如,如果每页有十行,则可以跳过前十行并返回接下来的十行,以获取第二页的行。
SQL FETCH 示例
我们将使用 示例数据库 中的 employees
表来进行演示。

以下语句返回工资最高的第一个员工:
SELECT
employee_id,
first_name,
last_name,
salary
FROM employees
ORDER BY
salary DESC
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;
Code language: SQL (Structured Query Language) (sql)
在此示例中,第一个 ORDER BY
子句按工资从高到低对员工进行排序。
OFFSET
子句跳过 0 行,而 FETCH
子句返回第一行。
以下语句按工资对员工进行排序,跳过工资最高的第一个员工,并获取接下来的五个员工。
SELECT
employee_id,
first_name,
last_name,
salary
FROM employees
ORDER BY
salary DESC
OFFSET 5 ROWS
FETCH NEXT 5 ROWS ONLY;
Code language: SQL (Structured Query Language) (sql)
摘要
- 使用 SQL
FETCH
子句来限制查询返回的行数。 - SQL
FETCH
子句在结果集中跳过 N 行,然后再开始返回任何行。
本教程是否有帮助?