我希望这张图片对理性表格说得够多。
SELECT count(*)
FROM Student
返回学生人数
我不确定这句话是做什么的。
SELECT c#
FROM Enrolment
GROUP BY c#
HAVING count(*) = ???
这已经被c#分组了。因此,count(*)必须返回每门课程注册的学生人数。因此,HAVING count(*) = ???
不能定义为检查两个值是否相等!如果有人能解释having
在这里的作用,我感激不尽。
添加了修改
第三个选择子句中此选择的结果是一个常量值吗?我们称之为A = 255
(学生人数的假设)
SELECT c#
FROM Enrolment
GROUP BY c#
HAVING count(*) =
(SELECT count(*)
FROM Student)
我的问题恰好是第二次选择,having count(*) = (count* in another select)
是第二次选择中C#(课程编号)的出现值与第三次选择中的S#(学号)的出现值或它就像一个for循环比较第二个选择中C#(课程编号)的不同值和学生数的值?我的困惑主要在于有条件!这是否意味着
答案 0 :(得分:1)
SELECT c#
FROM Enrolment
GROUP BY c#
HAVING count(*) = ???
您将选择所有C#
,与您在记录中的C#
次数相比较。使用having子句,您可以说您只对具有特定价值的C#
值感兴趣。
因此,在这个确切的情况下,您的子句将过滤您的结果(课程),仅包括已注册所有学生的课程。
我希望这是您正在寻找的答案。