• SQL分页查询


    一、分页查询的原理
    分页查询是指在查询结果过多时,将查询结果分成多页返回,并允许用户通过翻页来查看完整数据的一种查询方式。

    分页查询通常包括两个参数:pageIndex和pageSize,其中pageIndex表示当前页数,pageSize表示每页显示的数据行数,通过这两个参数计算得出的offset和limit参数来实现分页查询。

    具体来说,假如我们要查询第3页,每页展示10条数据,那么我们可以通过以下公式计算出需要的offset和limit

    offset = (pageIndex - 1) * pageSize = (3 - 1) * 10 = 20
    limit = pageSize = 10

    这样,我们就可以在查询时使用offset和limit参数来实现分页查询了。

    二、分页查询的实现方法
    下面介绍三种主要的分页查询实现方法:

    1. 使用子查询进行分页
    SELECT *
    FROM (
      SELECT *, ROW_NUMBER() OVER (ORDER BY column1) AS RowNum
      FROM table
    ) sub
    WHERE sub.RowNum BETWEEN 21 AND 30
    该方法使用了子查询来实现分页功能,内部的子查询使用ROW_NUMBER()函数对查询结果进行排序,并对每行赋值一个行号(RowNum),然后在外部查询中使用WHERE子句对行号进行筛选,从而实现了分页查询。

    2. 使用LIMIT和OFFSET关键字
    SELECT *
    FROM table
    ORDER BY column1
    LIMIT 10 OFFSET 20
    该方法使用了MySQL中的LIMIT和OFFSET关键字实现分页查询,其中LIMIT指定每页显示的数据量,OFFSET指定当前页的偏移量,通过不断调整OFFSET关键字的值来实现分页查询。
    需要注意的是,不同的数据库实现此方法的方式可能不同,例如Oracle使用的是ROWNUM而不是OFFSET。

    (1)limit使用一个参数的情况

    如果"limit 10";则表示将表中的前10条数据查询出来,检索前10行数据

    (2)limit使用两个参数的情况

    第一个参数 offset 表示跳过前面多少行后开始取数据,第二个参数表示最多返回多少行的数据。默认 offset 为 0(不是 1)。"limit 0,2";表示从第1行数据开始,取2条数据。可以简单理解为第一个参数表示从第几行数据开始查,第二个参数表示查几条数据。

    (3)区别

    一个参数时,参数值为多少就查询表中前多少条数据

    两个参数时,因为limit默认下标从0开始,第一个参数是下标,查数据的话是从第一条查,第二个参数限定了几条数据。

    3. 使用TOP和OFFSET FETCH关键字
    SELECT *
    FROM table
    ORDER BY column1
    OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY
    该方法是SQL2012引入的新特性,使用了OFFSET和FETCH关键字来实现分页查询,其中OFFSET和FETCH的参数含义和2中方法中的OFFSET和LIMIT相同。

    使用该方法需要注意的是,不同数据库厂商的实现方式可能不同,例如MySQL就不支持该方法。

    三、常见的分页查询方式
    常用的分页查询方式有两种:前端分页和后端分页。其中前端分页是在前端处理数据,后端分页是在后端处理数据。

    前端分页:将所有查询结果都返回前端,由前端控制分页展示。优点是简单易用,缺点是如果数据量过大,会占用大量客户端资源,影响性能。

    后端分页:将查询结果分页返回给前端,由后端控制分页展示。优点是减轻了前端的负担,性能更加稳定,缺点是需要对每次分页做额外的查询操作,增加了服务器负担。

    四、示例说明

    我们使用以下SQL语句查询表中所有数据并按照id字段升序排序:

    SELECT * FROM `table_name` ORDER BY `id` ASC;
    此时查询结果可能过大,我们需要进行分页查询,假设每页展现10条数据,则可以使用以下SQL语句:

    SELECT * FROM `table_name` ORDER BY `id` ASC LIMIT 0, 10; -- 第一页
    SELECT * FROM `table_name` ORDER BY `id` ASC LIMIT 10, 10; -- 第二页
    SELECT * FROM `table_name` ORDER BY `id` ASC LIMIT 20, 10; -- 第三页
    通过不同的LIMIT参数可以实现分页查询。

    注意事项
    使用分页查询时需要注意以下几点:

    分页查询对数据库压力较大,需要合理使用。
    在进行分页查询时,需要根据实际需求决定每页展示的数据数量,避免每页数据过多而导致性能问题。
    分页查询时应该合理选择实现方式,根据实际情况选择前端分页或后端分页。
    在使用LIMIT关键字时,不同的数据库可能实现方式不同,需要根据具体情况进行调整。
    如果需要进行高效的分页查询操作,建议对数据库表格进行适当的优化操作,例如添加索引等。

  • 相关阅读:
    使用requests库进行网络爬虫:IP请求错误的解决方法
    [项目管理-12]:项目经理的困惑:项目管理的常见难题及解决对策
    jsp 技术
    基于LADRC自抗扰控制的VSG三相逆变器预同步并网控制策略(Simulink仿真实现)
    【已解决】vscode 配置C51和MDK环境配置
    matplotlib从起点出发(8)_Tutorial_8_Legend
    cppcheck新手指引
    【vue】this.$nextTick解决this.$refs undefined的问题
    从私服上拉取jar包,就是拉取不下来
    Coursera耶鲁大学金融课程:Financial Markets 笔记Week 01
  • 原文地址:https://blog.csdn.net/m0_62508027/article/details/134324294