表的加法:
利用union和union all
![8a7f53757dc2bb40b58319389f40d9e7.png](https://img-blog.csdnimg.cn/img_convert/8a7f53757dc2bb40b58319389f40d9e7.png)
![68ecb5dfdae22be770ab579d7fa8e2e1.png](https://img-blog.csdnimg.cn/img_convert/68ecb5dfdae22be770ab579d7fa8e2e1.png)
区别:union连接的话重复只会出现一次,union all则将俩个表内所有数据合并
![f73a536e7c1fde10b5453bf060e9df4c.png](https://img-blog.csdnimg.cn/img_convert/f73a536e7c1fde10b5453bf060e9df4c.png)
可能会将查询后的表作为新表。mysql中使用上面的方法是可以实现的
表的联结:(join)mysql之所有叫关系型数据库,就是因为表与表之间可以建立关系
![96343ff72936984960a8aad934394f34.png](https://img-blog.csdnimg.cn/img_convert/96343ff72936984960a8aad934394f34.png)
建立的四张表的结构应该是这样
联结分类:交叉联结,内连接,左连接,右连接,全连接
交叉联结:
![40df1bbe3a0e518ec8bd1c4d84b4175d.png](https://img-blog.csdnimg.cn/img_convert/40df1bbe3a0e518ec8bd1c4d84b4175d.png)
笛卡尔积。每条数据都会重新组合为一条新的数据
学生表:
![b090362b86442ac2ece0378caef32777.png](https://img-blog.csdnimg.cn/img_convert/b090362b86442ac2ece0378caef32777.png)
成绩表:
![a9b578eba66a57d36d524d1ef14e236c.png](https://img-blog.csdnimg.cn/img_convert/a9b578eba66a57d36d524d1ef14e236c.png)
内连接:(得到俩表都有的数据)俩个表的交际会显示出来
![85fab7a6d99bf3db4ceb5642a3b59ce8.png](https://img-blog.csdnimg.cn/img_convert/85fab7a6d99bf3db4ceb5642a3b59ce8.png)
0001.0002.0003在俩个表中都有,显示出来了,最后返回的是笛卡尔积。交叉联结的格式
左连接:
![a4b51afe02d078307f417f976122dbbd.png](https://img-blog.csdnimg.cn/img_convert/a4b51afe02d078307f417f976122dbbd.png)
左连接显示完左表的所有数据,右表有的话加在后面,没有的话显示为null
如果想要左表中除去右表的结果,可以
![d1a4fd90e01527a909e1b6c9019fcc94.png](https://img-blog.csdnimg.cn/img_convert/d1a4fd90e01527a909e1b6c9019fcc94.png)
右连接:
![4392f338ec5a754da6ccee875e14c5de.png](https://img-blog.csdnimg.cn/img_convert/4392f338ec5a754da6ccee875e14c5de.png)
同左连接类似
全连接:(左右表的都显示完,都有则显示在一行,没有的显示为null)
mysql中默认是没有全连接的。可以用左右连接加起来来实现类似
![d7dc844d67d6c7b7557a1e76b06a7cc1.png](https://img-blog.csdnimg.cn/img_convert/d7dc844d67d6c7b7557a1e76b06a7cc1.png)
练习1:
查询所有学生的学号,姓名,选课数,总成绩
查询序号姓名,在学生表,选课数成绩在成绩表,多表查询
![9adfb3e49b0c5a2a2009fa2a56122799.png](https://img-blog.csdnimg.cn/img_convert/9adfb3e49b0c5a2a2009fa2a56122799.png)
练习2:
查询平均成绩大于85的所有学生的学号,姓名和平均成绩
先查询出所有学生的学号名字,平均成绩,在选择平均成绩大于85的
![04268d17f4ba7cb2a3b7cea92bd24efa.png](https://img-blog.csdnimg.cn/img_convert/04268d17f4ba7cb2a3b7cea92bd24efa.png)
练习3:查询学生的选课情况,学号,名字,课程号,课程名称
学号,名字在学生表,课程号,课程名称在课程表,
但是。学生表和课程表之间没有任何直接的关系,需要通过中间桥梁成绩表来关联。三个表的联合查询
![19f720218e7428b19b2eaf699ab4275c.png](https://img-blog.csdnimg.cn/img_convert/19f720218e7428b19b2eaf699ab4275c.png)
case表达式。在sql有的时候需要对符合条件的进行判断。类似if判断语句
用法:case when 判断表达式 then 表达式
when 判断表达式 then 表达式
else 表达式
end
![1e63c022f9404b75029b90a84deb08f5.png](https://img-blog.csdnimg.cn/img_convert/1e63c022f9404b75029b90a84deb08f5.png)
手动加入不及格的。看是否符合想象的方式、
![0596246ff9cd9be3d2435d8a1d8b44bb.png](https://img-blog.csdnimg.cn/img_convert/0596246ff9cd9be3d2435d8a1d8b44bb.png)
那就没问题
练习4:查询出每门课程的及格人数和不及格人数
每门课程,需要分组
![2a28eb6ee37b2407acef0006b482cfc6.png](https://img-blog.csdnimg.cn/img_convert/2a28eb6ee37b2407acef0006b482cfc6.png)
练习5:查询出每门课程的人数
同样,对课程号进行分组
![13b19eed4539413c2c9749f6b40f7b59.png](https://img-blog.csdnimg.cn/img_convert/13b19eed4539413c2c9749f6b40f7b59.png)
练习6:使用分段[100-85],[85-70],[75-60],[<60]来统计各科成绩,分别统计个分数段人数,课程号和课程名称
![dde5ad4665a288aa0aca742c7ea2b012.png](https://img-blog.csdnimg.cn/img_convert/dde5ad4665a288aa0aca742c7ea2b012.png)