Я просто читал об EXCEPT и INTERSECT в библиотеке MSDN и наткнулся на этот пример использования INTERSECT:
USE AdventureWorks2008R2 GO
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 238 Rows (products that have work orders)
Возможно, я старомодный, но я обычно использовал следующий код для достижения того же результата:
SELECT P.ProductID
FROM Production.Product P
INNER JOIN Production.WorkOrder W ON W.ProductID = P.ProductID
Я что-то упустил, или INTERSECT так же, как INNER JOIN? Есть ли преимущество в производительности для использования одного над другим?
Тот же вопрос для КРОМЕ. Как это:
USE AdventureWorks2008R2;
GO
SELECT ProductID
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 266 Rows (products without work orders)
отличается от этого:
SELECT P.ProductID
FROM Production.Product P
LEFT JOIN Production.WorkOrder W ON W.ProductID = P.ProductID
WHERE W.ProductID IS NULL
?