SQL进阶练习题36-40
大背景和建表、插入语句就不啰嗦了,参考第一篇。
四张表概要:
- 学生表
student(sid,sname,sage,ssex) --sid 学生编号,sname 学生姓名,sage 出生年月,ssex 学生性别 - 课程表
course(cid,cname,tid) --cid 课程编号,cname 课程名称,tid 教师编号 - 教师表
teacher(tid,tname) --tid 教师编号,tname 教师姓名 -
成绩表
sc(sid,cid,score) --sid 学生编号,cid 课程编号,score 分数
为了方便查看,我把四个表截了图:
student
course
teacher
sc
题目:
- 查询不及格的课程
- 查询课程编号为 01 且课程成绩在 80 分以上的学生的学号和姓名
- 求每门课程的学生人数
- 成绩不重复,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩
- 成绩有重复的情况下,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩
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;
--这句使用子查询优化
成绩有重复的情况下,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩
网友评论