sql查詢(三)之分頁查詢


分頁查詢這個內容基本上是個項目都會用的到的東西,面試也會問到的,

平常項目中老是百度用法,這些寫博客來總結一下,省的老是百度。

現在主流的關系型數據的分頁實現還是有點差別的,以oracle、mysql、server為例。

oracle分頁

數據采用是oracle安裝時勾選的事例表,有emp,dept、SALGRADE等數據表。

emp數據表的內容

oracle實現分頁的方式是行號ROWNUM+FROM子查詢,要實現分頁需要知道兩個參數:

currentPage   表示當前頁

linesize  表示顯示的數據量

 示例一

查詢第一頁數據,每頁顯示三條數據

currentPage=1  linesize =3:從數據表中取出1~3條數據

SELECT * FROM (SELECT ROWNUM rn,EMPNO,ENAME,JOB,SAL,HIREDATE,MGR,COMM,DEPTNO
FROM EMP WHERE ROWNUM<=3) temp
WHERE temp.rn>=1;

結果:

示例二

查詢第二頁數據,每頁顯示三條數據

currentPage=7  linesize =9:從數據表中取出7~9條數據

SELECT * FROM (SELECT ROWNUM rn,EMPNO,ENAME,JOB,SAL,HIREDATE,MGR,COMM,DEPTNO
FROM EMP WHERE ROWNUM<=6) temp
WHERE temp.rn>=4;

結果:

示例三

查詢第三頁數據,每頁顯示三條數據

currentPage=1  linesize =3:從數據表中取出1~3條數據

SELECT * FROM (SELECT ROWNUM rn,EMPNO,ENAME,JOB,SAL,HIREDATE,MGR,COMM,DEPTNO
FROM EMP WHERE ROWNUM<=9) temp
WHERE temp.rn>=7;

結果:

7    7698    BLAKE    MANAGER    2850    1981-05-01 00:00:00    7839        30
8    7782    CLARK    MANAGER    2450    1981-06-09 00:00:00    7839        10
9    7788    SCOTT    ANALYST    3000    1987-04-19 00:00:00    7566        20

總結

通過以上的三個demo我們可以總結出:知道當前頁為currentPage,顯示的數據量linesize,

就可以計算出要從數據庫第m條到第n條的數據:

  • m=(currentPage-1)*linesize+1
  • n=currentPage*linesize

 

 

mysql分頁

mysql分頁查詢最簡單,它使用的是limit關鍵字。關鍵字之后需要兩個參數m,n,最終mysql語句的樣式:

  • --m的含義表示從數據的第m條開始查詢(mysql中第一條數據m=0)
  • --n的含義是從第m條數據開始往后查詢n條數據

查詢第1頁,每頁顯示10條數據

 

查詢第2頁,每頁顯示10條數據

查詢第三頁,每頁顯示10條數據

總結

通過以上的查詢總結出公式:

  • --m=(currentPage-1)*linesize
  • --n=linesize

sqlserver分頁查詢

sqlserver分頁查詢實現的關鍵字是top,項目中也沒有用到過,看到網上有一篇博客記錄SQLserver各個版本的分頁實現。

https://www.cnblogs.com/ebread/p/SQLServer.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM