leftjoin多表联合查询_SQL 多表查询

本章主要讲解如果使用SQL进行多表查询,内容包括以下:

一.表的加法

二.表的联接

三.联结应用案例

四.case表达式

一.表的加法,加法用union,会把重复的数据删除,重复的数据只保留一个

87f60afbd6a0c4dcafda96a945de9fce.png

2.表的加法如果用union all, 则会保留所有重复的行

553974152eb002d137886a17a9b73e9b.png

二.表的联结

联结有以下5种联结方式

交叉联结 cross join

内联结 inner join

左联结 left join

右联结 right join

全联结 full join

1.交叉连接 cross join:是将表中的每一行都与另一个表种的每一行合并在一起

交叉表种的行数是两张表种的乘积

如下:

314c43ecfb938b05208ad3f13d0c6bbf.png

2.内联结 inner join

内联结就是查询同时存在两张表种的数据

cf573d742b31814ee47511cd9315966d.png

3.左联结 left join

左联结会将左侧表中的所有数据取出来

04089bc5e8a8467ff01f8417ce9d2d4d.png

增加SQL语句: WHERE b.学号 is NULL; 则把score1表中学号为空的行取出来

a540903c06c4e7cf830edb4ee077294b.png

3.右联结 right join

右联结会将右侧表中的所有数据取出来

2afcfd30a9087a69cd653ce9f9f0b221.png

增加SQL语句: WHERE a.学号 = NULL; 则把student1表中学号为空的行取出来

43d69f83a0a8e454e1a4cf09013d0137.png

4.全联结 full join

sql不支持全联结

三.联结应用案例

如何使用SQL解决业务问题

1.翻译成大白话

2.写出分析思路

3.写出对应的sql子句

课堂练习:查询所有学生的学号,姓名,选课数,总成绩

思路:

1)学号,姓名(学生表student)

2) 选课数(每个学生的选课数目:成绩表score)

按学号分组,对课程号计算用count

3) 总成绩(每个学生的总成绩:成绩表score,

按学号分组,对成绩求和用sum)

翻译成大白话后如下:

select 查询结果(学号,姓名,选课书,总成绩)

from 从哪张表中查找数据[学生表student,成绩表score,两个表如何连接,通过学号,用哪种连接]

where 查询条件[没有]

group by 分组[按照学号分组]

having 对分组结果指定条件[没有]

order by 对查询结果排序[无]

limit 从查询结果中取出指定行[无]

bc5798a531c251bd2ed9ebb1b9109f02.png

课堂练习:查询平均成绩大于85的所有学生的学号,姓名和平均成绩

1)查询出所有学生的学号,姓名,平均成绩

学号,姓名[在student表]

平均成绩[在score成绩表]:avg(成绩)

按照学号分组

2)平均成绩>85

翻译成大白话后如下:

select 查询结果(学号,姓名,平均成绩)

from 从哪张表中查找数据[学生表student,成绩表score,两个表如何连接,通过学号,用哪种连接]

where 查询条件[没有]

group by 分组[按照学号分组]

having 对分组结果指定条件[ 平均成绩>85]

order by 对查询结果排序[无]

limit 从查询结果中取出指定行[无]

2267352df13ceb49370d9ac79a130782.png

课堂练习:查询学生的选课情况和课程名称

00a83489037d088ac5d6cc2a459f7c80.png

四.case表达式

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

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

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

...

else<表达式>

end

0ebc06668303e4759eb5d82b19579239.png

课堂练习:查询出 每门课程 的 及格人数 和 不及格人数

f889946452ed180471d55f39884e62f0.png

单需要对条件判断的时候需要用case表达式

课堂练习: 使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计:

各分数段人数,课程号,课程名称

e0144f828c6df3728371c00b4d352270.png

练习题 sqlzoo

章节: select in select quiz

练习网址

The JOIN operation​sqlzoo.net

29a0e32624e94763a406a835a2ef0afd.png

169e45e79835e94bdfa087264fa79586.png

ff2e4caa86c7d2178140f4f6c3548875.png

6d580b4ec88147cee84db8bed0212c74.png

ec8d57d0c8ca3bfc3fb9da31fb4c74c1.png

836a005b793754bcf9af7fca79756fd2.png

7c8242c45e750500e42a607ba97ff08c.png

60db75e1be1397121ba528e375364308.png

31eeb816c26df05558728b090754aa02.png

a56f25aeeae17b1cfe42a486ef1fa4b6.png

a888317a99aa18d0af1ade75aa8e9cb0.png

6f4e031bd3272b7a28941c87eff46f76.png

58f76c3734d4629d91615041aee519f4.png
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值