SQL面试50题笔记 1-10 详解思路与注意点

video from https://www.bilibili.com/video/BV1q4411G7Lw?p=9

Student学生表:学号s_id 学生姓名s_name 出生年月 性别
Score 成绩表:学号s_id 课程编号c_id 成绩s_score
Course课程表:课程编号c_id 课程名称c_name 教师号t_id
Teacher 教师表:教师号t_id 教师姓名t_name

一、查询课程编号为01的课程比02的课程成绩高的所有学生的编号(重点)
关键:构成子查询
思路:将学生1课程和2课程的分数分别生成子表

select  s_id
(
select  s_id, c_id, s_score from score 
where c_id = 1
) a
inner join
(
select s_id, c_id, s_score from score 
where c_id = 2
) b on a.s_id = b.s_id
where a.s_score > b.s_score

加入学生的分数和名字
加上课程01和02的成绩,并分别命名为01、02

select  s_id, a.s_score “01, b.s_score “02, c.s_name
(
select  s_id, c_id, s_score from score 
where c_id = 1
) a
inner join
(
select s_id, c_id, s_score from score 
where c_id = 2
) b on a.s_id = b.s_id
where a.s_score > b.s_score

二、查询平均成绩大于60分的学生的学号和平均成绩
关键:group by

select s_id, avg(s_score)
from score
group by s_id
having avg(s_score)>60

做group by时,尽量不要把非group by对象选择到select中,因为意义不大(虽然不会报错)

三、查询所有学生的学号、姓名、选课数、总成绩
思路:选课数用count、总成绩用sum— group by 学生的学号或姓名
学号 姓名 课程编号 这门课的成绩

select a.s_id, a.s_name count(b.c_id), sum(b.s_score)
from
(
select s_id, s_name
from student
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值