SQL - EXIST还是全部?

Len*_*ani 2 sql sql-server

我有两个不同的表学生和成绩; 成绩表有一个属性student_id,它从学生表中引用student_id.我怎样才能找到哪个学生的成绩?

如果不清楚,

Student     ID     Name
   1         1       John        
   2         2       Paul
   3         3       George
   4         4       Mike
   5         5       Lisa

Grade     Student_Id   Course   Grade
   1          1         Math       A
   2          1         English    B
   3          1         Physics    C
   4          2         Math       A
   5          2         English    A
   6          2         Physics    B
   7          3         Economics  A
   8          4         Art        C
   9          5         Biology    A

Assume there is only grade a,b,c (no d, e or fail) 
Run Code Online (Sandbox Code Playgroud)

我只想找到John,因为他有a,b,c等级,而其他学生如Paul(2)不应该被选中,因为他没有成绩c.无论他选择哪个课程都没关系,我只需要找出他是否有可用的所有成绩.

感觉像我应该存在的东西或所有功能在SQL但不确定.请帮忙.先感谢您.

Gor*_*off 6

我会用GROUP BYHAVING,但这样的:

SELECT s.Name
FROM Student s JOIN
     Grade g
     ON s.ID = g.Student_Id
GROUP BY s.id, s.Name
HAVING COUNT(DISTINCT g.Grade) = (SELECT COUNT(DISTINCT g2.grade) FROM grade g2);
Run Code Online (Sandbox Code Playgroud)

你说"那里的所有等级",所以查询不应该使用常量.