查询各分数段人数设计视图_多表查询

1.表的加法

a6591455c58bf1d436c490c5815a47e2.png

2.表的连接

红色部分保留的是

b547bf260c689fc4f1ea28ae76bb35a8.png

交叉联结——表1所有的行与表2所有的行连接

e8ef591051851a871c2f2c1e2f5a78b0.png

内联结 ——同时存在于两张表内的数据

5cb67f40ed9502006dd6ab1296ea2fed.png

a5af7be690d432c870ef972775912d9a.png

左联结——将左侧表中数据全部取出

1f1928b112371052e0fb02baed4bba23.png

1daa2f1913f2402d42c5d4b61471e287.png

左联结去掉公共部分

f1ef768c8690d50b57129fd9d736f742.png

右联结——将左侧表中数据全部取出

84f6ca227aa847c777905da55f30dbb3.png

362c94ea0c13bf5054f664f8157782bc.png

右联结去掉公共部分

7448d516ff1fe8575acbb8da0bcefd3c.png

全联结——MYSQL不支持全联结

8e0a7b28166f524eb45c071830278474.png

3.case表达式——解决复杂的查询问题,case的作用进行条件判断的函数,用来判断每一行是不是满足条件

case表达式 注意事项

else语句可以不写

end语句不可以不谢

case语句可以写在SQL语句的任一个子句中

ecaf9da4ba229c55fb5ad9cbae1e7ec3.png
case when <判断表达式> then <表达式>
     when <判断表达式> then <表达式>
     when <判断表达式> then <表达式>
     ……
     else<表达式>
end
SELECT 学号,课程号,成绩,
   (CASE WHEN 成绩>= 60 THEN '及格'
         WHEN 成绩< 60 THEN '不及格'
         ELSE NULL
END ) AS 是否及格
FROM score;

查询出每门课程的 及格人数 和 不及格人数

dcbe5c1d757887ab659e667a13006be7.png

注意:千万不要忘记及格人数后面的逗号,

SELECT 课程号,
sum(CASE WHEN 成绩>= 60 THEN 1 ELSE 0 end) as '及格人数',
sum(CASE WHEN 成绩< 60 THEN 1 ELSE 0 end) as '不及格人数'
FROM score
GROUP BY 课程号;

case表达式 注意事项

else语句可以不写

end语句不可以不谢

case语句可以写在SQL语句的任一个子句中

9325909db7eef4b6f34380478a8ddc03.png

查询出每门课程的及格人数和不及格人数

88a83930fc2369ad7c2fc5c9891005a8.png
#使用分段[100-85],[85-70],[85-70],[70-60],[<60],来统计各分数段人数:课程ID和课程名称
 SELECT a.课程号,b.课程名称,
sum(CASE WHEN 成绩 BETWEEN 85 AND 100 THEN 1 ELSE 0 end) as '[85,100]',
sum(CASE WHEN 成绩 >= 70 and 成绩< 85 THEN 1 ELSE 0 end) as '[70,85]',
sum(CASE WHEN 成绩 >= 60 and 成绩< 70 THEN 1 ELSE 0 end) as '[60,70]',
sum(CASE WHEN 成绩 <60 THEN 1 ELSE 0 end) as '[<60]'
FROM score as a RIGHT JOIN course as b on a.课程号=b.课程号
GROUP BY a.课程号,b.课程名称;

d105a2b541c5467d9df59597e2a05ef4.png

联结应用案例练习

3124d41d56a0877e69dd67a06987fd60.png

三表联结

0c095ea160c3b7c1adc06545d94e2c65.png

b8ae2aa12d1762056ecc28a4edd17575.png

练习

1. 在进球表(goal)中查找德国球队(teamid = 'GER')进球的比赛编号(matchid),进球球员姓名(player)

28f552329437e6183c4ce7270615ae41.png

2. 在比赛信息表(game)查找比赛编号1012的信息

ff5db4fea6ee65a5f375d21c6d5676fa.png

3. 查找德国队进球球员姓名,球队编号(在进球信息表goal), 比赛地点,比赛日期(在比赛信息表game)

8b00f57b416281b84e64d87f420ef60d.png

4.查找姓名中以Mario开头的进球球员,符合条件球员参加比赛的对战双方

e5791c36aa06d2837274fd73873a2d9c.png

5.查找进球球员的姓名、球队编号、教练、多长时间进球。要求多长时间进球<=10分钟

b60b8cd5298fc513e485ddc6a68bfcd4.png

6. 'Fernando Santos'作为教练的比赛日期,球队编号有哪些?

02150873aeb3387c1cbd101ebd9e1194.png

7. 在比赛地点'National Stadium, Warsaw'有哪些进球球员?

bd802d5e4df0cfa98a3a7b2990e74b31.png

8.射入德国球门的球员姓名

34dec640e07443d01c1240178cb3d658.png

9.列出隊伍名稱 teamname 和該隊入球總數

b165d191c43187a73baabb3a90f7aabd.png

10. 查找出所有比赛地点,每个比赛地点的进球数

119a71fd38ad4ada13052a0d0356e29a.png

11.查找出有波兰球队'POL'参加的比赛编号,比赛日期,对应这场比赛的进球数

6245b72c3bcaae3cb7f35780d8e54e0c.png

如果分组结果中没有比赛日期(mdate),而查询结果要求有比赛日期(mdate)。为了让查询结果中有比赛日期(mdate),我们在分组group by子句中再加上分组比赛日期(mdate)。

这时候group by a.id,a.mdate 有两个分组列,表示这两个列的值都相同时才算一组。因为比赛编号(id),比赛日期(mdate)都是一对一的,不会改变之前的分组结果,但有可以询结果中有分组中的列

12. 对于德国队'GER'得分的每场比赛,显示比赛编号,比赛日期和'GER'得分的进球数

20d63daabbd2734775b4faf5fcdd603e.png

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值