sql join中能否使用case when_SQL 复杂查询

SQL 多表查询

  1. 表的加法

0dcc82944e9ec5b345d4c005c1f8f80a.png

Union 就是将两个表(前提是结构相同的)的数据相加起来,这里的相加并不是数学运算的相加,而是将两个表里面全部的数据展示出来,只不过union是删除了重复的值,union all则没有对重复的值进行处理。

2.表的联结

Join的意思是联结,也就是说表和表之间是有很多相互联系的存在。就比如在我们课程当用到的教材,学生表和成绩表当中的数据就是通过学号联结在一起的。

9e3428ba225d00d0138640ffe5bc0649.png

上图展示的就是inner join的运用,inner 就是取的两个表当中值相同的部分,然后再进行cross join。

9d1e921101448f556928d90d1785edaf.png

同理,left join就是采用的只有左侧表才有的数据,然后在进行cross join。需要注意的是on子句的运用,此子句就是对两个表当中相同的数值进行联结的关键。

b95b900d19ccac4fd8846a3941bad118.png

Right join 也是一样的道理。My sql 里面要选择是null的数值应该 写成‘ is null’ 而不是‘=null’,因为不同的查询软件,语言书写规则不一样。

3.联结应用案例

fbc9870ae11454b4385cbd8856b9859f.png

我们在分析时候首先从要查询出的结果出发,其中选课数实际上为count课程号(明确有多少课程号就能查明选课数为多少)。

99f1162709a0ee4f7bf1c74a34ce67a2.png

4.Case表达式

Case表达式是通过对某一个数据的检测来判断是否符合,有可能会有多行的when。。。 then。。。在第一行不符合的时候就从下一行再开始检测。

e4b8af3d88bfc829b19c515bad73ea21.png

f8213e3959f7bca4a23aac415b5efbab.png

查询出每门课程的及格人数和不及格人数。这道题就运用到了sum函数和case表达式的结合。 注意else的运用,表明除了满足之前条件的剩下就是else想要表达的。

2ebef74696930cbb1d455916b0722180.png

这道题考查了对联结还有case表达式的综合运用。首先是所要查询的数据是来自两个表当中,所以说就需要进行联结,而联结的关键点位为课程号和课程名称,因为只有这两个为单一有独立值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值