现有模式定义如下:
student (sno, sname, sage, ssex, sdept)
dourse (cno, cname, ccredit)
sc (sno, cno, grade)
(1) 查询选修了与学号为“1802387”相同课程的学生姓名【签到题1】
SELECT sname
FROM student, sc
WHERE student.sno = sc.sno AND sc.cno IN (SELECT cno
FROM sc
WHERE sc.sno = '1802387');
(2) 查询每个学院的学生平均年龄,按平均年龄降序返回【签到题2】
SELECT AVG(sage)
FROM student
GROUP BY sdept
ORDER BY AVG(sage) DESC;
(3) 查询选修了所有课程的学生学号与姓名
SELECT sno, sname
FROM student
WHERE NOT EXISTS ( -- 不存在未选课程
(SELECT cno
FROM course) -- 所有课程
EXCEPT
(SELECT cno
FROM sc
WHERE sno=student.sno) -- 已选课程
);
(4) 查询超过该门课程平均分的选课记录
-- 创建临时视图
WITH avg_view(cno, avg_grade) AS
SELECT cno, AVG(grade)
FROM sc
GROUP BY cno;
-- 或创建一个视图
CREATE avg_view(cno, avg_grade) AS
SELECT cno, AVG(grade)
FROM sc
GROUP BY cno;
-- 查询
SELECT sno, cno, grage
FROM sc, avg_view
WHERE sc.cno = avg_view.cno AND grade > avg_grade;