1、表的加法 UNION
- 会把重复的数据删除,只留一个
- 如果要保留重复行,在union后面加all
- 练习

2、表的联结
- 各表之间的关系,关系就是数据库能够对应的匹配,正式的名字叫联结
- 联结是将通过表表之间的关系,将两个表合并在一起
(1)交叉联结
- 是将表中的每一行与另一个表中的每一行合并在一起,交叉联结表中的行数是两个表中行数的乘积,交叉联结实际中用的较少,但是其他联结的基础。
(2)内联结 inner join
- 查找出同时存在于两个表中的数据
- 过程:①两个表通过学号进行内联结,将两个表中都有的学号所在的行取出来
②将两个表中取出的数据合并,交叉联结
- 练习

(3)左联结 left join
- 将左侧表中的数据全部取出来
- 过程:①两个表通过学号产生匹配关系,进行联结时将左侧表作为主表,主表中的数据全部读取出来,右边表中只选出与左边表中相同学号的行
②将两个表中取出的数据进行合并,进行交叉联结
- 练习

(4)右联结 right join
- 将右侧表中的数据全部取出来
- 过程:①两个表通过学号进行联结,将右侧表中的数据全部取出来,左边表只选出同右边表相同学号的行
②将取出的数据进行交叉联结
- 练习

(5)全联结 full join
- 返回左表和右表中的所有行,当某行和另一个表中有匹配时,两个行进行合并,没有匹配时,另一个表中对应的地方用空值填充。
- mysql不支持全连接
什么情况用哪一种联结:当实际工作业务中想要生成固定行数的表单,或者特别说明了要哪一张表里的全部数据时,使用左联结或者右联结,其他情况都用内联结来获取两个表的公共部分当有多个表进行联结时,是在from里加入联结,不会影响之前学过的SQL运行顺序。
3、联结应用案例
- 步骤:①翻译成大白话 ②写出分析思路 ③写出对应的SQL语句
- eg1:查询所有学生的学号、姓名、选课数、总成绩

- eg2:查询平均成绩大于85的所有学生的学号,姓名,平均成绩

- eg3:查询学生的选课情况,学号,姓名,课程号,课程名称

4、case表达式
- 可以帮助解决复杂的查询问题,case表达的作用相当于进行条件判断的函数,用来判断每一行是否满足某个条件
- eg1:在查询结果中显示成绩是否及格

eg2:查出每门课程的及格人数和不及格人数

5、 练习








注:求得是输入德国球门的队员,而不是德国射门的球员
主队是德国,或者客队是德国
德国与A队比赛,进球的是A对,那么goal.teamid=game.team2 and game.team1='GER'
A队与德国比赛,进球的是A队,那么goal.teamid=game.team1 and game.team2='GER'




