我很难理解创建视图 TRANSCRIPTVIEW 是如何设法为那些没有参加课程的人设置 0 级的。解释会有所帮助,解决方案和问题如下。谢谢。
学生(ID,姓名)成绩单(StudId,课程名称,学期,年级)
用 SQL 编写以下查询: 创建所有学生(Id、Name)的列表,并为每个学生列出 S2002 学期所学课程的平均成绩。请注意,可能有学生在 S2002 中没有参加任何课程。对于这些,平均成绩应列为 0。 解决方案:我们首先创建一个视图,该视图在 TRANSCRIPT 中添加行,这些行将每个学生注册到一个分数为 0 的 NULL 课程。因此,在 'S2002 学期没有参加任何课程的学生' 该学期的平均成绩为 0。
以下是让我感到困惑的地方,它是如何工作的,为什么会这样?
CREATE VIEW TRANSCRIPTVIEW AS (
( SELECT * FROM Transcipt)
UNION
(
SELECT S.Id,NULL,’S2002’,0
FROM Student S)
WHERE S.Id NOT IN (
SELECT T.StudId
FROM Transcript T
WHERE T.Semester = ’S2002’) )
)
Remaining solution:
SELECT S.Id, S.Name, AVG(T.Grade)
FROM Student S, TRANSCRIPTVIEW T
WHERE S.Id = T.StudId AND T.Semester = ’S2002’ GROUP BY S.Id