casewhen多条件查询_多表查询

一、表的联合

union 将两张表联合成为一张表并且去掉重复数据

union all将两张表联合成为一张表并且不会去掉重复数据

3a1a4106b9acd44011425004d30b003f.png

2d7e3935632ba8293062aceb30d63586.png

二、表的联结

联结关系图

ed2ceba9105718e738b49f3cfc3a5254.png

常用的联结:cross join、inner join、left join、right join、full join几种

adec28f121f98af89702c9b2b95dc572.png

1.交叉联结(cross join)笛卡尔积:表1的数据和表2的数据逐一进行组合,共生成的数据总数等于(表1数据总数)与(表2数据总数)的乘积,需要大量的运算

2.内联结(inner join):用于查找同时存在于两张表中的数据,当表1和表2中仅有一列列名一 致,用于查找对应列名的数据时,可以使用 natural join 达到相同效果,省略on 表1.列名=表2.列名

9c5c7170265414d90aa2415eabb68c85.png

5e12a1d571d6f1d11401e53d43df36bb.png

3.左联结(left join):两个表进行匹配关系,将左侧的表作为主表读取全部数据和右表中的数据进行交叉联结,未匹配成功的数据显示为NULL

d26a2fd4cf3f33e6462cf880f4d1212e.png

可找到仅存在于左表中的数据,不与右表中的数据重合部分

90af620cf7b3487725887b6980395577.png

4.右联结(right join):同理右侧的表作为主表读取全部数据与左表中的数据进行交叉联结,未匹配成功的数据显示为NULL,查找仅存在于右表中的数据可使用where 左表中数据为NULL(未匹配成功的数据),进行查找

168db9d3403cca2d10bb050649cd066d.png

008211302840849d12f51df55444dffe.png

5.全联结(full join):查询结果返回左表与右表中所有行,匹配成功合并,匹配失败显示NULL(MYSQL不支持)

三、练习

1.查询所有学生的学号、姓名、选课数、总成绩

分析:学号存在于student表和score表中,姓名存在于student表中,选课数需要先对score表中学号group by再计算课程号count总和,总成绩需要先对score表中学号group by再计算sum成绩,需要返回所有学生所以使用student left join score

49fd828f947c6e89acafd1c65fba57e1.png

2.查询平均成绩大于85的所有学生的学号、姓名、平均成绩

分析:学号存在于student表和score表中,姓名存在于student表中,平均成绩是对score表中的学号group by再对分组后的avg求出平均成绩,用比较运算>85得出结果

f32daab6d7f12a432beef107def36b50.png

3.查询学生的选课情况:学号、姓名、课程号、课程名称

分析:学号和姓名存在于student表中,学号和课程号存在于score表中,课程号和课程名称存在于course表中,student表和score表通过学号进行联结,course表和score表通过课程号进行联结

6c39e0ac94af73902ce2610307d45a2e.png

四、case 表达式:多种条件进行判断

case when <判断表达式> then<表达式>...

else<表达式>

end

c49e68590bbff9274c02e4dc6dab26cc.png

f08f8bfecdfb32c3ab206515d63669bf.png

16e966a0156a6c43734be39130349ef4.png

五、SQLZOO

使用sum和case when 同时使用,可得到某一数据出现的总和,group by可对最终select出的数据进行逐一分组确保数据可返回

616c319d747b2558aa48ac1d3914cdbe.png

分析:POL参与的赛事可在主场和客场的 team1 或team2中找到,而GER进球数则要在goal表中获取进球数据

c6b197a7f52af7459301c09e50027cf4.png

分析:需要返回某一表中全部数据则使用left join 或 right join

72a5561ceabf585388700d7775667b85.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值