查询数据去除后面无用的0_SQL-5-多表查询

这课讲了不同表之间的联结,还有如何查询不同表之间的数据以及判断

主要语句格式:

select.. from.. as a left/right/inner join .. as b on a...=b....

(where... 显示条件)// (group by.. 需要分组时)

select .. sum (case when.. then.. else..end)as '..'

from ...

----------------------------------------------------------

表的加法:并集

union

union all保留重复数据

ebad9d7ee4ca3d2aa802d20374e9c56c.png

表的联结

表与表格之间的关系是通过列联结

例,学生表和成绩表之间的学号用来对应 join

交叉联结cross join

表中每一行与另一张表的每一行分别联结,结果是行数过多

结果举例,扑克牌

内联结inner join

两个表里面共同存在的数据才会保留:并集

练习:

on是表示根据什么列名将两个表联系起来

select后面要加上每个表的符号,说明显示哪个表的数据

Inner join 说明同时存在于两个表

6fec1157301c6809623ca9e77846b3d4.png

左连接:left join

左侧是主表,主表数据全部取出,右边的表格只取出和左边对应的数据

进阶:表示纯左表(取出左右两表的并集部分)

因为score表里面没有"王思*"的数据所以显示是空值

dbf515630caadca41df68d40d29d5388.png

如果只要显示王思*,就是显示a表里有但b表里没有的数据

这里要注意空值的话用is不用等号表示

260a2064b0cb7c83b47b29c346588d0c.png

右连接

和左连接相似,换一个方向

全连接

mysql不支持全连接

联结汇总

54502e46d1996c4185aee2185d7d5c4d.png

子查询--篮筐语句按书写顺序-select-红框语句

7a6bcb262c8bc087c4c0c3677224f380.png

联结查询练习

805c5386cc3d72b574db1f79c43a80df.png

d2b664311a1bb51f3129425d8858e8af.png

三表联结:用两个inner join来练习起来,on标明两两之间的对应条件

cb55eb4da501ec49c2c2b50bb86f2e48.png

case表达式:是否符合我们的条件

case when.. then.. end

else可以省略不写,默认空值

end要写

case表达式可以放在任何位置

0e2276ebf36c825b1fe5a4f3e4b6d523.png

分段统计人数:

1.要注意最后一个sum的语句后面不要加逗号,因为结构相当于 select A,B,C,D,E,F from , F跟from之间是不用加逗号的

2.因为between是包括边界的,这里虽然也运行出来了,但如果怕错的话用繁琐一点的 成绩>.. and 成绩<.. 更稳妥

cac3fcd6ac1a6cb29b4724adfe6e96ed.png

97ce64214bd6357ab88cae14995bfd91.png

ada89813a279f1915765522abd3c5e4f.png

第三题用right join或者inner join都可以

69660d7598d87b1b2cd6d34838d0987c.png

07f1a4bbd61ad8c3d42a95f3e67ed12d.png

第五题left join或者inner join都可以,核对了两边的答案都是一致的

93350df5b0070c8544bcd6cc5fb2242f.png

773448ec94ba95f4f6b971efb9a2473c.png

505c2c7626e9e697a23b952555373b6d.png

第8T注意点:

1.射入球门的球员名字在goal,赛事对决情况在game,两张表对应的列是id

2.德国对希腊,有可能team1是德国也有可能team1是希腊,所以这里涉及到两种可能

3.去除重合部分的球员名字,所以涉及distinct

9500cae8b81e89fca7a070642a2c55fd.png

第9T

1.要找出进球总数,只需要goal表格中和eteam表格中重合的teamid个数就行

b4e67fe64fb142adf5e3a9042df25822.png

和第九题思路相似

7c22835431aa19c1187f6f7212a1b759.png

因为select语句只能显示group by后面的列,所以group by后面要把列名都加上,11T和12T都要注意这一点

cb2e298557e045257a0994883f4cec09.png

c9a6fb932b781e412f40487f9c975e83.png

13T使用到case判断语句

题目意思是 如果是显示出每场比赛每个队伍的进球数目,那就是如果teamid跟team1/2一致的话加一否则为0

因为是显示每场比赛每个队伍的,所以根据team1/2分别列式

根据比赛场次来分组,同时group by语句要显示出select语句里面涉及的列名

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值