有表如下:
Student 学生表
SC 成绩表
Course 课程表
Teacher 老师表
每个学生可以学习多门课程,每一个课程都有得分,每一门课程都有老师来教,一个老师可以教多个学生
1、查询姓‘朱’的学生名单
select * from Student where sname like '朱%'
2、查询同名字同性别学生名单,并统计同名人数
select sname,ssex,count(*) from Student GROUP BY sname,ssex having count(*) >= 2
3、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按照课程号降序排列
select cid,avg(score) from SC GROUP BY cid ORDER BY avg(score) ASC,cid DESC
4、查询平均成绩大于85的所有学生的学号,姓名和平均成绩
-- 子查询
select SC.sid, Student.sname , avg(SC.score) from SC,Student where SC.sid = Student.sid GROUP BY SC.sid,Student.sname HAVING avg(SC.score) > 85
-- 关联查询
-- Student s ----s是表Student的别名
select SC.sid, s.sname, avg(SC.score) from SC INNER JOIN Student s on SC.sid = s.sid GROUP BY SC.sid,s.sname HAVING avg(SC.score) > 85;
-- 或 :
select s.sid, s.sname, avg(score) from SC INNER JOIN Student s on SC.sid = s.sid GROUP BY sid,s.sname HAVING avg(score) > 85;
5、查询课程名称为“睡觉”,且分数低于60的学生姓名和分数
-- 方法1、通过关联查询
select s.sname,SC.score
from Course c INNER JOIN SC on c.cid = SC.cid INNER JOIN Student s on SC.sid = s.sid
where c.cname = '睡觉' and SC.score < 60
-- 方法2、通过子查询
select s.sname,SC.score from Student s,SC where s.sid = SC.sid and SC.score < 60 and SC.cid in (
select c.cid from Course c where c.cname = '睡觉')
6、查询所有学生的选课情况
-- ⚠️ 以学生为主 所以是左查询
select s.sname,c.cname from Student s LEFT JOIN SC on s.sid = SC.sid INNER JOIN Course c on SC.cid = c.cid
-- 或者第二个用 left join
select s.sname,c.cname from Student s LEFT JOIN SC on s.sid = SC.sid LEFT JOIN Course c on SC.cid = c.cid
7、查询任何一门课程成绩在70分以上的学生姓名、课程名称和分数
-- (1)、用having
select s.sname,c.cname,SC.score from Student s INNER JOIN SC on s.sid = SC.sid INNER JOIN Course c on SC.cid = c.cid having SC.score > 70
-- (2)、用where
select s.sname,c.cname,SC.score from Student s INNER JOIN SC on s.sid = SC.sid INNER JOIN Course c on SC.cid = c.cid where SC.score > 70
8、查询每门课程被选修的学生数
select c.cid,c.cname,count(*) from SC INNER JOIN Course c on SC.cid = c.cid GROUP BY c.cid,c.cname
9、查询不同老师所教不同课程平均分从高到低显示
10、按照各科平均成绩从低到高和及格率百分比从高到低显示
11、查询和‘2’号的同学 学习的课程完全相同的其他同学的学号和姓名
12、查询学过‘黄观’老师所教的所有课的同学的学号、姓名 ---包括 不止学过黄观老师的课
13、把 ‘SC’ 表中 ’黄观‘ 老师教的课的成绩都更改为此课程的平均成绩
14、查询 课程编号‘2’ 的成绩 比 课程编号‘1’ 课程低的所有同学的学号、姓名
15、查询没学过“黄观“老师课的同学的学号、姓名
16、查询平均成绩大于60分的同学的学号和平均成绩