前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库的左联结和右联结是个啥呢?

数据库的左联结和右联结是个啥呢?

作者头像
开心鸭
发布2020-10-26 14:42:26
4030
发布2020-10-26 14:42:26
举报

【1】因为姓名和成绩在两张表所以需要用到左联结,因为要计算每个学生的总成绩用到sum函数所以需要用到group by

select a.学号,a.姓名,count(b.课程号) as 选课数,sum(b.成绩) as 总成绩

from student as a left join socre as b

on a.学号=b.学号

group by 学号

【2】要查每个学生的平均成绩,所以要用group by

select a.学号,a.姓名,avg(b.成绩) as 平均成绩

from student as a left join socre as b

on a.学号=b.学号 and

group by 学号

having avg(b.成绩)>85

【3】查这四个数据要通过三张表,学生到成绩到课程,这里用inner join 是因为要的是选课情况,如果没有选就不用显示了

select a.学号,a.姓名,c.课程号,c.课程名称

from student a inner join score b on a.学号=b.学号

inner join course c on b.课程号=c.课程号;

及格和不及格要进行判断所以用case结构,要注意between是两者都包括

select a.课程号,b.课程名称

sum(case when 成绩 between 85 and 100

then 1 else 0) as '[100-85] '

sum (case when 成绩 >= 70 and 成绩 <85

then 1 else 0 ) as '[70-85]'

sum(case when 成绩>= 60 and 成绩<70

then 1 else 0) as '60-70'

sum (case when 成绩<60 then 1 else 0

then 1 else 0) as ’[<60]‘

from score a right join course as b

group by a.课程号,b.课程名称

练习:

这部分题目使用的是‘2012年欧洲足球锦标赛’数据库里的表。

这道题用右联结是因为要找出每个German的得分所以要保留goal表所有的数据

这道题只要匹配到比赛即可,所以用内联结

因为这里是一个比赛对应一个team所以用inner join

这道题要找进德国球门的,所以要找得分的球队是德国球队的对立面。

因为要求team得分总和所以groupby就用teamname

以stadium单位进行得分统计所以groupby用stadium

统计POL球队的比赛所以不要忘记team1和team2

这道题a.mdate去掉也可以

这道题太坑了,没看到排序花了好长时间,要加上order by。

最后,鸭哥推荐大家一个网站,力扣大家可以面试前去刷题,加油!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 练习:
  • 最后,鸭哥推荐大家一个网站,力扣大家可以面试前去刷题,加油!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档