摘要:在本教學中,您將學習如何使用 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
的值等於或大於一。
由於行在表格中以未指定的順序儲存,因此您應始終將 FETCH
子句與 ORDER BY
子句一起使用,以獲得一致的輸出。
許多資料庫系統都支援 OFFSET FETCH
子句,包括 Oracle Database 12c+、PostgreSQL 10+ 和 Microsoft SQL Server 2012+。但是,每個資料庫系統對 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
子句跳過零行,而 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 行。
這個教學對您有幫助嗎?