一、表的加法
- 两张表相加,去掉重复项:union
- 两张表相加,保留重复项:union all
- 随堂练习:
二、表的联结
1、有哪几种联结方式:
Cross join :表中的每一行都与另一张表中的每一行合并在一起(行数为:两张表的乘积),
不常用,但它是其他联结的基础
Inner join:查找出同时存在两张表中的数据
运算原理:
随堂练习:
Left join :将左侧的表格内容全部提取出来
运行原理:
随堂练习:
在left join 的基础上,只取左表内容,但是去掉共同的部分,:
随堂练习:
Right join :取出右边表格的全部数据
运行原理:
随堂练习:
在right join 的基础上,只取右表内容,但是去掉共同的部分:
随堂练习:
Full join :取左右表的所有行(没有匹配值的时候,用空值来填充,但是my sql 不支持全连接)
总结:
三、联结应用案例
1、随堂练习:
思路
问题:暂时没搞明白:
随堂练习2:
随堂练习3:
注:老师用的是inner join ,自己用left join 试写,也是ok,
【问】发现有时候left join和inner join运行的结果一样,是不是就都可以,以运行结果为准?还是应该严格区分?
【答】只是恰好结果一样,比如“学生表”和“成绩表联结。
如果所有学生都选课了,那么left join和inner join结果是一样的。
如果一部分学生没选课,那么eft join和inner join就不一样。
所以,选择哪种联结,不是看查询结果。而是在一开始要根据你想要保留哪部分数据来选择用哪种联结,然后才是写SQL。
四、CASE表达式:
案例1:
案例2:
第一步:先写出每门课程人数:
第二步:在细化成case函数
运算步骤如下:
随堂练习:
注意事项:
- else 可以不写,但尽量写上
- end 一定要写
- case函数不一定用在select后面,可以用在任何地方。
案例3:
随堂练习:
Group by 后当用几个列来分组时,这几个列的值全部相同才算一组。