在Oracle中有一個方法rownum用來查詢第一行到第n行的內(nèi)容,但沒有一個合適的方法若查詢第x行到第y行的內(nèi)容,而在實際應(yīng)用中卻經(jīng)常需要查詢第x行到第y行的內(nèi)容,這時我們就需要使用rownum和子表查詢等內(nèi)容來進行查詢,因為這一塊內(nèi)容屬于Oracle總的常用部分所以專門在此介紹。
rownum
在Oralce中有一個偽列rownum,其在創(chuàng)建表的時候就存在了卻不顯示,若要使用這個列可以直接調(diào)用即可,也可以對這個列添加別名來調(diào)用。
rownum只能用于顯示小于某行的數(shù)據(jù)即第一行開始到你要查詢到的那一行為止的數(shù)據(jù)。
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.選擇所有內(nèi)容
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;

在某些時候我們需要先對表的內(nèi)容進行排序,隨后查詢第x行到第y行的內(nèi)容,這個時候有一個需要注意的點是rownum是在表產(chǎn)生的時候產(chǎn)生的偽列,所以使用排序會連著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;,在內(nèi)表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的員工信息。
