进阶7 分页查询!!!
目录
- 概述
- 练习题
概述
-
应用场景:当要显示的数据一页显示不全,需要分页提交SQL请求
-
语法:
select 查询列表
from 表名
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选条件
order by 排序字段 】
limit 【offset,】size;offset代表要显示条目的起始索引(起始索引从0开始) 注意SQL的索引是从1开始的
offset为可选参数,默认为0
size代表要显示的条目个数 -
特点:
- limit语句放在查询语句的最后,执行顺序也是最后
回顾执行顺序:
先执行from子句(包括多表连接)
再执行where子句,生成一张临时表
再执行group by子句,生成若干张临时表
再执行select子句,从若干张临时表得到一张临时表
再执行having子句,对临时表中的数据进行过滤
再执行order by子句
最后是limit子句 - 公式 【要显示的页数为page,每页的数目为size】
select 查询列表
from 表名
limit (page-1)*size,size;
- limit语句放在查询语句的最后,执行顺序也是最后
- 案例1:查询前五条员工信息
select * from employees limit 0,5; select * from employees limit 5;
- 案例2:查询第11条到第25条的信息
select * from employees limit 11,15;
- 案例3:对有奖金的员工,按照工资从高到低排序,显示前15条员工信息
select * from employees where commission_pct is not null order by salary desc limit 15;
练习题
已知表stuinfo
id 学号
name 姓名
email 邮箱 john@126.com
gradeId 年级编号
sex 性别 男 女
age 年龄
已知表grade
id 年级编号
gradeName 年级名称
#一、查询所有学员的邮箱的用户名(注:邮箱@前面的字符)
select substr(email,1,instr(email,'@')-1) '用户名' from stuinfo;
#二、查询男生和女生的个数
select sex,count(*) from stuinfo group by sex;
#三、查询年龄>18岁的所有学生的姓名和年级名称
select `name`,
(select gradeName from grade where id = s.gradeId)
from stuinfo s where age > 18;
#四、查询哪个年级的学生最小年龄>20
select gradeId,min(age) from stuinfo group by gradeId having min(age)>20;
试说出查询语句中涉及到的所有关键字,以及执行的先后顺序
select 查询列表 7
from 表名 1
【连接类型】 join 表2 2
on 连接条件 3
where 分组前的筛选条件 4
group by 分组字段 5
having 分组后的筛选条件 6
order by 排序字段 8
limit 【offset,】size; 9注:每一步都会生成虚拟表