0
点赞
收藏
分享

微信扫一扫

数据分析 | MySQL45道练习题(10~18)

yongxinz 2022-01-23 阅读 57

10.查询没学过[张三]老师讲授的任一门课程的学生姓名

-- 筛选出学过张三老师课程的学生id --
select a.sid
from sc a
left join course b
on a.cid = b.cid
left join teacher c
on b.tid = c.tid
left join student d
on a.sid = d.sid
where c.tname = '张三';

-- 使用not in 筛选出没有选修张三老师课程的学生信息 --
select
from student a
where sid not in (select a.sid
from sc a
left join course b
on a.cid = b.cid
left join teacher c
on b.tid = c.tid
left join student d
on a.sid = d.sid
where c.tname = '张三');

11.查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

select a.sid,b.sname,avg(a.score) as avg_score
from sc a
left join student b
on a.sid = b.sid
where a.score < 60
group by a.sid
having count(a.cid) >= 2;

12.检索01课程分数小于60,按分数降序排列的学生信息

-- 筛选出01课程分数小于60分的学生id和分数 --
select sid,score
from sc
where score < 60 and cid = '01';

-- 与student表关联,筛选出学生信息 --
select b.*,a.score
from (select sid,score
from sc
where score < 60 and cid = '01') a
left join student b
on a.sid = b.sid
order by score desc;

13.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

-- 筛选出每个学生的平均成绩和学生id --
select sid,avg(score) as avg_score
from sc 
group by sid;

-- --
select a.*,avg_score
from sc a
left join (select sid,avg(score) as avg_score
from sc 
group by sid) b
on a.sid = b.sid
order by avg_score desc;


举报

相关推荐

0 条评论