[Oracle] 取得N~M筆資料或Top N資料
簡介
之前使用SQL SERVER要取得前N筆資料只需要使用TOP N即可取得所要的結果,而且還可以取得排序後的結果,而Oracle應該如何下指令呢?
SELECT TOP 10 * FROM Northwind.Orders ORDER BY CustomerID;
Oralce取得前N筆資料
-
未需排序
SELECT * FROM table_name WHERE ROWNUM < 10;
-
如要排序則要搭配Subquery查詢
SELECT a.* FROM ( SELECT * FROM SQLPRO.CUSTOMER ORDER BY FIRST_NAME ) a WHERE rownum <= 10;
-
如版本為Oracle Database 12c以上,則可以使用
FETCH
SELECT * FROM SQLPRO.CUSTOMER ORDER BY FIRST_NAME FETCH FIRST 10 ROWS ONLY;
Oralce取得N~M筆資料
-
Oralce Database 12c以前
SELECT FIRST_NAME FROM ( SELECT FIRST_NAME, ROWNUM AS rnum FROM ( SELECT FIRST_NAME FROM SQLPRO.CUSTOMER ORDER BY FIRST_NAME ) WHERE ROWNUM <= M ) WHERE rnum >= N;
-
Oralce Database 12c以後,利用
FETCH
與OFFSET
SELECT FIRST_NAME FROM SQLPRO.CUSTOMER ORDER BY FIRST_NAME OFFSET (N - 1) ROWS FETCH NEXT (M - N + 1) ROWS ONLY; -- 略過N-1筆,從第 N 筆開始,並取得(M - N + 1)筆資料
參考資料
如有錯誤或建議,歡迎留言指教,謝謝!!
(相關內容如有侵犯隱私或著作權,請協助通知刪除,感謝)
沒有留言:
張貼留言