Oracle分頁及例項說明為何要巢狀兩層或三層

2021-10-06 18:22:50 字數 3055 閱讀 4780

oracle分頁和mysql分頁有點不一樣,mysql利用limit分頁,oracle利用rownum關鍵字來進行分頁。

–rownum關鍵字:oracle對外提供的自動給查詢結果編號的關鍵字,與每行的資料沒有關係。

–注意:rownum關鍵字只能做< <=的判斷,不能進行》 >=的判斷,所以外層我們用內層查出的rownum放到外層去比較

接下來就用這張表來嘗試分頁,這張表一共有31條資料

--第幾頁:page

--每頁大小:size

select t2.

*,rownum

from

(select rownum as rowno, t.

*from

table t

where rownum <= size*page) t2

where t2.rowno > size*

(page-1)

;

例:

--第幾頁:page=1

--每頁大小:size=10

select t2.

*,rownum

from

(select rownum as rowno, t.

*from

table t

where rownum <=10*

1) t2

where t2.rowno >10*

(1-1

);

--第幾頁:page=2

--每頁大小:size=20

看到上面的查詢語句你可能會想到為什麼不直接用一層來解決呢

select rownum as rowno, t.* from table t where rownum <= size*page and rownum > size*(page-1);

你會發現明明是有資料的,但用這語句就是查不出來呢

select rownum as rowno, t.* from table t where rownum <= 10*2 and rownum > 10*(2-1);

這樣看的可能不是太清晰,那這樣呢

select rownum as rowno, t.* from table t where rownum > 10;

是不是發現了端倪,>或者》=對rownum無效,所以一層無法實現分頁查詢

--第幾頁:page

--每頁大小:size

select t2.

*from

(select rownum as rowno, t1.

*from

(select t.

*from

table t

order

by activity_id desc

) t1

where rownum <= size * page) t2

where rowno > size *

(page -1)

;

注意,用到order by的查詢需要三層,這裡肯定又會有疑問,兩層為什麼不行,我在內層加上order by排序不行嗎,這我們需要考慮到sql的執行順序,select是要比order by先執行的,這意味著什麼,我們先select了10條資料,然後再對這10條資料進行排序,這樣好像不是我們想要的結果,所以為了讓order by先執行,那我們就得再巢狀一層來解決這個問題。

例:

--第幾頁:page

--每頁大小:size

--第幾頁:page=1

--每頁大小:size=10

Oracle 表明細及說明

oracle中以dba user v all session index開頭的常用.一.oracle表明細及說明 1.dba 開頭表 dba users 資料庫使用者資訊 dba segments 表段資訊 dba extents 資料區資訊 dba objects 資料庫物件資訊 dba tabl...

ORACLE 外連線及 說明

另外一種左右外連線的表示法為 當 在 左側時,代表以右側為全量輸出,即為右外連線 當 在 右側時,代表以左側為全量輸出,即為左外連線 總結一句話時,就是 在哪一側,對應的表輸出的未匹配到的資料為空,即為反方面的外連線。使用 有以下限制 1.操作符只能出現在where子句中,並且不能與outer jo...

meteor例項 1 建立及說明

這個專案按照discover meteor 1.0 手冊上面的步驟進行。首先 建立專案microscope。建立完畢後,為了便於管理 在microscope資料夾下新建兩個資料夾 public 和 lib。關於檔案,meteor 有以下幾條規則 在 server 資料夾中的 只會在伺服器端執行。在 ...