2010-07-26 45 views
6

Tôi đã viết và vượt qua 70-433 (kỳ thi MCTS SQL 2008) và đang xem xét khi tôi nhận ra rằng tôi đã làm những gì INTERSECT thực hiện với truy vấn phụ WHERE IN, cũng như EXCEPT với truy vấn con WHERE NOT IN.Sự khác biệt giữa INTERSECT và WHERE IN là gì?

Có sự khác biệt nào giữa việc sử dụng các lệnh mới thay vì truy vấn con không?

Trả lời

4

INTERSECTEXCEPT so sánh tất cả các giá trị đã chọn trong các hàng được trả lại trong khi WHERE INWHERE NOT IN chỉ so sánh một cột tại một thời điểm.

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

Cảm ơn các bạn. Bạn là một quý ông và một wiz sql. Thumbs up. – callisto

4

Có một sự khác biệt quan trọng trong cách họ xử lý 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) 
Các vấn đề liên quan