📌  相关文章
📜  门| Sudo GATE 2020 Mock II(2019年1月10日)|问题19

📅  最后修改于: 2021-06-29 11:21:54             🧑  作者: Mango

考虑以下关系模式:

STUDENT(SNO, SNAME, DEPT)
ENROLL(CNO, SNO, GRADE)
COURSE(CNO, DEPT)
PREREQ(CNO, PNO) 

带下划线的键。列ENROLL(SNO)是引用STUDENT(SNO)的外键。除了COURSE中的一列外,所有CNO和PNO列的出现都是引用COURSE(CNO)的外键。

SELECT E1.CNO, S.SNAME
FROM ENROLL E1, STUDENT S
WHERE E1.SNO = S.SNO
      AND NOT EXISTS ( SELECT * FROM ENROLL E2
                       WHERE E2.CNO = E1.CNO
                            AND E2.GRADE > E1.GRADE )

查询的输出是什么?
(A)对于每门课程,请返回得分最高的学生的姓名。
(B)对于每个学生,返回课程名称。
(C)对于每门课程,返回从未获得最高分的学生的姓名。
(D)这些都不是。答案: (A)
说明:给定SQL查询,

SELECT E1.CNO, S.SNAME
FROM ENROLL E1, STUDENT S
WHERE E1.SNO = S.SNO
      AND NOT EXISTS ( SELECT * FROM ENROLL E2
                       WHERE E2.CNO = E1.CNO
                            AND E2.GRADE > E1.GRADE )

它会为每门课程返回得分最高的学生的姓名。

选项(A)是正确的。这个问题的测验