Oracle 12c 以上版本提供支援,用來限制查詢回傳的資料列數,實作分頁功能,對應 MySQL 的 LIMIT。
完整語法
[ OFFSET offset ROWS ]
FETCH NEXT [ row_count | percent PERCENT ] ROWS [ ONLY | WITH TIES ]Code language: CSS (css)
1. OFFSET 子句(選填)
作用:跳過前面 N 筆資料,主要用於分頁。
- 省略時偏移量等於 0,從第一列開始讀取資料
- 偏移量為負數:視為 0 處理
- 偏移量是
NULL或是大於總資料列數:不會回傳任何資料 - 偏移量帶有小數:直接捨去小數部分,只保留整數
2. FETCH 子句
作用:指定要回傳多少筆資料,支援按列數、百分比兩種模式。
ONLY:只取指定數量的資料(最常使用)WITH TIES:會把和最後一筆排序欄位值相同的資料一併取出,必須搭配ORDER BY使用
範例程式碼
直接取出前5筆,依照 name 欄位遞減排序
SELECT *
FROM student
ORDER BY name DESC
FETCH NEXT 5 ROWS ONLY;
取出前2筆資料
select * from student fetch next 2 rows only;Code language: JavaScript (javascript)
輸出結果:回傳表格前兩筆紀錄 jim、lisa。
分頁範例:跳過3列,讀取4列(第2頁,每頁4筆)
SELECT *
FROM student
ORDER BY id
OFFSET 3 ROWS
FETCH NEXT 4 ROWS ONLY;
依照百分比回傳,取全部資料的10%
SELECT *
FROM student
FETCH NEXT 10 PERCENT ROWS ONLY;
WITH TIES 用法(包含並列資料)
SELECT *
FROM student
ORDER BY score DESC
FETCH NEXT 3 ROWS WITH TIES;
如果第三名有多筆分數相同的資料,會全部撈出來,實際回傳筆數可能大於3。
FETCH
Previous: WHERE 條件查詢