oracle實(shí)現(xiàn)分頁全過程
oracle實(shí)現(xiàn)分頁
Oracle SQL可以使用ROWNUM和Oracle的偽列功能來實(shí)現(xiàn)分頁。
1、一個(gè)基本的分頁查詢語句的例子
假設(shè)你想從一個(gè)名為"my_table"的表中獲取第11到20行數(shù)據(jù):
SELECT *
FROM (
SELECT
my_table.*,
ROWNUM AS row_num
FROM my_table
WHERE ROWNUM <= 20
)
WHERE row_num >= 11;
這個(gè)查詢使用子查詢和ROWNUM來獲取前20行數(shù)據(jù),然后在外部查詢中使用WHERE條件過濾掉前10行數(shù)據(jù),以便只返回第11到20行數(shù)據(jù)。
請注意:
- 在使用ROWNUM時(shí),需要在子查詢中首先選擇要使用的行,并將其作為結(jié)果的一部分返回。
- 然后在外部查詢中,通過WHERE過濾結(jié)果。
在程序中使用則可以傳入page和size進(jìn)行分頁:
SELECT *
FROM (
SELECT
my_table.*,
ROWNUM AS row_num
FROM my_table
WHERE ROWNUM <= page * size
)
WHERE row_num > ((page-1) * size);實(shí)際上就是通過嵌套sql 使用ROWNUM在內(nèi)層sql確定最大邊界,在外層sql確定最小邊界;
2、要實(shí)現(xiàn)指定頁數(shù)
你需要知道每頁的記錄數(shù)和要顯示的頁碼。
例如,如果每頁顯示10條記錄,并且你想要顯示第3頁的記錄,那么你需要跳過前20條記錄(前兩頁中的所有記錄)并返回10條記錄。
以下是一個(gè)示例查詢,它使用OFFSET和FETCH FIRST語句實(shí)現(xiàn)分頁和指定頁數(shù):
SELECT * FROM my_table ORDER BY my_column OFFSET 20 ROWS FETCH FIRST 10 ROWS ONLY;
在這個(gè)例子中,OFFSET子句指定要跳過前20行記錄(即前兩頁中的所有記錄),F(xiàn)ETCH FIRST子句指定要返回接下來的10行記錄(即第3頁的記錄)。ORDER BY子句用于指定排序順序。
如果你想要顯示不同的頁數(shù),只需要將OFFSET和FETCH FIRST子句中的行數(shù)根據(jù)需要調(diào)整即可。
3、要同時(shí)指定每頁顯示條數(shù)和頁數(shù)
你可以使用OFFSET和FETCH FIRST語句結(jié)合計(jì)算來實(shí)現(xiàn)。
以下是一個(gè)示例查詢,它可以指定每頁顯示的條數(shù)和頁數(shù):
SELECT *
FROM (
SELECT
my_table.*,
ROWNUM AS row_num
FROM my_table
ORDER BY my_column
)
WHERE row_num > ((page_number - 1) * page_size)
OFFSET (page_number - 1) * page_size ROWS
FETCH FIRST page_size ROWS ONLY;
在這個(gè)查詢中,子查詢使用ROWNUM分配一個(gè)唯一的行號(hào),并按照指定的列名進(jìn)行排序。
外部查詢使用WHERE子句過濾出所需的行,并使用OFFSET和FETCH FIRST語句返回指定的頁數(shù)和每頁的記錄數(shù)。
page_number變量是指定的頁數(shù),page_size變量是每頁要顯示的記錄數(shù)。
請注意:
- OFFSET和FETCH FIRST語句的順序很重要。
- OFFSET必須在FETCH FIRST之前指定,以確保正確地跳過所需的行數(shù)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
oracle中動(dòng)態(tài)SQL使用詳細(xì)介紹
Oracle編譯PL/SQL程序塊分為兩個(gè)種:通常靜態(tài)SQL采用前一種編譯方式,而動(dòng)態(tài)SQL采用后一種編譯方式,需要了解的朋友可以參考下2012-11-11
Oracle BULK COLLECT批量取數(shù)據(jù)解決方法
在oracle使用中為了提高取數(shù)據(jù)效率,本文將詳細(xì)介紹Oracle BULK COLLECT批量取數(shù)據(jù),需要了解跟多的朋友可以參考下2012-11-11
Oracle移動(dòng)數(shù)據(jù)文件不停機(jī)和停機(jī)兩種方式詳解
這篇文章主要為大家介紹了Oracle移動(dòng)數(shù)據(jù)文件不停機(jī)和停機(jī)兩種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
oracle導(dǎo)出sql語句的結(jié)果集和保存執(zhí)行的sql語句(深入分析)
本篇文章是對(duì)oracle導(dǎo)出sql語句的結(jié)果集與保存執(zhí)行的sql語句進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
深入探討:oracle中方案的概念以及方案與數(shù)據(jù)庫的關(guān)系
本篇文章是對(duì)oracle中方案的概念以及方案與數(shù)據(jù)庫的關(guān)系進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Oracle 如何規(guī)范清理v$archived_log記錄實(shí)例詳解
這篇文章主要介紹了Oracle 如何規(guī)范清理v$archived_log記錄實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05
Oracle中查看正在運(yùn)行的SQL進(jìn)程腳本分享
這篇文章主要介紹了Oracle中查看正在運(yùn)行的SQL進(jìn)程腳本分享,本文使用腳本實(shí)現(xiàn)了類似mysql show processlist命令的功能,需要的朋友可以參考下2014-10-10

