SQL Server Offset Fetch子句

在本教學中,將學習如何使用SQL Server OFFSET FETCH子句來限制查詢返回的行數。
OFFSETFETCH子句是ORDER BY子句的選項。 它們用於限制查詢返回的行數。
以下是OFFSETFETCH子句的語法:

ORDER BY column_list [ASC |DESC]
OFFSET offset_row_count {ROW | ROWS}
FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} ONLY

在上面語法中,

  • OFFSET子句指定在開始從查詢返回行之前要跳過的行數。offset_row_count可以是大於或等於零的常量,變數或參數。
  • FETCH子句指定在處理OFFSET子句後要返回的行數。 offset_row_count可以是大於或等於1的常量,變數或標量。
  • OFFSET子句是必需的,而FETCH子句是可選的。 此外,FIRSTNEXT是同義詞,因此可以互換使用它們。

以下圖中說明了OFFSETFETCH子句:

請注意,必須將OFFSETFETCH子句與ORDER BY子句一起使用。 否則將收到錯誤消息。
OFFSETFETCH子句比實現TOP子句更適合實現查詢分頁解決方案。

SQL Server OFFSET和FETCH示例

下麵將使用示例資料庫中的products表進行演示。

以下查詢返回products表中的所有產品,並按其價格和名稱對產品進行排序:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name;

執行上面示例查詢語句,得到以下結果 -

要跳過前10個產品並返回其餘產品,請使用OFFSET子句,如以下語句所示:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name
OFFSET 10 ROWS;

執行上面示例查詢語句,得到以下結果 -

要跳過前10個產品並選擇接下來的10個產品,請使用OFFSETFETCH子句,如下所示:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;

執行上面示例查詢語句,得到以下結果 -

要獲得前10個最貴的產品,請使用OFFSETFETCH子句,如下所示:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price DESC,
    product_name
OFFSET 0 ROWS
FETCH FIRST 10 ROWS ONLY;

執行上面示例查詢語句,得到以下結果 -

在此示例中,ORDER BY子句按價格按降序對產品進行排序。 然後,OFFSET子句跳過零行,FETCH子句從列表中獲取前10個產品。

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


上一篇: SQL Server數據查詢 下一篇: SQL Server連接表