欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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、mysql、sqlserver分页查询

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;

结果:

oracle、mysql、sqlserver分页查询

示例二

查询第二页数据,每页显示三条数据

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;

结果:

oracle、mysql、sqlserver分页查询

示例三

查询第三页数据,每页显示三条数据

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语句的样式:

oracle、mysql、sqlserver分页查询

  • --m的含义表示从数据的第m条开始查询(mysql中第一条数据m=0)
  • --n的含义是从第m条数据开始往后查询n条数据

查询第1页,每页显示10条数据

oracle、mysql、sqlserver分页查询

 

查询第2页,每页显示10条数据

oracle、mysql、sqlserver分页查询

查询第三页,每页显示10条数据

oracle、mysql、sqlserver分页查询

总结

通过以上的查询总结出公式:

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

sqlserver分页查询

sqlserver分页查询实现的关键字是top,项目中也没有用到过,看到网上有一篇博客记录SQLserver各个版本的分页实现。

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