分页查询
应用场景
当要现实的数据,一页显示不全,需要分页提交SQL请求
语法
SELECT 查询列表
FROM 表名
[JOIN TYPE JOIN 表2
ON 连接条件
WHERE 筛选条件
GROUP BY 分组字段
HAVING 分组后的筛选
ORDER BY 排序的字段]
LIMIT offset,size;
offset:要显示条目的起始索引(起始索引从0开始)
size: 要显示的条目个数
特点
1.limit语句放在查询语句的最后.
2.公式:
要显示的页数 page,每页的条目数 sieze
SELECT 查询列表
FROM 表
LIMIT (page-1)*size,size;
案例
案例1:查询前五条员工信息
SELECT *
FROM employees
LIMIT 0,5;
若从offset从第一条开始 也可写为
SELCET *
FROM employees
LIMIT 5;
案例2:查询第11条到第25条
SELECT *
FROM employees
LIMIT 10,15;
案例3:有奖金的员工信息,并且工资较高的前10名显示出来
SELECT *
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC
LIMIT 10;
测试题
题目:
已知表 stuinfo
id 学号
name 姓名
email 邮箱 john@126.com
gradeId 年级编号
sex 性别 男 女
age 年龄
已知表 grade
id 年级编号
gradeName 年纪名称
问题:
一 查询所有学员的邮箱的用户名
--------------------------------------------------------------------------------------
SELECT substr(email,1,instr(email,'@')-1) 用户名
FROM stuinfo
二 查询男生和女生的人数
----------------------------------------------------------------------------------------
SELECT COUNT(*) 个数,sex
FROM stuinfo
GROUP BY sex;
三 查询年龄>18 的所有学生的姓名和年纪名称
----------------------------------------------------------------------------------------
SELECT name,gradeName
FROM stuinfo
INNER JOIN grade g
ON s.gradeId = g.id
WHERE age>18;
四 查询那个年级的学生最小年龄>20
----------------------------------------------------------------------------------------
#① 每个年级的最小年纪
SELECT MIN(age),gradeId
FROM stuinfo
GROUP BY gradeId
#② 在①的结果中筛选
SELECT MIN(age),gradeId
FROM stuinfo
GROUP BY gradeId
HAVING MIN(age) > 20;
----------------------------------------------------------------------------------------