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 的值等於或大於一。

由於行在表格中以未指定的順序儲存,因此您應始終將 FETCH 子句與 ORDER BY 子句一起使用,以獲得一致的輸出。

許多資料庫系統都支援 OFFSET FETCH 子句,包括 Oracle Database 12c+PostgreSQL 10+Microsoft SQL Server 2012+。但是,每個資料庫系統對 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 子句跳過零行,而 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 行。
這個教學對您有幫助嗎?