SQL中的EXISTS子句和IN子句有什么区别?
什么时候应该使用EXISTS,什么时候应该使用IN?
SQL中的EXISTS子句和IN子句有什么区别?
什么时候应该使用EXISTS,什么时候应该使用IN?
当前回答
如果子查询返回多个值,则可能需要执行外层查询—如果条件中指定的列中的值与子查询结果集中的任何值匹配。要执行此任务,需要使用in关键字。
您可以使用子查询来检查一组记录是否存在。为此,您需要使用exists子查询子句。exists关键字总是返回true或false值。
其他回答
哪个更快取决于内部查询获取的查询数量:
当您的内部查询获取数千行,那么EXIST将是更好的选择 当您的内部查询获取少量行时,那么IN将更快
EXIST对true或false进行评估,但在比较多个值。当你不知道记录是否存在时,你应该选择exist
Exists关键字计算true或false,而IN关键字比较相应子查询列中的所有值。 另一个Select 1可与Exists命令一起使用。例子:
SELECT * FROM Temp1 where exists(select 1 from Temp2 where conditions...)
但IN的效率较低,所以存在更快。
基于规则优化器:
当子查询结果非常大时,EXISTS比IN快得多。 当子查询结果很小时,IN比EXISTS快。
基于成本优化器:
没有区别。
我发现使用EXISTS关键字通常非常慢(这在Microsoft Access中非常真实)。 相反,我以这样的方式使用join操作符: should-i-use-the-keyword-exists-in-sql
如果使用IN操作符,SQL引擎将扫描从内部查询中获取的所有记录。另一方面,如果我们使用EXISTS, SQL引擎将在找到匹配项后立即停止扫描过程。