在SCD库中查询课程期末成绩不低于该课的平均值的学生的姓名、课程名称与成绩。不要JOIN操作
时间: 2024-11-21 22:38:16 浏览: 10
在SCD (Surrogate Key Design) 数据库设计中,如果想查询一门课程期末成绩高于该课程平均分的学生信息,通常需要先计算出每门课程的平均分,然后通过主键或者其他间接关联的方式找到相应的学生记录。假设我们有两张表,一张是`Students`(包含学生ID和姓名),另一张是`Courses`(包含课程ID、课程名称和学生ID与成绩的关系)。由于题目要求不使用JOIN操作,我们可以分别查询和计算:
1. 计算每门课程的平均成绩:
```sql
CREATE VIEW Course_Averages AS
SELECT CourseID, AVG(Score) as AverageScore
FROM Courses
GROUP BY CourseID;
```
2. 然后在`Students`表中查找满足条件的学生:
```sql
SELECT S.StudentName, C.CourseName, C.Score
FROM Students S
INNER JOIN (
SELECT CourseID, Score
FROM Courses
WHERE Score > (SELECT AverageScore FROM Course_Averages WHERE Courses.CourseID = Course_Averages.CourseID)
) C ON S.StudentID = C.StudentID;
```
这个查询首先从`Course_Averages`视图中获取每个课程的平均分数,然后在`Courses`表中找出那些成绩高于平均分的学生及其对应信息。
注意:实际操作中,如果数据库支持子查询直接连接(例如SQL Server的CTE或子查询在FROM子句),可以简化第二个查询步骤。但在一些数据库系统中,可能确实需要如上所示分开两个步骤进行。
阅读全文