分页查询这个内容基本上是个项目都会用的到的东西,面试也会问到的,
平常项目中老是百度用法,这些写博客来总结一下,省的老是百度。
现在主流的关系型数据的分页实现还是有点差别的,以oracle、mysql、server为例。
数据采用是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条的数据:
mysql分页查询最简单,它使用的是limit关键字。关键字之后需要两个参数m,n,最终mysql语句的样式:
查询第1页,每页显示10条数据
查询第2页,每页显示10条数据
查询第三页,每页显示10条数据
通过以上的查询总结出公式:
sqlserver分页查询实现的关键字是top,项目中也没有用到过,看到网上有一篇博客记录SQLserver各个版本的分页实现。
https://www.cnblogs.com/ebread/p/SQLServer.html
原文:https://www.cnblogs.com/lqhhome/p/10913216.html