SQL查询以查找最高GPA

时间:2017-08-03 18:00:35

标签: sql

我目前正在参加斯坦福大学的在线MOOC课程。我有一个关于SQL查询的问题。我有三个表:.Range(Cells(4, NextColumn), Cells(OutputLastRow, NextColumn)).Formula = _ "=VLOOKUP(D4,'" & sourceSheet.Name & "'!$A$2:$H$" & SourceLastRow & ",6,0)*1000" & "*" & ColumnStr3 & 4 StudentApply。学生有学生证(College)和GPA(sID)。 Apply具有学院名称(GPA)和学生ID。学院有大学名称(cName),学院所在州(cName)。这是老师正在使用的查询:

state

我不明白为什么我们需要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) 。我知道它确保它们匹配,但为什么这是必要的?

3 个答案:

答案 0 :(得分:1)

你的教授正在使用旧式连接,这种连接在这里难以理解,是用新式连接编写的

Select distinct College.cName, state, GPA
From Student
JOIN College on College.cName = Apply.cName
JOIN Apply on Apply.sID = Student.sID
WHERE GPA >= all (
  select GPA 
  from Student
  JOIN Apply ON Student.sID = Apply.sID AND Apply.cName = College.cName
)

旧式连接在90年代很老了。你的老师生活在过去。

当然,这个例子对于任何一般教学来说都是可怕的,但如果学生们甚至不理解简单的连接,那就更糟了。

对不起。

  

旁注 - 如果您的问题是,Student.sID = Apply.sID AND Apply.cName = College.cName中的订单是否重要 - 答案是否定的。在这样的比较中,它与Apply.sID = Student.sID AND College.cName = Apply.cName

相同

答案 1 :(得分:0)

这是为了找到学生已申请大学的Apply表中的所有匹配行,并找到学生从大学表中申请的所有大学名称。另外,让我纠正你的学生,申请和学院不是这里的数据库。它们是数据库的表。希望这是有道理的。

答案 2 :(得分:0)

该专栏:来自大学,申请,学生 是一个隐式连接。是Student.sID = Appply.sID和Apply.cName = College.cName行告诉查询如何将表匹配在一起。

如果没有给出任何限制,它将采取学院表格中的每个项目,将其复制为申请中的行数,并修改每行适用于学院的每一行(交叉乘法)。然后复制新创建的表格' College加入Apply'对于表Student上的每个项目,将表Student上的每个项目应用于每个重复的行。