SQL中的EXISTS子句和IN子句有什么区别?
什么时候应该使用EXISTS,什么时候应该使用IN?
SQL中的EXISTS子句和IN子句有什么区别?
什么时候应该使用EXISTS,什么时候应该使用IN?
当前回答
如果使用IN操作符,SQL引擎将扫描从内部查询中获取的所有记录。另一方面,如果我们使用EXISTS, SQL引擎将在找到匹配项后立即停止扫描过程。
其他回答
不同之处在于:
select *
from abcTable
where exists (select null)
上面的查询将返回所有记录,而下面的查询将返回空。
select *
from abcTable
where abcTable_ID in (select null)
尝试一下并观察输出。
Exists关键字计算true或false,而IN关键字比较相应子查询列中的所有值。 另一个Select 1可与Exists命令一起使用。例子:
SELECT * FROM Temp1 where exists(select 1 from Temp2 where conditions...)
但IN的效率较低,所以存在更快。
据我所知,当子查询返回NULL值时,整个语句变成NULL。在这种情况下,我们使用EXITS关键字。如果我们想在子查询中比较特定的值,那么我们使用in关键字。
基于规则优化器:
当子查询结果非常大时,EXISTS比IN快得多。 当子查询结果很小时,IN比EXISTS快。
基于成本优化器:
没有区别。
我发现使用EXISTS关键字通常非常慢(这在Microsoft Access中非常真实)。 相反,我以这样的方式使用join操作符: should-i-use-the-keyword-exists-in-sql