2010-07-26 11 views
6

que he escrito y aprobado 70-433 (examen MCTS SQL 2008) y estaba revisando cuando me di cuenta de que he estado haciendo lo INTERSECT hace con una subconsulta WHERE IN, así como EXCEPT con una subconsulta WHERE NOT IN.¿Cuál es la diferencia entre INTERSECT y WHERE IN?

¿Hay alguna diferencia entre usar los nuevos comandos en lugar de las subconsultas?

Respuesta

4

INTERSECT y EXCEPT comparar todos los valores seleccionados en las filas devueltas mientras WHERE IN y WHERE NOT IN única comparar una columna a la vez.

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

Gracias, amable señor. Eres un caballero y un wiz sql. Thumbs up. – callisto

4

Hay una diferencia importante en la forma en que manejan 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) 
Cuestiones relacionadas