oracle、mysql、sqlserver分页查询
程序员文章站
2022-05-17 22:17:42
...
分页查询这个内容基本上是个项目都会用的到的东西,面试也会问到的,
平常项目中老是百度用法,这些写博客来总结一下,省的老是百度。
现在主流的关系型数据的分页实现还是有点差别的,以oracle、mysql、server为例。
oracle分页
语法
SELECT * FROM
(
SELECT ROWNUM rn,name,tel,owner_id AS ownerId,DEL_FLAG AS status
FROM T_THIRD_PART
where ROWNUM <= pageSize *pageNum
) temp
where rn >= ((pageNum-1)*pageSize +1 )
数据采用是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各个版本的分页实现。