首先我們需要了解一些基本的概念.
在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 偽列的意義就不應該感到驚奇,同樣是...