In适合内表比外表数据小的情况
Exists适合内表比外表数据大的情况
通常情况下采用 exists 要比 in 效率高,因为 IN 不走索引
在SQL中,IN和EXISTS是两种用于过滤数据的关键字。它们的区别在于它们的使用方式和它们在执行查询时的行为。
-
IN关键字:IN关键字用于比较一个列值是否属于一个给定的值列表。它的语法如下:
SELECT 列名 FROM 表名 WHERE 列名 IN (值1, 值2, 值3, ...)
IN关键字将查询结果限制为满足列值在给定列表中的行。
例如,下面的查询将返回属于给定城市列表的所有顾客:
SELECT * FROM Customers WHERE City IN ('New York', 'London', 'Paris')
-
EXISTS关键字:EXISTS关键字用于检查一个子查询是否返回结果。它的语法如下:
SELECT 列名 FROM 表名 WHERE EXISTS (子查询语句)
EXISTS关键字将查询结果限制为满足子查询返回结果的行。
例如,下面的查询将返回至少有一笔订单的所有顾客:
SELECT * FROM Customers WHERE EXISTS (SELECT * FROM Orders WHERE Customers.CustomerID = Orders.CustomerID)
总结:
- IN关键字用于过滤行,根据列值是否在给定值列表中进行比较。
- EXISTS关键字用于过滤行,根据子查询是否返回结果进行判断。
在实际使用中,IN适用于离散的值列表,而EXISTS则适用于需要根据相关表的存在与否来过滤结果的情况。由于EXISTS只需判断子查询是否返回结果,它通常比IN运算更高效。