SQL中EXISTS和IN的区别是什么?

6 浏览
0 Comments

SQL中EXISTS和IN的区别是什么?

SQL中EXISTSIN从句的区别是什么?

在哪些情况下应该使用EXISTS,在哪些情况下应该使用IN

admin 更改状态以发布 2023年5月23日
0
0 Comments

EXISTS可以告诉你查询是否返回任何结果,例如:

SELECT * 
FROM Orders o 
WHERE EXISTS (
    SELECT * 
    FROM Products p 
    WHERE p.ProductNumber = o.ProductNumber)

IN用于将一个值与多个值进行比较,可以使用字面值,如下所示:

SELECT * 
FROM Orders 
WHERE ProductNumber IN (1, 10, 100)

您也可以在 IN子句中使用查询结果,如下所示:

SELECT * 
FROM Orders 
WHERE ProductNumber IN (
    SELECT ProductNumber 
    FROM Products 
    WHERE ProductInventoryQuantity > 0)

0
0 Comments

exists关键字可以这样使用,但实际上它的目的是为了避免计数:

--this statement needs to check the entire table
select count(*) from [table] where ...
--this statement is true as soon as one match is found
exists ( select * from [table] where ... )

这在你有条件语句的时候非常有用,因为existscount更快。

in最好用在你有一个静态列表要传递的情况下:

 select * from [table]
 where [field] in (1, 2, 3)

当你在in语句中有一个表时,使用join更有意义,但大多数情况下并不重要。查询优化器应该返回相同的计划。在某些实现中(主要是旧版本,如微软SQL Server 2000),in查询总是会得到一个嵌套的连接计划,而join查询会使用嵌套的,合并哈希等适当的计划。更现代的实现更加智能,即使使用in也可以调整计划。

0