两个Sql查询之间的区别[重复]

Posted

技术标签:

【中文标题】两个Sql查询之间的区别[重复]【英文标题】:Difference between two Tsql queries [duplicate] 【发布时间】:2018-10-25 07:10:03 【问题描述】:

哪个查询更好,两者有什么区别

    SELECT custid, companyname
    FROM Sales.Customers AS C
    WHERE EXISTS
    (SELECT *
    FROM Sales.Orders AS O
    WHERE O.custid = C.custid
    AND O.orderdate = '20180212');



    SELECT custid, companyname
    FROM Sales.Customers AS C
    INNER JOIN Sales.Orders AS O
    on O.custid = C.custid
    AND O.orderdate = '20180212'

【问题讨论】:

第二个查询可能返回更多行。 (如果客户有多个订单。) 接受的答案解释了存在和内部连接之间的区别 【参考方案1】:

这两个查询实际上可能具有相同的执行计划,具体取决于数据和数据库。这两个查询之间的主要结构差异是,如果在给定日期匹配多个订单,则连接版本可能会导致给定客户记录被重复若干次。 EXISTS 查询不会发生这种重复。因此,要使第二个加入版本相同,您可以SELECT DISTINCT:

SELECT DISTINCT custid, companyname
FROM Sales.Customers c
INNER JOIN Sales.Orders o
    ON o.custid = c.custid
WHERE o.orderdate = '20180212';

EXISTS 查询通常是表达查询的最有效方式。您使用这两个版本中的哪一个取决于您喜欢哪个、您想要什么输出,以及哪个版本似乎有更好的执行计划。

【讨论】:

以上是关于两个Sql查询之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

or和union区别

SQL总结 连表查询

Hibernate中HQL和条件查询之间的区别[重复]

SQL Server 中这两个循环删除查询有啥区别

SQL 查询:EXTRACT(DATE FROM timestamp) 与 WHERE 时间戳之间的区别

SQL中的语句和查询之间的区别