摘要:在本教程中,您將學習如何使用 SQL FETCH 子句來限制查詢返回的行數。
SQL FETCH 子句簡介 #
要限制查詢返回的行數,可以使用 LIMIT 子句。LIMIT 子句被許多資料庫系統廣泛支援,例如 MySQL、PostgreSQL 和 SQLite。但是,LIMIT 子句並不是 SQL 標準的一部分。
SQL:2008 引入了 OFFSET FETCH 子句,其功能與 LIMIT 子句類似。OFFSET FETCH 子句允許您在開始返回行之前,跳過結果集中的前 N 行。
以下是 FETCH 子句的語法:
OFFSET rows_to_skip { ROW | ROWS }
FETCH { FIRST | NEXT } [ row_count ] { ROW | ROWS } ONLYCode language: SQL (Structured Query Language) (sql)在此語法中:
- 首先,在
OFFSET子句中指定rows_to_skip。rows_to_skip是一個整數,指定在查詢開始返回後續行之前要跳過的行數。rows_to_skip可以是零或正數。如果rows_to_skip大於結果集中的行數,查詢將不返回任何行。OFFSET子句是可選的。如果省略它,查詢將不會跳過任何行。 - 其次,在
FETCH子句中指定要返回的行數 (row_count)。
ROW 和 ROWS、FIRST 和 NEXT 分別是同義詞。因此,您可以互換使用它們。
由於資料庫系統可能以未指定的順序儲存表中的行,因此您應始終將 FETCH 子句與 ORDER BY 子句一起使用,以獲得一致的輸出。
許多資料庫系統都支援 FETCH 子句,包括 Oracle Database 12c+、PostgreSQL 10+ 和 Microsoft SQL Server 2012+。但是,每個資料庫系統對 FETCH 子句的實現方式略有不同,存在一些差異。
在實踐中,您會發現 FETCH 子句對分頁很有幫助。例如,如果應用程式每頁顯示五行,要檢索第二頁的行,您可以跳過前五行並返回接下來的五行。
SQL FETCH 子句示例 #
我們將使用示例資料庫中的 employees 表進行演示。

獲取薪水最高的五名員工 #
以下語句使用 FETCH 子句來獲取薪水最高的五名員工:
SELECT
first_name,
salary
FROM
employees
ORDER BY
salary DESC
FETCH FIRST 5 ROWS ONLY;Code language: SQL (Structured Query Language) (sql)輸出
first_name | salary
------------+----------
Steven | 24000.00
Lex | 17000.00
Neena | 17000.00
John | 14000.00
Karen | 13500.00Code language: SQL (Structured Query Language) (sql)查詢工作原理
- 首先,
ORDER BY子句按薪水從高到低對員工進行排序。 - 其次,
FETCH子句返回前五行。
根據入職日期獲取最新員工 #
以下查詢使用 FETCH 子句來檢索三名最新的員工:
SELECT
first_name,
hire_date
FROM
employees
ORDER BY
hire_date DESC
FETCH FIRST 3 ROWS ONLY;Code language: SQL (Structured Query Language) (sql)輸出
first_name | hire_date
------------+------------
Charles | 2000-01-04
Luis | 1999-12-07
Karen | 1999-08-10Code language: SQL (Structured Query Language) (sql)查詢工作原理
- 首先,
ORDER BY子句按入職日期從晚到早對員工進行排序。 - 其次,
FETCH子句返回前三行。
使用 FETCH OFFSET 進行分頁 #
以下查詢在跳過前五名員工後,獲取接下來的五名員工:
SELECT
first_name,
last_name,
FROM
employees
ORDER BY
first_name,
last_name
OFFSET
5 ROWS
FETCH NEXT
5 ROWS ONLY;Code language: SQL (Structured Query Language) (sql)輸出
first_name | last_name
------------+-----------
Charles | Johnson
Daniel | Faviet
David | Austin
Den | Raphaely
Diana | LorentzCode language: SQL (Structured Query Language) (sql)查詢工作原理
- 首先,
ORDER BY子句按名字和姓氏的字母順序對員工進行排序。 - 其次,
OFFSET子句跳過前五行。 - 第三,
FETCH子句返回接下來的五行。
摘要 #
- 使用
FETCH子句來限制查詢返回的行數。 - 使用
OFFSET子句在開始返回FETCH子句中指定的行數之前,跳過N行。
資料庫 #
本教程是否有幫助?