SQL中EXISTS和IN之间的区别?
SQL中的EXISTS
和IN
子句有什么区别?
我们什么时候应该使用EXISTS
,什么时候应该使用IN
?
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 ... )
if
条件语句(如exists
比count
更快,那么这是最有用的。
in
最适合用于需要传递静态列表的地方:
select * from [table]
where [field] in (1, 2, 3)
当你在有一个表in
声明这让使用更感join
,但大多是不应该的问题。 查询优化器应该返回相同的计划。 在一些实现(主要是旧的,如微软的SQL Server 2000) in
的查询总是会得到一个嵌套的加盟计划,而join
查询将使用嵌套,合并或哈希适当。 更现代的实现更智能,即使in
使用时也可以调整计划。
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)
基于规则优化器:
EXISTS
比IN
快得多。 IN
比EXISTS
更快。 基于成本优化器:
上一篇: Difference between EXISTS and IN in SQL?
下一篇: JAXB invalid XML structure while working with ArrayList