SQL Server 2005 EXCEPT與INTERSECT的區(qū)別
此文章主要向大家描述的是SQL Server 2005 EXCEPT與INTERSECT運(yùn)算符的正確使用,同時(shí)本文也有對(duì)EXCEPT與INTERSECT運(yùn)算符的實(shí)際應(yīng)用的比較,以及對(duì)其在實(shí)際操作中值得我們大家注意的相關(guān)事項(xiàng)的描述。
1.簡(jiǎn)介
SQL Server 2005 EXCEPT和INTERSECT運(yùn)算符使您可以比較兩個(gè)或多個(gè)SELECT語(yǔ)句的結(jié)果并返回非重復(fù)值。
2.區(qū)別
EXCEPT運(yùn)算符返回由EXCEPT運(yùn)算符左側(cè)的查詢返回、而又不包含在右側(cè)查詢所返回的值中的所有非重復(fù)值。
INTERSECT返回由INTERSECT運(yùn)算符左側(cè)和右側(cè)的查詢都返回的所有非重復(fù)值。
3.注意事項(xiàng)
(1).使用SQL Server 2005 EXCEPT或INTERSECT比較的結(jié)果集必須具有相同的結(jié)構(gòu)。它們的列數(shù)必須相同,并且相應(yīng)的結(jié)果集列的數(shù)據(jù)類型必須兼容
(2).INTERSECT運(yùn)算符優(yōu)先于EXCEPT
(3).SELECT INTO必須是包含INTERSECT或EXCEPT運(yùn)算符的語(yǔ)句中的***個(gè)查詢,用來(lái)創(chuàng)建容納最終結(jié)果集的表
(4).ORDER BY子句中的列名或別名必須引用左側(cè)查詢返回的列名
4.例題:
建立3個(gè)表,分別插入數(shù)據(jù)
- create table TableA(col1 int)
- insert into TableA select 1
- insert into TableA select 1
- insert into TableA select 2
- insert into TableA select 3
- insert into TableA select 4
- insert into TableA select 4
- insert into TableA select 5
- insert into TableA select null
- insert into TableA select null
- create table TableB(col2 int)
- insert into TableB select null
- insert into TableB select 1
- insert into TableB select 2
- insert into TableB select 3
- create table TableC(col3 int)
- insert into TableC select 1
- insert into TableC select 5
- insert into TableC select 6
利用SQL Server 2005 EXCEPT
找出TableA表的col1列不存在Tablec表col1列的所有非重復(fù)值
- SELECT col1 FROM TableA
- EXCEPT
- SELECT col3 FROM Tablec
結(jié)果如下:
- col1
- -
- NULL
- 2
- 3
- 4
sql 2000的版本,用not exists實(shí)現(xiàn)SQL Server 2005 EXCEPT的功能
- SELECT col1
- FROM TableA as a
- where not exists(SELECT col3 FROM Tablec where a.col1=col3)
- group by col1
sql 2000,not in是得不到上述結(jié)果的
空值表示值未知。空值不同于空白或零值。沒(méi)有兩個(gè)相等的空值。
比較兩個(gè)空值或?qū)⒖罩蹬c任何其他值相比均返回未知,這是因?yàn)槊總€(gè)空值均為未知。
使用IN或NOT IN比較后返回的所有空值都將返回UNKNOWN。
將空值與IN或NOT IN一起使用會(huì)產(chǎn)生意外結(jié)果。
- SELECT col1
- FROM TableA
- where col1 not in(SELECT col3 FROM Tablec)
- group by col1
結(jié)果如下:
- col1
- -
- 2
- 3
- 4
INTERSECT運(yùn)算符優(yōu)先于EXCEPT
運(yùn)算步驟是:先運(yùn)算TableB和TableC的INTERSECT,再和TableA運(yùn)算SQL Server 2005 EXCEPT
- SELECT col1 FROM TableA
- EXCEPT
- SELECT col2 FROM TableB
- INTERSECT
- SELECT col3 FROM TableC
結(jié)果如下:
- col1
- -
- NULL
- 2
- 3
- 4
- 5
SELECT INTO的應(yīng)用
SELECT INTO必須是語(yǔ)句中的***個(gè)查詢
我記得SELECT INTO與UNION運(yùn)算符的使用也是這樣的規(guī)則
- SELECT col1
- into #tem
- FROM TableA
- EXCEPT
- SELECT col3
- FROM Tablec
- select * from #tem
- drop table #tem
結(jié)果如下:
- col1
- -
- NULL
- 2
- 3
- 4
ORDER BY子句
ORDER BY子句中的列名或別名必須引用左側(cè)查詢返回的列名
- SELECT col1 FROM TableA
- INTERSECT
- SELECT col3 FROM TableC
- order by col1
結(jié)果如下:
- col1
- -
- 1
- 5
上述的相關(guān)內(nèi)容就是對(duì)SQL Server 2005中EXCEPT和INTERSECT運(yùn)算符的使用的描述,希望會(huì)給你帶來(lái)一些幫助在此方面。
【編輯推薦】
- SQL Server identity列,美中不足之處
- SQL Server DateTime數(shù)據(jù)類型的另類解讀
- SQL Server 2000的安全策略的正確打造
- SQL Server 數(shù)據(jù)導(dǎo)入的實(shí)際行為規(guī)范描述
- MS SQL Server問(wèn)題與其正確解答方案