Oracle提供了rownum,rownum是一個(gè)隱含的(查詢結(jié)果集)字段,rownum是一個(gè)行號(hào),從1開(kāi)始。
select rownum, a.* from emp a;

select * from emp where rownum <=5;

select * from emp where rownum >5;
以上語(yǔ)句,oracle不支持,oracle只支持rownum小于或小于等于的運(yùn)算, 不支持大于或大于等于的運(yùn)算。
select rownum, empno, ename, sal from emp where rownum<=5 order by sal desc;

上面的結(jié)果不正確,因?yàn)椴捎胦rder by不會(huì)改變r(jià)ownum,rownum的值在數(shù)據(jù)插入到表中時(shí)已經(jīng)形成,正確使用的方式,將排序好的數(shù)據(jù)作為一張表來(lái)使用,這樣這個(gè)表的rownum是新形成的,所以可以保證它的順序是正確的,如下:
select empno, ename, sal
from (select empno, ename, sal from emp order by sal desc)
where rownum <=5

分頁(yè)主要是為了提高效率,一般采用數(shù)據(jù)庫(kù)的機(jī)制比較多,主要從數(shù)據(jù)庫(kù)表中定位記錄的開(kāi)始位置和結(jié)束位置,如每頁(yè)兩條數(shù)據(jù):
第一頁(yè):記錄1~2
第二頁(yè):記錄3~4
。。。。。。。
因?yàn)閞ownum存在問(wèn)題,所以需要采用三層的select嵌套完成分頁(yè),嵌套的目的將rownum轉(zhuǎn)換成我們自己的字段,如:
select empno, ename, sal
from
(
select rownum r, empno, ename, sal
from
(
select empno, ename, sal from emp order by sal desc
)
where rownum <=5
)where r>0
通用的分頁(yè)方法,使用的時(shí)候可以直接拷貝。只需要修改紅色字體的部分就可以了。
select *
from
(
select rownum r, t.*
from
(
任意的SQL語(yǔ)句
) t
where rownum <=結(jié)尾的行號(hào)
)where r>開(kāi)始的行號(hào)
