SQL FETCH

摘要:在此教程中,你将学习如何使用 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 } ONLYCode language: SQL (Structured Query Language) (sql)

在此语法中:

  • ROWROWSFIRSTNEXT 是同义词。因此,你可以交替使用它们。
  • 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 表来进行演示。

SQL FETCH - employees table

以下语句返回工资最高的第一个员工:

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 行,然后再开始返回任何行。
本教程是否有帮助?