在Oracle中有一個方法rownum用來查詢第一行到第n行的內容危彩,但沒有一個合適的方法若查詢第x行到第y行的內容唧躲,而在實際應用中卻經常需要查詢第x行到第y行的內容许起,這時我們就需要使用rownum和子表查詢等內容來進行查詢岗宣,因為這一塊內容屬于Oracle總的常用部分所以專門在此介紹满俗。
rownum
在Oralce中有一個偽列rownum转捕,其在創(chuàng)建表的時候就存在了卻不顯示,若要使用這個列可以直接調用即可唆垃,也可以對這個列添加別名來調用五芝。
rownum只能用于顯示小于某行的數據即第一行開始到你要查詢到的那一行為止的數據。
rownum對于小于某值的查詢條件
select * from emp where rownum<=3; 查詢emp前三行記錄
rownum對于等于某個值得查詢條件
select * from emp where rownum=1; 顯示第一行記錄
分頁
在Oracle把查詢第幾行到第幾行的操作稱為分頁降盹,其具體操作是通過子查詢等操作完成与柑。
select 列名 from (select 表名.*,rownum rn from 表名)表名 ?where rn操作;
思考如下:
1.選擇所有內容
select * from emp;
2.顯示rownum
select e.*,rownum rn from(select * from emp)e;
這一步可以精簡為下面形式,但某些情況只能用上面那種
select emp.*,rownum rn from emp;
3.查詢
select * from(select e.*,rownum rn from (select * from emp)e);
4.其他變化
select * from (select emp.*,rownum rn from emp)emp where rn=3;
查詢第三行的信息
select * from(select e.*,rownum rn from (select * from emp)e where rownum<=10) where rn>2;
查詢第三到第十行信息蓄坏。上面的也可以精簡為
select * from(select emp.*,rownum rn from emp) where rn>2 and rn<=10;
在某些時候我們需要先對表的內容進行排序价捧,隨后查詢第x行到第y行的內容,這個時候有一個需要注意的點是rownum是在表產生的時候產生的偽列涡戳,所以使用排序會連著rownum的值進行排序结蟋,從而達不到想要的效果。
select rownum,sal from emp order by sal;
為了解決上述這個問題渔彰,我們需要使用子表查詢即先排好序嵌屎,再在新表之中顯示rownum來規(guī)避這個問題。
select rownum,sal.* from (select sal from emp order by sal)sal;
考慮到排序的問題恍涂,所以在上方第二步的時候使用第一種方法即select e.*,rownum rn from(select * from emp)e;宝惰,在內表select * from emp中進行排序可以完成在亂序中找到第x行到第y行的效果。
select * from(select e.*,rownum rn from(select * from emp order by sal)e)where rn>=3 and rn<=8;
輸出emp表薪資排名3到8的員工信息再沧。