Oracle中 rownum 的實用案例

2021-10-10 16:46:02 字數 3068 閱讀 2444

首先我們需要了解一些基本的概念.

在mysql中分頁有 limit 關鍵字, limit 2 :從頭開始查 查兩條.

limit 2,1 :從第二條開始查 查一條,也就是我們想要第四條的資料,以此類推 也可以limit 2,6 等等

但是再oracle中是沒有 limit 的,那我們怎麼辦呢?oracle公司當然不會犯這種錯誤,於是rownum油然而生.

rownum: oracle中的偽列

詳細rownum理論傳送門:

上案例

新建 test 表 具體結構如下 結尾附 sql檔案

建好表後再新增一些資料 因為oracle是沒有自增主鍵這一說的 我們需要自己新建乙個自增主鍵

– 測試表 建立自增序列

create sequence zizeng

increment by 1

start with 1

minvalue 1

maxvalue 9999;

解釋: 建立乙個名為 zizeng 每次加1 從1開始 最小值為1 最大值為9999的 自增序列

新增資料

insert into test (id,name,money,deptid) values (zizeng.nextval,『哈哈』,3691,1)

insert into test (id,name,money,deptid) values (zizeng.nextval,『小明』,4691,1)

解釋:這樣我們新增主鍵就可以不用再管 可以高枕無憂了 只需 自增序列名+nextval 關鍵字即可 只需要改一下名字 和工資 money就行了

新增資料完成 查詢一下表的資料

首先是rownum 分頁

如果帶有排序 rownum是排序前的所以分頁就亂了

帶排序select a.* ,rownum from test a order by money

為了解決排序後行號亂了問題,先排序後去行號

第二個問題 取你想要的資料再mysql中可以 select * from test order by money limit 2,1 就取到了 第三條資料 但是再oracle中卻沒這麼簡單

第一步 我們要知道oracle的rownum可以 < 但是不可以直接 > 只能用 >0

如果我這樣寫:

select a.* , rownum from(select * from test order by money)a

where rownum>1 and rownum<=4

是沒結果的

為了解決這個問題,可以先獲取行號後再進行對比,注意要取別名 要取別名哦~

步驟: select * from test order by money 這是第一層

select a.* ,rownum as rn from(第一層)a 這是第二層

select * from(第二層)b where b.rn >2 這是第三層 已經可以用 > 號了

成品:select * from (

這就可以了 可以 用 > < 號了,那麼我們回到問題shan給 取到我們想要的某一條資料

既然可以 >< 了 那我們活學活用 直接定位我們所需要資料

這樣我們通過更改 >數字 and 《數字 就可以獲得我們想要的資料了 是不是很nice呢

留個課後作業: 查詢出大於3個人工資的其他人員 先自己寫寫 寫不出再看答案

– 查詢大於三個人工資的其他員工

select test.* from

(select * from (

select a.*,rownum as rn from(

select * from test order by money

)a)b

where b.rn>2 and b.rn<4)c,test

where test.money>c.money

order by test.money

Oracle中rownum的用法

1 查詢第幾行的記錄 select sal from emp where rownum 1 查詢得到第一行記錄 select sal from emp where rownum 5 不可以查詢到第五行記錄,因為 rownum 總是從1 開始查詢的,故這種方式不可以直接得到第幾行的記錄。若想得到第五行...

Oracle中rownum的用法

1 查詢第幾行的記錄 select sal from emp where rownum 1 查詢得到第一行記錄 select sal from emp where rownum 5 不可以查詢到第五行記錄,因為rownum 總是從1開始查詢的,故這種方式不可以直接得到第幾行的記錄。若想得到第五行記錄...

oracle中rownum的用法

對於 oracle 的 rownum 問題,很多資料都說不支援 between.and,只能用以上符號 並非說用 gt between.and 時會提示sql語法錯誤,而是經常是查不出一條記錄來,還會出現似乎是莫名其妙的結果來,其實您只要理解好了這個 rownum 偽列的意義就不應該感到驚奇,同樣是...