分頁查詢這個內容基本上是個項目都會用的到的東西,面試也會問到的,
平常項目中老是百度用法,這些寫博客來總結一下,省的老是百度。
現在主流的關系型數據的分頁實現還是有點差別的,以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各個版本的分頁實現。