Oracle的三層分頁指的是在進行分頁查詢時,使用三種不同的方式來實現分頁效果,分別是使用ROWNUM、使用OFFSET和FETCH、使用ROW_NUMBER() OVER()
1.使用ROWNUM
ROWNUM是Oracle中一個僞列,它用於表示返回的行的序號。使用ROWNUM進行分頁查詢的方法是在SELECT語句中加入WHERE子句,並在WHERE子句中指定ROWNUM的取值範圍,例如
SELECT * FROM ( SELECT a.*, ROWNUM r FROM my_table a WHERE ROWNUM <= 30 ) WHERE r >= 20;
使用ROWNUM進行分頁查詢的優點是簡單易懂
2.使用OFFSET和FETCH
OFFSET和FETCH是Oracle 12c引入的語法,它們可以更方便地實現分頁查詢。使用OFFSET和FETCH進行分頁查詢的方法是在SELECT語句中加入OFFSET和FETCH子句,例如:
SELECT * FROM my_table ORDER BY my_column OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
上述查詢語句的意思是對my_table表按照my_column列進行排序,然後取出從第21條記錄開始的10條記錄作爲結果返回。使用OFFSET和FETCH進行分頁查詢的優點是簡單方便,缺點是隻有在Oracle 12c及以上版本中才能使用。
3.使用ROW_NUMBER() OVER()
ROW_NUMBER() OVER()是Oracle中一種用於計算行號的函數。使用ROW_NUMBER() OVER()進行分頁查詢的方法是在SELECT語句中加入ROW_NUMBER() OVER()函數,並在WHERE子句中指定ROW_NUMBER() OVER()的取值範圍,例如:
SELECT * FROM ( SELECT a.*, ROW_NUMBER() OVER (ORDER BY my_column) r FROM my_table a ) WHERE r BETWEEN 21 AND 30;
上述查詢語句的意思是對my_table表按照my_column列進行排序,然後取出第21到第30條記錄作爲結果返回。使用ROW_NUMBER() OVER()進行分頁查詢的優點是靈活性高,可以實現各種不同的分頁方式,缺點是語法較爲複雜。