不理解这个SQL查询

时间:2014-04-29 15:55:56

标签: sql syntax

我正在关注斯坦福大学的Coursera数据库课程,这是我不明白的问题。

教师说,它返回的学院与申请人的GPA最高配对。

select distinct College.cName, state, GPA
from College, Apply, Student
where College.cName = Apply.cName
  and Apply.sID = Student.sID
  and GPA >= all
          (select GPA from Student, Apply
           where Student.sID = Apply.sID
             and Apply.cName = College.cName);

我不理解GPA >= all部分。这是否意味着我们正在寻找GPA的行>=所有申请人,而不仅仅是申请某个特定的大学?换句话说,我认为这个问题正在回归那些拥有GPA最高的申请人的大学。

3 个答案:

答案 0 :(得分:2)

College.cName = Apply.cName

这为特定的大学提供了限制。尝试删除它。

答案 1 :(得分:0)

不,因为“GPA> = ALL”语句后面的select语句与外部子句相关 - 它们共享相同的表相关名称“College”“Apply”“Student”。这意味着您将有效地查看WHERE子句当前正在引用的“College” - 即对于College_A,我们查找College_A中的所有学生,对于College_B,我们查找College_B等内的所有学生。

答案 2 :(得分:0)

让我们说:

GPA >= all= MAX (GPA)相同:它只会选择拥有GPA greater or equal的大学所有其他大学GPA。

以下查询是相同的,但更容易理解:

select distinct College.cName, state, GPA
from College, Apply, Student
where College.cName = Apply.cName
  and Apply.sID = Student.sID
  and GPA =
          (select MAX(GPA) from Student, Apply
           where Student.sID = Apply.sID
             and Apply.cName = College.cName);