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 每页显示记录数;
需求1:查询第一页前 5 行的记录
解析:第一页要展示 5 条数据,写个 5 就行了。
SQL 编写:
select * from tb_students limit 5;
查询结果如下:
limit 带二个参数
语法:limit 起始索引,每页显示记录数;
起始索引 = 起始索引 - 1
注意:所有的起始索引都是从 0 开始的。
需求 2:查询第一页 1 - 5 行的记录(跟需求 1 的题意是一样的,只是带的参数的个数不同)
解析:
limit 第一个参数(起始索引):
起始索引 = 起始索引 - 1 ,那就是 1 - 1 = 0;
limit 第二个参数(每页显示记录数):
显示 5 行记录,那就是 5。
SQL 编写:
select * from tb_students limit 0,5;
查询结果如下:
提示:如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 每页查询记录数,就比如需求 2 的 SQL 可以写成需求 1,可以直接简写成 limit 5。
需求3:查询第 7 行的记录,显示 2 行记录
解析:
limit 第一个参数(起始索引):
起始索引 = 起始索引 - 1 ,那就是 7 - 1 = 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 页的记录
第一页(不参与起始索引的计算)
SQL编写:
select * from tb_students limit 0,5;-- 显示 1 - 5 行记录
查询结果如下:
第二页
解析:
limit 第一个参数(起始索引):
根据公式:起始索引 =(查询页码 - 1)* 每页显示记录数
因为是查询第二页的数据,所以查询页码是 2,然后 2 还要去 - 1,得出:(2 - 1) = 0;
再 * 每页显示记录数,每页展示记录数为 5,得出最终结果: 0 * 5 = 5;
起始索引的值为 5。
limit 第二个参数(每页显示记录数):
根据需求得出:每页展示记录数为 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。
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 条记录,求 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 行记录
完。。。