一、表的加法(Union)
1、用法:将两个表合并成一个表
![b299cdadfdec3fda624ba211df22fcd1.png](https://img-blog.csdnimg.cn/img_convert/b299cdadfdec3fda624ba211df22fcd1.png)
2、语句:
select
*需保留重复行*
select 查询结果
from 从哪张表查询
union all
select 查询结果
from 从哪张表查询
练习:
将课程表及课程表1合并在一起
课程表1:
![1dd4140cf5c4a6a767a6a9fef7c25111.png](https://img-blog.csdnimg.cn/img_convert/1dd4140cf5c4a6a767a6a9fef7c25111.png)
课程表2:
![27ba4b0014ac38ede67f84e5be8014f4.png](https://img-blog.csdnimg.cn/img_convert/27ba4b0014ac38ede67f84e5be8014f4.png)
合并结果:
1)不保留重复行
![a510f090a71f8d9284c747122f3e84c1.png](https://img-blog.csdnimg.cn/img_convert/a510f090a71f8d9284c747122f3e84c1.png)
2)保留重复行
![c0d0c459be43e76d4d663bb8cdcd0760.png](https://img-blog.csdnimg.cn/img_convert/c0d0c459be43e76d4d663bb8cdcd0760.png)
二、表的联结
联结:表和表之间是通过列产生关系,联结就是通过表和表之间关系将两个表合并在一起的操作。
表的联结分为:交叉联结(cross join)、内联结(inner join)、左联结(left join)、右联结(right join)、全联结(full join);内联结、左联结、右联结这3种是较常用的联结方法。
1、交叉联结(cross join)
将表的每一行与另一个表的每一行联结在一起,行数是两个表行数的乘积;不常用,结果行数太多。
2、内联结(inner join)
查找出同时存在于两张表的数据。
语句:
select....
from 表1 as a
inner join 表2 as b
on a.列名=b.列名;
![1926f458259132d5aa4faae431289a25.png](https://img-blog.csdnimg.cn/img_convert/1926f458259132d5aa4faae431289a25.png)
3、左联结(left join)
将左侧的表作为主表,主表中的数据全部读取出来,右边的表只选取与主表有相同列的表。
语句:
select....
from 表1 as a
left join 表2 as b
on a.列名=b.列名;
![f5181586ab0e6857e0398896d5872218.png](https://img-blog.csdnimg.cn/img_convert/f5181586ab0e6857e0398896d5872218.png)
*在左联结基础上去掉两表共同的部分*
select....
from 表1 as a
left join 表2 as b
on a.列名=b.列名
where b.列名 is null;
![2cbf7cf9ade390e9988e84cdf99dfe51.png](https://img-blog.csdnimg.cn/img_convert/2cbf7cf9ade390e9988e84cdf99dfe51.png)
4、右联结(right join)
将右表作为主表,主表中的数据全部读取出来,左边的表只选取与主表有相同列的表。
语句:
select....
from 表1 as a
right join 表2 as b
on a.列名=b.列名;
![11bb3cda78a719b129d65314745fa189.png](https://img-blog.csdnimg.cn/img_convert/11bb3cda78a719b129d65314745fa189.png)
*在右联结基础上去掉两表共同的部分*
select....
from 表1 as a
right join 表2 as b
on a.列名=b.列名
where b.列名 is null;
![f50082e9f33849ef6edab79cf5730b89.png](https://img-blog.csdnimg.cn/img_convert/f50082e9f33849ef6edab79cf5730b89.png)
5、全联结(full join)
返回左表和右表中所有的行,当某行与另一表中有匹配的行,两行会进行合并,当某行与另一表中无匹配行,另一表对应的行会填充成空值;mysql不支持全联结。
![810be5f4cce9ef33318bb1df07e173c1.png](https://img-blog.csdnimg.cn/img_convert/810be5f4cce9ef33318bb1df07e173c1.png)
练习:
1、用内联结将学生和成绩表合并在一起
![9b9de7039ec3291e19a3c20c7be007f2.png](https://img-blog.csdnimg.cn/img_convert/9b9de7039ec3291e19a3c20c7be007f2.png)
2、用左联结将学生和成绩表合并在一起
![55893ee25eb6264d0632a32350129aa3.png](https://img-blog.csdnimg.cn/img_convert/55893ee25eb6264d0632a32350129aa3.png)
*在左联结基础上去掉两表共同的部分*
![21893bbd562ba4d0d96979f08e911cc9.png](https://img-blog.csdnimg.cn/img_convert/21893bbd562ba4d0d96979f08e911cc9.png)
3、用右联结将学生和成绩表合并在一起
![2cbcdba2f3d757f567c5bae8b9abc923.png](https://img-blog.csdnimg.cn/img_convert/2cbcdba2f3d757f567c5bae8b9abc923.png)
*在右联结基础上去掉两表共同的部分*
![f06890ff0a6117a651fc12fe80f85ad0.png](https://img-blog.csdnimg.cn/img_convert/f06890ff0a6117a651fc12fe80f85ad0.png)
三、联结应用案例
1、查询所有学生的学号、姓名、选课数、总成绩
![e24ac2b1c2d710f3b446531dacb0dd27.png](https://img-blog.csdnimg.cn/img_convert/e24ac2b1c2d710f3b446531dacb0dd27.png)
2、查询平均成绩大于85的所有学生的学号、姓名和平均成绩
![d09fec986c9109cadcfb6f0341e6762d.png](https://img-blog.csdnimg.cn/img_convert/d09fec986c9109cadcfb6f0341e6762d.png)
3、查询学生的选课情况:学号、姓名、课程号、课程名称
![53462b02ea766ae12c3e2d3a3eae4bee.png](https://img-blog.csdnimg.cn/img_convert/53462b02ea766ae12c3e2d3a3eae4bee.png)
四、case表达式
使用case表达式可以帮助处理复杂的查询问题,相当于一个条件判断的函数,判断每一行是不是满足某一条件。
![1e093fa942eaf151f868e1f11b85d11d.png](https://img-blog.csdnimg.cn/img_convert/1e093fa942eaf151f868e1f11b85d11d.png)
1、注意事项:
1)else可以省略不写,默认为else为空值,最好不省略;
2)end不可以省略。
2、如何使用
当有多种情况需要条件判断时使用,可以用于sql语句的任意语句中。
练习:
1、查询出每门课程的及格人数和不及格人数
![f2c15529dda4bc076e64c79d410547dd.png](https://img-blog.csdnimg.cn/img_convert/f2c15529dda4bc076e64c79d410547dd.png)
2、使用分段[100-85]、[85-70]、[70-60]、[<60]来统计各科成绩,分别统计各分数段人数:课程ID和课程名称
![9beb8413eaa9165269bc181fb66f6a0c.png](https://img-blog.csdnimg.cn/img_convert/9beb8413eaa9165269bc181fb66f6a0c.png)
五、sqlzoo练习
JOIN
![fa51abbd24d153b856ccd873a138f146.png](https://img-blog.csdnimg.cn/img_convert/fa51abbd24d153b856ccd873a138f146.png)
![bdbeee11e6f189dedf1fb5ca8b9dc425.png](https://img-blog.csdnimg.cn/img_convert/bdbeee11e6f189dedf1fb5ca8b9dc425.png)
![dec55fcda622a752cfd3963fbfabfa60.png](https://img-blog.csdnimg.cn/img_convert/dec55fcda622a752cfd3963fbfabfa60.png)
![93901e1e73131760eaa2f95f5e66796c.png](https://img-blog.csdnimg.cn/img_convert/93901e1e73131760eaa2f95f5e66796c.png)
![0d279f13ea8381cb823736c59830ec4a.png](https://img-blog.csdnimg.cn/img_convert/0d279f13ea8381cb823736c59830ec4a.png)
![d01289c9f76eff44a2a4b5597cce59cb.png](https://img-blog.csdnimg.cn/img_convert/d01289c9f76eff44a2a4b5597cce59cb.png)
![c7133be5c079b9fb0416bf4f1b402339.png](https://img-blog.csdnimg.cn/img_convert/c7133be5c079b9fb0416bf4f1b402339.png)
![cf6e71bea19e3b84ee1989d5171f9434.png](https://img-blog.csdnimg.cn/img_convert/cf6e71bea19e3b84ee1989d5171f9434.png)
![9e0e22852dda9d936edd45e1de84eb9d.png](https://img-blog.csdnimg.cn/img_convert/9e0e22852dda9d936edd45e1de84eb9d.png)
![ec063517ba2ebee82c22dc47d4a8e7d9.png](https://img-blog.csdnimg.cn/img_convert/ec063517ba2ebee82c22dc47d4a8e7d9.png)
![a5eacd1e48e2bb2a18bcc8bb601c747d.png](https://img-blog.csdnimg.cn/img_convert/a5eacd1e48e2bb2a18bcc8bb601c747d.png)
![8b20f24f1b9accb3b5157954d267f84a.png](https://img-blog.csdnimg.cn/img_convert/8b20f24f1b9accb3b5157954d267f84a.png)