TSQL INTERSECT Ключевое слово - PullRequest
       19

TSQL INTERSECT Ключевое слово

3 голосов
/ 27 января 2010

Я знал о ключевых словах SQL Server 2005/2008 ИСКЛЮЧИТЬ и INTERSECT в течение некоторого времени, но никогда не находил веских причин использовать INTERSECT вместо старого доброго UNION ключевое слово.

Может кто-нибудь объяснить, когда или почему вы бы использовали INTERSECT вместо UNION?

Ответы [ 3 ]

3 голосов
/ 27 января 2010

Они делают разные вещи.

Из MSDN:

EXCEPT возвращает любые отличные значения из левого запроса, которые также не найдены в правом запросе.

INTERSECT возвращает любые различные значения, которые возвращаются запросом слева и справа от операнда INTERSECT.

UNION Объединяет результаты двух или более запросов в один набор результатов, который включает все строки, принадлежащие всем запросам в объединении.

2 голосов
/ 27 января 2010

INTERSECT возвращает записи, найденные в обоих наборах записей

UNION возвращает записи, найденные в любых наборов записей.

EXCEPT возвращает записи, найденные в первом наборе записей, но не во втором.

Поскольку и INTERSECT, и EXCEPT могут возвращать только записи, найденные в первом наборе записей, их можно переписать с помощью объединений или предикатов IN / NOT IN.

Однако иногда они удобнее, поскольку SQL Server не поддерживает выражения IN для нескольких столбцов.

INTERSECT и EXCEPT, в отличие от JOIN и IN, обрабатывают значения NULL как совпадающие. Этот запрос:

SELECT  NULL
INTERSECT
SELECT  NULL

возвращает запись, а вот эту:

SELECT  NULL
WHERE   NULL IN
        (
        SELECT  NULL
        )

ничего не возвращает.

1 голос
/ 27 января 2010

INTERSECT обычно можно заменить на ВНУТРЕННИЕ СОЕДИНЕНИЯ, поэтому, возможно, это причина, по которой вы не находите их полезными.

Однако ИСКЛЮЧЕНИЕ - довольно интересная функция.Например, подумайте о простой системе тегов: вы помечаете каждого пользователя «значком», и вы хотите найти всех пользователей, у которых нет значка «критик», например.Вы можете сделать это легко, используя функцию EXCEPT.(Хотя: это также можно представить как LEFT JOIN .. WHERE left_site IS NULL)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...