这两个查询有什么区别?

Whats the difference between these two queries?

SELECT DISTINCT S.sname
FROM   student S,
       enrolled E1,
       enrolled E2,
       class C1,
       class C2
WHERE  S.snum = E1.snum
       AND S.snum = E2.snum
       AND E1.cname <> E2.cname
       AND E1.cname = C1.NAME
       AND E2.cname = C2.NAME
       AND C1.meets_at = C2.meets_at;  

SELECT DISTINCT S.sname
FROM   student S
WHERE  S.snum IN (SELECT E1.snum
                  FROM   enrolled E1,
                         enrolled E2,
                         class C1,
                         class C2
                  WHERE  E1.snum = E2.snum
                         AND E1.cname <> E2.cname
                         AND C1.meets_at = C2.meets_at);  

两个查询都在执行并显示输出 第一个查询显示输出为空集,而第二个查询显示一些非空输出

我认为这两个查询都会给我相同且正确的输出,但只有第二个查询显示正确的结果。 谁能解释一下这两个查询之间的区别是什么? 提前致谢。

在第二个查询中 "Es" 和 "Cs" 之间没有指定连接关系,因此这将是一个交叉连接(一切都匹配)。您在第一个查询中有这个,而在第二个查询中没有可比性:

       AND E1.cname = C1.NAME
       AND E2.cname = C2.NAME