我已经通过了大量资源来研究IN
和Exists
,但对于决定查询是否与之相关的内容仍有一些混淆
如果我添加如下声明:
select * from emp where empno NOT IN (select mgr from emp)
它不返回任何数据。然而,
SELECT * FROM emp e1 where NOT EXISTS (select * from emp e2 where e1.empno=e2.mgr)
返回8行数据。
据我所知,第二个是相关查询(对于外部查询的每一行,内部查询执行)。我的问题是,是什么决定查询是以嵌套还是相关的方式运行?
如果内部查询具有与外部表列相关的条件,那么无论我们使用IN
还是EXISTS
,它都将始终充当相关查询?