1.介绍
EXCEPT和INTERSECT运算符使您可以比较两个或多个SELECT语句结果并返回非重复值
2.区别
EXCEPT运算符返回由EXCEPT运算符左侧查询返回、而又不包含在右侧查询所返回值中所有非重复值
INTERSECT返回由INTERSECT运算符左侧和右侧查询都返回所有非重复值
3.注意事项
(1).使用EXCEPT或INTERSECT比较结果集必须具有相同结构它们列数必须相同并且相应结果集列数据类型必须兼容
(2).INTERSECT运算符优先于EXCEPT
(3).SELECT INTO必须是包含INTERSECT或EXCEPT运算符语句中第个查询用来创建容纳最终结果集表
(4).ORDER BY子句中列名或别名必须引用左侧查询返回列名
4.例题:
--建立3个表分别插入数据
create table TableA(col1 )
insert o TableA select 1
insert o TableA select 1
insert o TableA select 2
insert o TableA select 3
insert o TableA select 4
insert o TableA select 4
insert o TableA select 5
insert o TableA select null
insert o TableA select null
create table TableB(col2 )
insert o TableB select null
insert o TableB select 1
insert o TableB select 2
insert o TableB select 3
create table TableC(col3 )
insert o TableC select 1
insert o TableC select 5
insert o TableC select 6
--利用EXCEPT
--找出TableA表col1列不存在Tablec表col1列所有非重复值
SELECT col1 FROM TableA
EXCEPT
SELECT col3 FROM Tablec
结果如下:
col1
-----------
NULL
2
3
4
--sql 2000版本用not exists实现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是得不到上述结果
--空值表示值未知空值区别于空白或零值没有两个相等空值
--比较两个空值或将空值和任何其他值相比均返回未知这是每个空值均为未知
--使用IN或NOT IN比较后返回所有空值都将返回UNKNOWN
--将空值和IN或NOT IN起使用会产生意外结果
SELECT col1
FROM TableA
where col1 not in(SELECT col3 FROM Tablec)
group by col1
结果如下:
col1
-----------
2
3
4
--INTERSECT运算符优先于EXCEPT
--运算步骤是:先运算TableB和TableCINTERSECT,再和TableA运算EXCEPT
SELECT col1 FROM TableA
EXCEPT
SELECT col2 FROM TableB
INTERSECT
SELECT col3 FROM TableC
结果如下:
col1
-----------
NULL
2
3
4
5
--SELECT INTO应用
--SELECT INTO必须是语句中第个查询
--我记得SELECT INTO和UNION运算符使用也是这样规则
SELECT col1
o #tem
FROM TableA
EXCEPT
SELECT col3
FROM Tablec
select * from #tem
drop table #tem
结果如下:
col1
-----------
NULL
2
3
4
--ORDER BY子句
--ORDER BY子句中列名或别名必须引用左侧查询返回列名
SELECT col1 FROM TableA
INTERSECT
SELECT col3 FROM TableC
order by col1
结果如下:
col1
-----------
1
5
最新评论