SQL Fetch語句


在本教學中,我們來學習如何使用SQL FETCH子句來限制查詢返回的行數。

1. SQL FETCH子句簡介

要限制查詢返回的行數,請使用LIMIT子句。 LIMIT子句得到了許多資料庫系統的廣泛支援,例如MySQL,H2和HSQLDB。 但是,LIMIT子句不是SQL標準子句。

SQL:2008 引入了OFFSET FETCH子句,它具有與LIMIT子句類似的功能。 OFFSET FETCH子句用於在開始返回任何行之前跳過結果集中的前N行。

以下顯示了SQLFETCH子句的語法:

OFFSET offset_rows { ROW | ROWS }
FETCH { FIRST | NEXT } [ fetch_rows ] { ROW | ROWS } ONLY

在上面語法中,

  • ROWROWSFIRSTNEXT是同義詞,因此,可以互換使用它們。
  • offset_rows是一個整數,必須為零或正數。 如果offset_rows大於結果集中的行數,則不會返回任何行。
  • fetch_rows也是一個整數,用於確定要返回的行數。 fetch_rows的值等於或大於1

由於行以不可預測的順序儲存在表中,因此應始終將FETCH子句與ORDER BY子句一起使用以獲得一致的輸出。

許多資料庫系統都支援OFFSET FETCH子句,包括Oracle Database 12c +PostgreSQL 10+Microsoft SQL Server 2012+ 。 但是,每個資料庫系統都會以不同的方式實現OFFSET FETCH子句。

OFFSET FETCH子句通常用於需要分頁的用戶端或Web應用程式。 例如,如果每個頁面有十行,要獲取第二頁的行,可以跳過前10行並返回接下來的10行。

2. 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;

在此範例中,首先,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;

在本教學中,您已學習如何在開始返回任何行之前使用SQL FETCH子句跳過結果集中的N行。