MySQL 中 limit 分页的使用

SQL准备

create table tb_students (
    id int auto_increment primary key comment '主键ID',
    studentid char(9) unique not null comment '学生学号',
    name varchar(10) not null comment '学生姓名',
    gender char(1) not null comment '学生性别'
) comment '学生表';

insert into tb_students (studentid , name , gender)
values  ('202302301' , '海绵宝宝' , '男'),
        ('202302302' , '胡图图' , '男'),
        ('202302303' , '小福贵' , '男'),
        ('202302304' , '大头儿子' , '男'),
        ('202302305' , '三毛' , '男' ),
        ('202302306' , '柯南' , '男'),
        ('202302307' , '凌美琪' , '女'),
        ('202302308' , '凌美雪' , '女'),
        ('202302309' , '孙悟空' , '男'),
        ('202302310' , '猪八戒' , '男'),

        ('202302311' , '沙和尚' , '男'),
        ('202302312' , '唐僧' , '男'),
        ('202302313' , '林黛玉' , '女'),
        ('202302314' , '贾宝玉' , '男'),
        ('202302315' , '奥特曼' , '男'),
        ('202302316' , '汤姆' , '男'),
        ('202302317' , '杰瑞' , '男'),
        ('202302318' , '朵拉' , '女'),
        ('202302319' , '一休' , '男'),
        ('202302320' , '米老鼠' , '男'),

        ('202302321' , '唐老鸭' , '男'),
        ('202302322' , '哆啦A梦' , '男'),
        ('202302323' , '成龙' , '男'),
        ('202302324' , '小玉' , '女'),
        ('202302325' , '加菲猫' , '男'),
        ('202302326' , '喜羊羊' , '男'),
        ('202302327' , '灰太狼' , '男'),
        ('202302328' , '虹猫' , '男'),
        ('202302329' , '蓝兔' , '女'),
        ('202302330' , '洛洛' , '男');

这里面有你们喜欢的角色吗❓❓❓

没错,我也喜

 

按照我的理解,我把他分为这两部分来进行讲解

目录

第一部分:查询指定分页语句

①limit 带一个参数

②limit 带二个参数

第二部分:查询固定分页语句

第①页

第②页

第③页


第一部分:查询指定分页语句

①limit 带一个参数

语法:limit 每页显示记录数;

注意:这种写法只在只查询第一页数据的时候使用。

案例讲解

需求1:查询第一页前 5 行的记录;

解析:查询第一页的记录,并且展示 5 条数据,直接写个 5 就可以啦

SQL 编写:

select * from tb_students limit 5;

查询结果如下:

注:也可以带两个参数,写成 limit 0,5,跟 limit 5 效果是一样的;这两种方式都可以用;

②limit 带二个参数

语法:limit 起始索引,每页显示记录数;

计算起始索引公式:

起始索引 = 起始索引 - 1

注意:起始索引都是从 0 开始的(但不包括 0)。

案例讲解

需求:查询第 7 行的记录,显示 2 行记录;

解析:

limit 第一个参数(起始索引):

套用计算起始索引公式:起始索引 = 起始索引 - 1 ;

首先我要查询的是第 7 行的记录,那我的起始索引就是 7,那就是 7 - 1 = 6,最终我的起始索引为:6

limit 第二个参数(每页显示记录数):

该页我要显示 2 行记录,最终我的每页显示记录数为:2

SQL 编写:

select * from tb_students limit 6, 2;

查询结果如下:

另一种写法:

语法:limit 每页显示记录数 offset 起始索引;

计算起始索引公式:

起始索引 = 起始索引 - 1

用法和带两个参数的 limit 一样;只有语法上的区别:起始索引 和 每页显示记录数 顺序调换了,“,” 号换成了 offset。

SQL 编写:

select * from tb_students limit 2 offset 6;

得到同样的执行结果:

第二部分:查询固定分页语句

语法:limit 起始索引,每页显示记录数;

计算起始索引公式:

起始索引 = (查询页码 - 1)* 每页显示记录数

案例讲解

需求:固定每页展示 5 条记录,求 1 - 3 页的记录;


第①页

解析:

limit 第一个参数(起始索引):

套用计算起始索引公式:起始索引 = (查询页码 - 1)* 每页显示记录数

因为是查询第一页的数据,所以查询页码是 1,然后 1 还要去 - 1,得出:(1 - 1) = 0

再 * 每页显示记录数,每页要显示 5 条的记录,得出: 0 * 5 = 0,最终我的起始索引为:0

limit 第二个参数(每页显示记录数):

该页我要显示 5 行记录,最终我的每页显示记录数为:5

SQL编写:

select * from tb_students limit 0,5;-- 显示 1 - 5 行记录

查询结果如下: 


第②页

解析:

limit 第一个参数(起始索引):

套用计算起始索引公式:起始索引 = (查询页码 - 1)* 每页显示记录数

因为是查询第一页的数据,所以查询页码是 2,然后 2 还要去 - 1,得出:(2 - 1) = 1

再 * 每页显示记录数,每页要显示 5 条的记录,得出: 1 * 5 = 0,最终我的起始索引为:5

limit 第二个参数(每页显示记录数):

该页我要显示 5 行记录,最终我的每页显示记录数为:5

SQL编写:

select * from tb_students limit 5,5;-- 显示 6 - 10 行记录

查询结果如下:  


第③页

解析:

limit 第一个参数(起始索引):

套用计算起始索引公式:起始索引 = (查询页码 - 1)* 每页显示记录数

因为是查询第一页的数据,所以查询页码是 3,然后 3 还要去 - 1,得出:(3 - 1) = 2

再 * 每页显示记录数,每页要显示 5 条的记录,得出: 2 * 5 = 10,最终我的起始索引为:10

limit 第二个参数(每页显示记录数):

该页我要显示 5 行记录,最终我的每页显示记录数为:5

SQL编写:

select * from tb_students limit 10,5;-- 显示 11 - 15 行记录

查询结果如下:   

完整SQL:

select * from tb_students limit 0,5;-- 显示 1 - 5 行记录
select * from tb_students limit 5,5;-- 显示 6 - 10 行记录
select * from tb_students limit 10,5;-- 显示 11 - 15 行记录

如果要查询第四页、第五页、第六页......的数据,按照这个公式,以此类推。。。

如果学会了,来做一下练习吧!!!

 需求:固定每页展示 10 条记录,求 1 - 3 页的记录;

select * from tb_students limit ?;
select * from tb_students limit ?;
select * from tb_students limit ?;

做完看答案:

select * from tb_students limit 0,10;-- 显示 1 - 10 行记录
select * from tb_students limit 10,10;-- 显示 11 - 20 行记录
select * from tb_students limit 20,10;-- 显示 20 - 30 行记录

完。。。

猜你喜欢

转载自blog.csdn.net/weixin_62332711/article/details/128653228