Oracle數(shù)據(jù)庫rownum和row_number的不同點(diǎn)
明確對于rownum 來說它是oracle系統(tǒng)順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是二,以此類推,這個(gè)為字段可以用于限制查詢的返回的總行數(shù),因?yàn)閞ownum總是從1開始,但是1以上的自然數(shù)在rownum 做等于判斷時(shí)都認(rèn)為是false 條件,所以無法查到 rownum=n (n》1的自然數(shù)),所以查找第二行以后的記錄可以用子查詢方法來解決,給子查詢中的rownum取別名;對于小于某個(gè)值的情況兩種方法都差不多,但是對于某個(gè)不等于一的值或者求某個(gè)值到某個(gè)值之間的情況,用row_number() 別名獲得排名 ,比用rownum偽列要簡單方便的多;因?yàn)閭瘟锌偸菑囊婚_始查找;
具體用法和區(qū)別參見以下代碼;
--取出工資最高的前5位
select empno,ename,sal,rownum from emp; select * from (select * from emp order by sal desc) where rownum<=5; select * from (select ename,sal,row_number() over(order by sal desc) as num from emp) where num<=5; select * from (select ename,sal,row_number() over(order by sal desc) from emp) where rownum<=5
--工資的前3名
select * from emp where sal >=any(select * from (select sal from emp order by sal desc) where rownum<=3); select * from(select * from emp order by sal desc) where rownum <4; select * from (select ename,sal,empno,deptno ,row_number() over (order by sal desc) from emp) where rownum<4; select * from (select ename,sal,empno,deptno ,row_number() over (order by sal desc) as num from emp) where num<4
--按照工資排序,取出第6名到第10名
--使用偽列獲得
select * from (select ename,sal,rownum r from (select * from emp order by sal desc) where rownum<=10) where r>5;
--使用排名函數(shù)獲得
select * from (select ename,sal,row_number() over(order by sal desc) as num from emp) where num>5 and num<=10;
------- 按工資從高到低獲得工資排名第四的員工
select * from (select ename,sal,row_number() over(order by sal desc) as num from emp) where num=4; select * from (select ename,sal,rownum r from (select * from emp order by sal desc) where rownum<=4) where r=4;
總結(jié)oracle中rownum和row_number()的區(qū)別
row_number()是分析函數(shù),基本語法為row_number() over(partition by 字段 order by 字段)
rownum是一個(gè)偽列
select * from dept where rownum<=3; select * from dept where rownum between 2 and 3;這兒會出錯(cuò),因?yàn)閞ownum的特性(沒有1就不會有2,沒有3)決定的 SELECT * FROM (SELECT A.*,ROWNUN FROM DEPT A)T1 WHERE T1.ROWNUM BETWEEN 2 AND 3;這么寫不對,要這樣寫 SELECT * FROM (SELECT A.*,ROWNUM RN FROM DEPT A)T1 WHERE T1.RN BETWEEN 2 AND 3;
他們的主要區(qū)別是:使用rownum進(jìn)行排序的時(shí)候是先對結(jié)果集加入偽列rownum然后再進(jìn)行排序,而函數(shù)row_number()在包含排序從句后是先排序再計(jì)算行號碼。
- oracle關(guān)聯(lián)查詢報(bào)invalid number錯(cuò)誤的解決方法
- Oracle 中 row_number()、rank()、dense_rank() 函數(shù)的用法詳解
- Oracle中ROW_NUMBER()OVER()函數(shù)用法實(shí)例講解
- Oracle數(shù)字類型number自增的實(shí)現(xiàn)代碼
- oracle中rownum和row_number()
- Oracle Number型數(shù)值存儲與轉(zhuǎn)換的實(shí)現(xiàn)詳解
- Oracle Number型的深入理解
- Oracle中TO_NUMBER()函數(shù)的使用
相關(guān)文章
LINUX下Oracle數(shù)據(jù)導(dǎo)入導(dǎo)出的方法詳解
這篇文章主要介紹了LINUX下Oracle數(shù)據(jù)導(dǎo)入導(dǎo)出的方法,較為詳細(xì)的分析導(dǎo)出工具exp及導(dǎo)入工具imp的具體使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12
oracle ORA-01114、ORA-27067錯(cuò)誤解決方法
本文章總結(jié)了關(guān)于ORA-01114、ORA-27067錯(cuò)誤解決方法,有需要學(xué)習(xí)的朋友可參考一下下哦2012-10-10
Oracle數(shù)據(jù)庫中通用的函數(shù)實(shí)例詳解
OracleSQL提供了用于執(zhí)行特定操作的專用函數(shù),這些函數(shù)大大增強(qiáng)了SQL語言的功能,下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫中通用函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-03-03
oracle+mybatis 使用動(dòng)態(tài)Sql當(dāng)插入字段不確定的情況下實(shí)現(xiàn)批量insert
最近接了一個(gè)項(xiàng)目,其中項(xiàng)目需求,有一個(gè)非常糾結(jié)的問題,由于業(yè)務(wù)的關(guān)系,DB的數(shù)據(jù)表無法確定,在使用過程中字段可能會增加,這樣在insert時(shí)給我造成了很大的困擾。接下來,通過本篇文章給大家介紹oracle+mybatis 使用動(dòng)態(tài)Sql當(dāng)插入字段不確定的情況下實(shí)現(xiàn)批量insert2015-11-11
Windows server 2008 R2(win7)登陸sqlplus錯(cuò)誤ORA-12560和ORA-12557的解
這篇文章主要為大家詳細(xì)介紹了Windows server 2008 R2(win7)登陸sqlplus錯(cuò)誤ORA-12560和ORA-12557的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05

