在本教學中,我們來學習如何使用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
在上面語法中,
ROW
和ROWS
,FIRST
和NEXT
是同義詞,因此,可以互換使用它們。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
行。
上一篇:
SQL Limit子句
下一篇:
SQL Where子句