SQL进阶练习题36-40

SQL进阶练习题36-40

大背景和建表、插入语句就不啰嗦了,参考第一篇

四张表概要:

  1. 学生表
    student(sid,sname,sage,ssex) --sid 学生编号,sname 学生姓名,sage 出生年月,ssex 学生性别
  2. 课程表
    course(cid,cname,tid) --cid 课程编号,cname 课程名称,tid 教师编号
  3. 教师表
    teacher(tid,tname) --tid 教师编号,tname 教师姓名
  4. 成绩表
    sc(sid,cid,score) --sid 学生编号,cid 课程编号,score 分数
    为了方便查看,我把四个表截了图:


    student

    course

    teacher

    sc

题目:

  1. 查询不及格的课程
  2. 查询课程编号为 01 且课程成绩在 80 分以上的学生的学号和姓名
  3. 求每门课程的学生人数
  4. 成绩不重复,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩
  5. 成绩有重复的情况下,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩

sql

查询不及格的课程

select * from sc
where score<60;

查询课程编号为 01 且课程成绩在 80 分以上的学生的学号和姓名

select s.sid,s.sname from student s
join sc on s.sid=sc.sid
where sc.cid='01' and sc.score>=80;

求每门课程的学生人数

select cid,count(*) from sc
group by cid;

select c.cname,count(sc.score) from sc
join course c on sc.cid=c.cid
group by c.cname;

成绩不重复,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩

select s.*,sc.score from student s
join sc on s.sid=sc.sid
join course c on c.cid=sc.cid
join teacher t on t.tid=c.tid
where t.tname='张三' and sc.score
order by sc.score desc
limit 0,1;
--mysql中显示前几个使用limit x,y 从x+1开始显示y行

select sid from sc where cid=(select cid from course where tid=(select tid from teacher where tname = '张三'))

select s.*,a.score from student s
join (
select sid,score from sc where cid=(
  select cid from course where tid=(
    select tid from teacher where tname='张三'
  )
)
) a on s.sid=a.sid
order by a.score desc
limit 0,1;
--这句使用子查询优化

成绩有重复的情况下,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容