#进阶8 分页查询 ⭐(重要)
/*
应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
select 查询列表
from 表1
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit 【offset,】size;
offset:要显示的起始索引(起始索引从 0 开始)
size:要显示的条目个数
特点:
① limit 语句放在查询语句的最后
② 公式
要显示的也是 page,每页的条目数 size
select * 查询列表
from 表
limit (page-1)*size,size;
size = 10
page
1 0
2 10
3 20
*/
#案例1:查询前5条员工信息
SELECT * FROM employees LIMIT 0,5;
SELECT * 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 年级名称
#例题1:查询 所有学员的邮箱的用户名(注:邮箱 @ 前面的字符)
SELECT SUBSTR(email,i,INSTR(email,'@')-1) 用户名
FROM stuinfo;
#例题2:查询男生和女生的个数
SELECT COUNT(*) 个数,sex
FROM stuinfo
GROUP BY sex;
#例题3:查询年龄 > 18 岁的所有学生的姓名和年纪名称
SELECT NAME,gradeName
FROM stuinfo s
INNER JOIN grade g
ON g.id = s.gradeId
WHERE age > 18;
#例题4:查询那个年级的最小年龄 > 20 岁
# ① 每个年级的最小年龄
SELECT MIN(age),gradeId
FROM stuinfo
GROUP BY gradeId
# ② 在①的结果上筛选
SELECT MIN(age),gradeId
FROM stuinfo
GROUP BY gradeId
HAVING MIN(age) > 20;
#例题5:试说出查询语句中涉及到的所有的关键字,以及执行先后顺序
SELECT 查询列表 ⑦
FROM 表1 ①
连接类型 JOIN 表2 ②
ON 连接条件 ③
WHERE 筛选条件 ④
GROUP BY 分组列表 ⑤
HAVING 分组后的筛选 ⑥
ORDER BY 排序列表 ⑧
LIMIT 偏移,条目数; ⑨
#四、sql99语法
#1.内连接
#语法:
SELECT 查询列表
FROM 表1 别名
【inner】 JOIN 表2 别名 ON 连接条件
WHERE 筛选条件
GROUP BY 分组列表
HAVING 分组后的筛选
ORDER BY 排序列表
LIMIT 子句;
#特点:
# ① 表的顺序可以调换
# ② 内连接的结果=多表的交集
# ③ n 表连接至少需要 n-1 个连接条件
#分类:
等值连接
非等值连接
自连接
#2.外连接
#语法:
SELECT 查询列表
FROM 表1 别名
LEFT|RIGHT|full【outer】 JOIN 表2 别名 ON 连接条件
WHERE 筛选条件
GROUP BY 分组列表
HAVING 分组后的筛选
ORDER BY 排序列表
LIMIT 子句;
#特点:
# ① 查询的结果 = 主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null
# ② left join 左边的就是主表,right join 右边的就是主表,full join 两边都是主表
# ③ 一般用于查询除了交集部分的剩余的不匹配的行
#3.交叉连接
#语法:
SELECT 查询列表
FROM 表1 别名
CROSS JOIN 表2 别名;
#特点:类似于笛卡尔乘积