case when 子查询_MySQL基础知识—多表查询

b1172d409f4214e245cc55d71c52f531.png

一、表的加法(union)

  • 将两个表的数据按照行合并在一起,并且重复值只保留一个
SELECT 

9f80596d008879df304626a5b74a183b.png
  • 如果想保留两个表中的重复值,那么使用union all,那么重复值语文课程就被保留下来了
SELECT 

23eb21d529820d79ad187e2b1efefbe0.png

需要注意的是:这里的重复指的是课程号和课程名称完全一致,教师号是否重复不影响查询结果,因为我没有查询教师号这一列。


二、表的联结

下面四个表通过学号,课程号,教师号这三列进行表与表之间的联结

025b11a3cf7bc1835f4fd424c276011f.png
  • 交叉联结,也叫笛卡尔积(cross join)

表中的每一行与另一个表中的每一行合并在一起,产生的行数是两个表行数的乘积,它的数据产生如下图所示:

5ec670e90bc301bd6e6c3964243b2271.png
3*3=9,一共产生9行数据

一般来说,我们很少用到这个语法,因为运算后的数据量会非常大,影响设备的性能和效率,其结果也没有实际的价值,但是这个知识是下面联结知识的基础。

  • 内联结(inner join)—查找出同时存在于两张表的数据

176a0e204ad22edbee3073075c04eac7.png

2327098bc9fdb6578250b5e2382e506e.png

实例1:student表和score表进行内联结

SELECT 

2b8e39a670de182b8d5f0b9a461ea6d4.png
  • 左联结(left join)—取出左边表的全部数据,右边的表选出与左边相同数据的行,然后进行数据合并

ab65663d901c768feed3a4db644d19b6.png

ff00733855310d66f0870e15f118768d.png

实例2:student表和score表进行左联结

SELECT 

51aa80042369d860031d985ce7546bdc.png

实例3:如果我想查找在左表中有而在右表中没有的数据,如下图显示:

87edc0acdca23a839ba90ae38d804db0.png
SELECT 

d6f97ab900ed7707c003158f713c4117.png
  • 右联结(right join)—取出右边表的全部数据,左边的表选出与右边相同数据的行,然后进行数据合并

ddd3c62e2d8df6d84d053a36425b5de1.png

实例4:student1表和score1表进行右联结

SELECT 

f4d61e406bff765aaa069e1512d99c13.png

实例5:如果我想查找在右表中有而在左表中没有的数据

SELECT 

fc3005930ee4fe7f80f98f6311e63c15.png
  • 全联结(full join)—取出左表和右表的所有数据,有相同数据就合并,没有则用Null来填充

b7bdefafbc8f759a8d9c79727e27f9eb.png

4ad20fcbce77e287e1ebcdb57332a083.png

注意:MySQL是不支持全联结的,我们了解这个概念就可以了


三、联结应用案例

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

SELECT 

debb026898082702fd88446efe7e5ae7.png

案例2:查询平均成绩大于60的所有学生的学号、姓名和平均成绩

SELECT 

e0cc75d7fd07484d7faf7719c735bef3.png

案例3:查询学生的选课情况

SELECT 

4770b9031c2e7d04639119ce5bfead01.png

四、case表达式—相当于条件判断函数

CASE 

实例1:查询score表中学生的成绩是否及格

SELECT 

bc34cdcbd5d40683e11a76dcb2c47a0c.png

实例2:查询出每门课程的及格人数和不及格人数

SELECT 

120f4db08f9e64c1ca1fa2c26a10cfbd.png

实例3:使用分段[100-85],[85-70][70-60],[<60]来统计各分段人数,课程号,课程名称

SELECT 

edf2d98e0aefa5f2f52c29eefb93ac7c.png

注意:case语句可以写在任意一个子句中

欢迎大家看看我写的其他MySQL基础知识系列文章,希望对你们有所帮助!

1、MySQL基础入门知识

假装在念书:MySQL基础知识—入门篇​zhuanlan.zhihu.com
49d7539a807dea4467dd18049c2d028a.png

2、MySQL基础知识—简单查询

假装在念书:MySQL基础知识—简单查询​zhuanlan.zhihu.com
49d7539a807dea4467dd18049c2d028a.png

3、MySQL基础知识—汇总查询

假装在念书:MySQL基础知识—汇总查询​zhuanlan.zhihu.com
49d7539a807dea4467dd18049c2d028a.png

4、MySQL基础知识—复杂查询

假装在念书:MySQL基础知识—复杂查询​zhuanlan.zhihu.com
49d7539a807dea4467dd18049c2d028a.png

五、实践出真知

现在我们打开SQLZOO网站:https://sqlzoo.net/wiki/The_JOIN_operation/zh
开始习题练习,进行查询语句的练习。

第一题代码:

SELECT 

122eddebbb579cd66bc9729d0d8b5b64.png

第二题代码:

SELECT 

424a142222b9fd24f7623e4e0d113ee7.png

第三题代码:

SELECT 

730120c1407c0d5508a39aa4bc8f78e1.png

第四题代码:

SELECT 

fc486e07f94ce93fdb9d7fbd96b4c9bd.png

第五题代码:

SELECT 

ac84fadcb5d6336b4165dfc1a9fbdf02.png

第六题代码:

SELECT 

361d9f0d8a20e86c10a8811e99faad5f.png

第七题代码:

SELECT 

9c4cc1bd64c1a5481d16bd01fd5115c0.png

第八题代码:

SELECT 

b11319ab723d1cdb6413d2b8dba67bcc.png

第九题代码:

SELECT 

4aa60065021321fafb6f600afb3e3be7.png

第十题代码:

SELECT 

e3038f11711e4cf4f7c55a1ecf21430c.png

第十一题代码:

SELECT 

bf8509d87f49cd5264d1d0cb4096dfdd.png

第十二题代码:

SELECT 

f4c6e09190cf0582c3aba43c131fd06a.png

第十三题代码:

SELECT 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值