mysql 多表联合查询_mysql:多表查询

一.表的加法

通过union实现,会自动删除重复行,要想保留重复行用union all,实际操作如下:

32f56bf202533d452babbd8e0f784561.png

二.表的联结

42734811706e1dccb45ab3d86089af50.png

1.交叉联结

87282aa26268a9fa95007c0baa7b47ad.png

是行的乘积;例子:扑克牌;交叉联结是一切联结的基础,其他联结都是加了其他的筛选条件

2.内联结

作用:查找出同时存在在两张表中的数据。举例过程如下

c0b9918acb864683ed626d141af24d86.png

ef5f8ffa3799c5c961d7cc1b03d8aa67.png

3.左联结

作用:将左侧表中的数据全部取出

48b3e7dd8ef8da9ee4bd13b0a6730ce2.png

注意:没有对应的行用null填充

511ceea1602e72f6e0556928cd11cf57.png

想要不取出重复部分,加上where语句:

03bd3064f720fcbf4361ad93d9a498f8.png

3.右联结(相反于左联结)

4.全联结

d3539411c2af7982c1539085b72fe0e3.png

三.联结应用案例

案例一:

d8b785a77e057fe7f1b9e9bff38af694.png

79e1101223b0d57444fd4ab813752a36.png

4929fc8a5977eea71d661765dc47b0f1.png

6ae5c204ad4536a83d1d35588569afe2.png

实操结果如下:

aec17b73a873c72e99051b31a5346e63.png

案例二:

8c5df345b10900a30ac2b6ab0c6516d9.png

681cf5745e3c32a1658f4794eaa7fe04.png

ced1fde951f863b0489cf04e7ff6c89e.png

d91186f735bfd931be9f07279acbdb03.png

90422c6b746ecf30d8067bb1511b520b.png

实操如下:

c92a7e14df1affcad646f312f41be422.png

案例三:

3f3a7a0257db2de9aa0a18d3ee2c9421.png

160793d8011992b83ecaa80eafe27110.png

实操如下:

8da24747f4788b2c2ef38b5a02bb0605.png

四.case表达式

作用:条件判断的函数,判断每一行是不是满足某一条件

注意事项:else可以省略;end不能省略;可以写在任意子句里

8edcbe5250c1c12fda3b9fb7799e608b.png

例子1:查找成绩及格或不及格

cae2283c146be6006df37afaed999f89.png

实操如下:

fc227d7390d572add58cce646f514fbb.png

例子2.查询每门课的及格人数和不及格人数

5916087151c3696206565993d58b066e.png

把count子句换成case when:

73211ec267a5f785ab3a4d4f68c7947a.png

dee8e89eba5715daaa007a4b9f12603f.png

实操如下:

13034e199b1299ba4a835f686636dbea.png

例子3.

9fac94bbccde2d89f5529283e458e90a.png

926ce4672ad7bd2b10760965a57ad08e.png

实操如下:

3cb420435cd212f2edb6e0e17b472bd3.png

五.sqlzoo练习题

180233eff02a463f59de20742160bd2a.png

1b2db95768963ae8abe7c8c50a327b42.png

23b428fa248329159e0c2e4ba86d0770.png

0cf03c731bafd246c9e8fb848eb06463.png

b5a69e3d66c4de7af4e4cef4077977f0.png

475d26bc5595752dc228d7e957703f4b.png

7c7925630c064e099ab65a238a147803.png

c3a804f0f2cafae62c90f104bb6c96c8.png

1)解释下where子句中的条件:

主队是德国或者客队是德国,比如

德国 和 A对比赛(德国是主队),进球的是A队

A队和德国比赛(德国是客队),进球的是A队

所以条件是(b.teamid = a.team1 and a.team2 = 'GER') or (b.teamid = a.team2 and a.team1 = 'GER')

2)内联结的结果中入门球员有重复值,用distinct去掉重复值

72ea488737dbb2b0a8a967ca206ea3c3.png

问题分析:

球队名称(球队信息表eteam),和每个球队进球人数(进球信息表goal:按球队名称分组统计count(teamname)

a8bfc63babec6ce61af6d54800e1f404.png

问题分析:

比赛地点(比赛信息表game),和每个比赛地点的进球数(进球信息表goal:按比赛地点分组,对进球人员进行汇总count(player))联结方式是什么?要查出比赛信息表game中全部比赛地点,所以是左联结

99b4c79beb0d0e2182474333f7034691.png

fe4eddcbb45b4472b353604efd056944.png

f4bc8cc2b541e13f959ebcd27d04919d.png

查找出所有比赛的日期,每场比赛中对战双方各自的进球数(也就是team1进球数,team2进球数)问题分析:

当比赛信息表game中的球队编号(team1)也出现在进球信息表(goal)中时,表示这个球队进球了,使用case语句来统计

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值