В чем разница между INTERSECT и WHERE IN? - PullRequest
7 голосов
/ 26 июля 2010

Я написал и сдал 70-433 (экзамен SQL 2008 MCTS) и проверял, когда понял, что я делаю то, что INTERSECT делает с подзапросом WHERE IN, а также EXCEPT с WHERE NOT IN подзапрос.

Есть ли различия между использованием новых команд вместо подзапросов?

Ответы [ 2 ]

6 голосов
/ 26 июля 2010

INTERSECT и EXCEPT сравнивают все выбранные значения в возвращенных строках, тогда как WHERE IN и WHERE NOT IN сравнивают только один столбец за раз.

SELECT name,date from customers
EXCEPT
SELECT name, date from orders
4 голосов
/ 26 июля 2010

Существует важное различие в том, как они обрабатывают NULL s

WITH T1 AS(SELECT 1 AS COL UNION SELECT NULL),
     T2 AS (SELECT 2 AS COL UNION SELECT NULL)
SELECT * FROM T1 
INTERSECT 
SELECT * FROM T2;

.

COL
-----------
NULL

(1 row(s) affected)

.

WITH T1 AS(SELECT 1 AS COL UNION SELECT NULL),
     T2 AS (SELECT 2 AS COL UNION SELECT NULL)
SELECT * FROM T1 WHERE COL IN (SELECT COL FROM T2) ;

.

COL
-----------

(0 row(s) affected)

.

WITH T1 AS(SELECT 1 AS COL UNION SELECT NULL),
     T2 AS (SELECT 2 AS COL UNION SELECT NULL)
SELECT * FROM T1 
EXCEPT 
SELECT * FROM T2;

.

COL
-----------
1

(1 row(s) affected)

.

WITH T1 AS(SELECT 1 AS COL UNION SELECT NULL),
     T2 AS (SELECT 2 AS COL UNION SELECT NULL)
SELECT * FROM T1 WHERE COL NOT IN (SELECT COL FROM T2);

.

COL
-----------

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