两个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查询之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章