一、表的加法
union:将多个表的数据记录按行合并在一起(即多个表的并集),同时返回的结果会删除重复行,重复的记录只保留一行。如果需要保留重复行,可以使用union all


二、表的联结
1.交叉联结(cross join)
也叫笛卡儿积,指将表中的每一行和另外一个表的每一行合并在一起,返回的结果的行数等于两个表的行数的乘积,交叉联结是所有联结的基础。
2.内联结(inner join)
指查找同时存在于两张表的数据,即两个表的交集
3.左联结(left join)
指将左侧的表中的数据全部取出
4.右联结(right join)
指将右侧的表中的数据全部取出
5.全联结(full join)
指返回的是左表和右表中的所有行,如果没有匹配的行则会显示空值,MySQL不支持全联结
6.选择联结的方法
根据想要保留哪一部分数据来选择用哪一种联结,当需要生成固定行数的表单或者需要指定取出哪一张表中的全部数据的时候,使用left join或right join,其他情况则用inner join,另外,联结不会影响SQL运行顺序。

三、联结的应用案例
练习:



四、case表达式
1.case表达式用于多种情况的条件判断
case when 判断表达式 then 表达式
when 判断表达式 then 表达式
...
else 表达式
end
when子句的判断表达式用于判断某一行数据是否符合某个条件,若符合则返回then子句的表达式,若不符合则继续执行下一个when子句,如果所有的when子句都不符合,则返回else子句的表达式。
2.注意事项
①else子句可以省略不写,默认为else null,但不建议省略
②end不能省略
③case表达式可以书写在任意子句中
练习:


Group by 分组时,当用多个列来分组时,这几个列的值要全部相同才算一组,例如以上的课程号和课程名称要一一对应。
五、SQLzoo练习题












