在本教學中,將學習如何使用SQL Server OFFSET FETCH子句來限制查詢返回的行數。OFFSET和FETCH子句是ORDER BY子句的選項。 它們用於限制查詢返回的行數。
以下是OFFSET和FETCH子句的語法:
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子句是可選的。 此外,FIRST和NEXT是同義詞,因此可以互換使用它們。
以下圖中說明了OFFSET和FETCH子句:
請注意,必須將OFFSET和FETCH子句與ORDER BY子句一起使用。 否則將收到錯誤消息。OFFSET和FETCH子句比實現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個產品,請使用OFFSET和FETCH子句,如下所示:
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
list_price,
product_name
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
執行上面示例查詢語句,得到以下結果 -
要獲得前10個最貴的產品,請使用OFFSET和FETCH子句,如下所示:
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連接表
