SQL 多表查询
- 表的加法
![0dcc82944e9ec5b345d4c005c1f8f80a.png](https://i-blog.csdnimg.cn/blog_migrate/2493015ab0eaaeda70527840d23619ca.jpeg)
Union 就是将两个表(前提是结构相同的)的数据相加起来,这里的相加并不是数学运算的相加,而是将两个表里面全部的数据展示出来,只不过union是删除了重复的值,union all则没有对重复的值进行处理。
2.表的联结
Join的意思是联结,也就是说表和表之间是有很多相互联系的存在。就比如在我们课程当用到的教材,学生表和成绩表当中的数据就是通过学号联结在一起的。
![9e3428ba225d00d0138640ffe5bc0649.png](https://i-blog.csdnimg.cn/blog_migrate/30451082750719d6c52e366314368b35.jpeg)
上图展示的就是inner join的运用,inner 就是取的两个表当中值相同的部分,然后再进行cross join。
![9d1e921101448f556928d90d1785edaf.png](https://i-blog.csdnimg.cn/blog_migrate/5ecd0dcbff57496d5fe534b0dc45f357.jpeg)
同理,left join就是采用的只有左侧表才有的数据,然后在进行cross join。需要注意的是on子句的运用,此子句就是对两个表当中相同的数值进行联结的关键。
![b95b900d19ccac4fd8846a3941bad118.png](https://i-blog.csdnimg.cn/blog_migrate/8ac58175d7c8efcda62e72e5f7661cc0.jpeg)
Right join 也是一样的道理。My sql 里面要选择是null的数值应该 写成‘ is null’ 而不是‘=null’,因为不同的查询软件,语言书写规则不一样。
3.联结应用案例
![fbc9870ae11454b4385cbd8856b9859f.png](https://i-blog.csdnimg.cn/blog_migrate/e34e95b50387b05a68d4b96684078eee.jpeg)
我们在分析时候首先从要查询出的结果出发,其中选课数实际上为count课程号(明确有多少课程号就能查明选课数为多少)。
![99f1162709a0ee4f7bf1c74a34ce67a2.png](https://i-blog.csdnimg.cn/blog_migrate/8b757b1fac94d9b4571de5ccb9ac2050.jpeg)
4.Case表达式
Case表达式是通过对某一个数据的检测来判断是否符合,有可能会有多行的when。。。 then。。。在第一行不符合的时候就从下一行再开始检测。
![e4b8af3d88bfc829b19c515bad73ea21.png](https://i-blog.csdnimg.cn/blog_migrate/7cfccb0cd842f1e59ea9755ae5d46b64.jpeg)
![f8213e3959f7bca4a23aac415b5efbab.png](https://i-blog.csdnimg.cn/blog_migrate/8faa205b94159577686f8f19412abcef.jpeg)
查询出每门课程的及格人数和不及格人数。这道题就运用到了sum函数和case表达式的结合。 注意else的运用,表明除了满足之前条件的剩下就是else想要表达的。
![2ebef74696930cbb1d455916b0722180.png](https://i-blog.csdnimg.cn/blog_migrate/a2e999abefe7d784c2ba66a61a8ea395.jpeg)
这道题考查了对联结还有case表达式的综合运用。首先是所要查询的数据是来自两个表当中,所以说就需要进行联结,而联结的关键点位为课程号和课程名称,因为只有这两个为单一有独立值。