2010-07-26 61 views
6

我已经写了并且通过了70-433(SQL 2008 MCTS考试),并且当我意识到我一直在做什么INTERSECTWHERE IN子查询以及EXCEPTWHERE NOT IN子查询。INTERSECT和WHERE IN有什么区别?

使用新命令而不是子查询有什么区别吗?

回答

4

INTERSECTEXCEPT比较返回的行中的所有选定值,而WHERE INWHERE NOT IN一次只比较一列。

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

谢谢你,先生。你是一个绅士和一个数据库管理员。 竖起大拇指。 – callisto 2010-07-26 14:05:56

4

有它们处理NULL小号

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)