SQL FETCH

摘要:在本教程中,您將學習如何使用 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_skiprows_to_skip 是一個整數,指定在查詢開始返回後續行之前要跳過的行數。rows_to_skip 可以是零或正數。如果 rows_to_skip 大於結果集中的行數,查詢將不返回任何行。OFFSET 子句是可選的。如果省略它,查詢將不會跳過任何行。
  • 其次,在 FETCH 子句中指定要返回的行數 (row_count)。

ROWROWSFIRSTNEXT 分別是同義詞。因此,您可以互換使用它們。

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

許多資料庫系統都支援 FETCH 子句,包括 Oracle Database 12c+PostgreSQL 10+Microsoft SQL Server 2012+。但是,每個資料庫系統對 FETCH 子句的實現方式略有不同,存在一些差異。

在實踐中,您會發現 FETCH 子句對分頁很有幫助。例如,如果應用程式每頁顯示五行,要檢索第二頁的行,您可以跳過前五行並返回接下來的五行。

SQL FETCH 子句示例 #

我們將使用示例資料庫中的 employees 表進行演示。

SQL FETCH - employees table

獲取薪水最高的五名員工 #

以下語句使用 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 行。

資料庫 #

本教程是否有幫助?
© .