电竞比分网-中国电竞赛事及体育赛事平台

分享

Oracle中的基本分頁查詢 - 微醉星辰 - JavaEye技術(shù)網(wǎng)站

 ookkhh 2011-01-05

在Oracle中,分頁有兩種方式:rownum和row_number。

現(xiàn)有以下兩張表:

DEPT: DEPTNO,DNAME,LOC

EMP: EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO

 

rownum必須從1開始,記錄查詢出來之后又會(huì)從1開始,如:

Sql代碼
  1. --這樣做能成功獲得結(jié)果  
  2. select rownum,e.* from emp e where rownum<=3;  
  3. --這樣做時(shí)沒辦法獲得結(jié)果的  
  4. select rownum,e.* from emp e where rownum>=2 and rownum<=5;  
  5. --解決辦法是在子查詢中先生成行號(hào),如:  
  6. SELECT * FROM (SELECT ROWNUM r,e.* FROM emp e) a  
  7. WHERE r>=4 AND r<=6  

使用rownum不能直接排序的原因是rownum在order by 之前生成,所以必須先排序,如:

 

現(xiàn)需要查詢出第二頁記錄(按hiredate倒序,每頁顯示10條記錄)

1.使用rownum分頁:

Sql代碼
  1. SELECT b.* FROM (  
  2. SELECT ROWNUM r,a.* FROM (  
  3. SELECT * FROM emp ORDER BY hiredate DESC) a ) b  
  4. WHERE b.r>=11 AND b.r<=20  

2.使用row_number解析函數(shù)分頁:

Sql代碼
  1. SELECT b.* FROM (  
  2. SELECT row_number() over (ORDER BY hiredate DESC) r,x.* FROM emp x ) b  
  3. WHERE b.r>=11 AND b.r<=20  

在這里注意的是使用解析函數(shù)row_number的效率比使用rownum的效率高。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多