INTERSECT 和 INNER JOIN 之间有根本区别吗?



我知道,INNER JOIN是为引用的键而INTERSECT不是。但在某些情况下,他们都可以做同样的事情。那么,以下两个表达式之间有区别(性能或其他方面(吗?如果有,哪一个更好?

表达式 1:

SELECT id FROM customers 
INNER JOIN orders ON customers.id = orders.customerID;

表达式 2:

SELECT id FROM customers
INTERSECT
SELECT customerID FROM orders

即使在您的情况下,它们也非常不同。

如果id在任一表中重复,则该INNER JOIN将返回重复项。INTERSECT删除重复项。INNER JOIN永远不会NULL回来,但INTERSECTNULL回来。

两者非常不同;INNER JOIN是一个运算符,通常与一组有限的列匹配,并且可以从任一表中返回零行或更多行。INTERSECT是一个基于集合的运算符,它比较两个集合之间的完整行,并且永远不会返回比较小表中更多的行。

例如,请尝试以下操作:

CREATE TABLE #a (id INT)
CREATE TABLE #b (id INT)
INSERT INTO #a VALUES (1), (NULL), (2)
INSERT INTO #b VALUES (1), (NULL), (3), (1)
SELECT a.id FROM #a a
INNER JOIN #b b ON a.id = b.id
SELECT id FROM #a
INTERSECT
SELECT id FROM #b

最新更新