SQL中EXISTS和IN之间的区别?

SQL中的EXISTSIN子句有什么区别?

我们什么时候应该使用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条件语句(如existscount更快,那么这是最有用的。

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)

基于规则优化器:

  • 当子查询结果非常大时, EXISTSIN快得多。
  • 当子查询结果非常小时, INEXISTS更快。
  • 基于成本优化器:

  • 没有区别。
  • 链接地址: http://www.djcxy.com/p/41865.html

    上一篇: Difference between EXISTS and IN in SQL?

    下一篇: JAXB invalid XML structure while working with ArrayList