2010-07-26 11 views
6

J'ai écrit et réussi 70-433 (examen MCTS SQL 2008) et examinais quand j'ai réalisé que je faisais ce que INTERSECT fait avec une sous-requête WHERE IN, ainsi que EXCEPT avec une sous-requête WHERE NOT IN.Quelle est la différence entre INTERSECT et WHERE IN?

Y a-t-il des différences entre l'utilisation des nouvelles commandes au lieu des sous-requêtes?

Répondre

4

INTERSECT et EXCEPT comparez toutes les valeurs sélectionnées dans les lignes retournées tandis que WHERE IN et WHERE NOT IN ne comparez qu'une seule colonne à la fois.

SELECT name,date from customers 
EXCEPT 
SELECT name, date from orders 
+0

Merci monsieur monsieur. Vous êtes un gentleman et un wiz sql. Pouce en l'air. – callisto

4

Il y a une différence importante dans la façon dont ils gèrent 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) 
Questions connexes