MySQL练习题
-
-
-
- 11、查询至少有一门课与学号为“01”的同学所学相同的同学的学号和姓名
- 12、查询学习课程和"01"学号的同学完全相同的其他同学的学号和姓名
- 13、把“SC”表中“张三”老师教的课的成绩都更改为此课程的平均成绩
- 14、查询没学过"张三"老师讲授的任一门课程的学生姓名
- 15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
- 16、检索"01"课程分数小于60,按分数降序排列的学生信息
- 17、按平均成绩从高到低显示所有学生的平均成绩
- 18、查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率
- 19、按各科平均成绩从低到高和及格率的百分数从高到低顺序
- 20、查询学生的总成绩并进行排名
-
-
表结构预览

11、查询至少有一门课与学号为“01”的同学所学相同的同学的学号和姓名
SELECT DISTINCT sc.sid,sname
FROM sc
JOIN
(SELECT *
from student
WHERE sid <> '01') s
ON sc.sid = s.sid
WHERE cid IN
(
SELECT DISTINCT cid
FROM sc
WHERE sid='01'
)
GROUP BY s.sid
having COUNT(sc.cid) =
(SELECT count(distinct cid) from sc where sid = '01') -- 一定要加括号
12、查询学习课程和"01"学号的同学完全相同的其他同学的学号和姓名
SELECT DISTINCT sc.sid, sname
FROM sc
JOIN -- join的前面必须是表名!!
(SELECT *
from student
WHERE sid <> '01') s
ON sc.sid = s.sid
WHERE cid IN
(
SELECT DISTINCT cid
FROM sc
WHERE sid='01'
)
GROUP BY sc.sid
HAVING count(cid) = (SELECT count(distinct cid) from sc WHERE sid = '01')
13、把“SC”表中“张三”老师教的课的成绩都更改为此课程的平均成绩
14、查询没学过"张三"老师讲授的任一门课程的学生姓名
解法1
SELECT sid, sname FROM student -- 可以不用加表名!!
WHERE sid not in
(SELECT sid from sc