sql server 2005中的except和INTERSECT運(yùn)算
一直學(xué)數(shù)據(jù)庫(kù)的都知道,關(guān)系運(yùn)算有交,差,并,等運(yùn)算,而之前的版本一直只看到并,好象很少看到有差,交的運(yùn)算顯式的表達(dá)在操作SQL語(yǔ)句中,現(xiàn)在好了,SQL SERVER 2005中有差,交運(yùn)算了,分別是except和intersect,、今天看到,學(xué)習(xí)之,并舉例如下:
EXCEPT 和 INTERSECT 運(yùn)算符使您可以比較兩個(gè)或多個(gè) SELECT 語(yǔ)句的結(jié)果并返回非重復(fù)值。EXCEPT 運(yùn)算符返回由 EXCEPT 運(yùn)算符左側(cè)的查詢返回、而又不包含在右側(cè)查詢所返回的值中的所有非重復(fù)值。INTERSECT 返回由 INTERSECT 運(yùn)算符左側(cè)和右側(cè)的查詢都返回的所有非重復(fù)值。使用 EXCEPT 或 INTERSECT 比較的結(jié)果集必須具有相同的結(jié)構(gòu)。它們的列數(shù)必須相同,并且相應(yīng)的結(jié)果集列的數(shù)據(jù)類型必須兼容。
MSDN上的例子能說(shuō)明問(wèn)題:
TableA (col1 int) TableB (col1 int) TableC (col1 int)
NULL
NULL
2
NULL
1
2
NULL
3
2
1
4
4
2
4
4
2
2
3
4
4
使用 EXCEPT,以下查詢將返回由 EXCEPT 操作數(shù)左側(cè)的查詢返回、而又不包含在右側(cè)查詢所返回的值中的所有非重復(fù)值。
SELECT * FROM TableA EXCEPT SELECT * FROM TableB結(jié)果如下:
Col1;;;;----------- 2
(1 row(s) affected)使用 INTERSECT,此查詢將返回由 INTERSECT 運(yùn)算符左側(cè)和右側(cè)的查詢都返回的所有非重復(fù)值。
SELECT * FROM TableA INTERSECT SELECT * FROM TableB結(jié)果如下:
Col1-----------NULL134(4 row(s) affected)INTERSECT 運(yùn)算符優(yōu)先于 EXCEPT。例如,以下查詢使用了這兩個(gè)運(yùn)算符:
SELECT * FROM TableA EXCEPT SELECT * FROM TableB INTERSECT SELECT * FROM TableC結(jié)果如下:
Col1;;;;----------- NULL123
(4 row(s) affected) http://blog.csdn.net/lee576/archive/2007/01/25/1493671.aspx
