sql里面EXCEPT、INTERSECT的区别

用法区别:

EXCEPT   返回两个结果集的差(从左查询中返回右查询没有找到的所有非重复的值);

INTERSECT  返回两个结果集的交集(返回两个查询结果里面所有非重复的值);

UNOIN  返回两个结果集的并集。

语法:

(select A,B from TAB_1)

{EXCEPT  / INTERSECT / UNOIN }

(select A,B from TAB_2)

限制条件:

1)所有查询中列数和列必须一致;

2)比较的两个列的数据类型可以不一样但是必须兼容;

3)比较的两个列不能包含不可比较的数据类型(xml、text、ntext、image 或非二进制 CLR 用户定义类型);

4)返回的结果集的列名与操作数左侧的查询返回的列名相同。ORDER BY 子句中的列名或别名必须引用左侧查询返回的列名。

5)不能与 COMPUTE 和 COMPUTE BY 子句一起使用。

6)通过比较行来确定非重复值时,两个 NULL 值被视为相等

与表达式里面其他运算符一起使用时的执行顺序:

1)括号里面的表达式;

2)INTERSECT操作数;

3)基于在表达式中的位置从左到右求值的 EXCEPT 和 UNION。

注意:

如果 EXCEPT 或 INTERSECT 用于比较两个以上的查询集,则数据类型转换是通过一次比较两个查询来确定的,并遵循前面提到的表达式求值规则。

举例:

create table T1(id int,mark char(2));
INSERT INTO T1 (ID, MARK) VALUES (1, null);
INSERT INTO T1 (ID, MARK) VALUES (2, null);
INSERT INTO T1 (ID, MARK) VALUES (3, '1 ');
INSERT INTO T1 (ID, MARK) VALUES (4, '3 ');
INSERT INTO T1 (ID, MARK) VALUES (5, '5 ');
INSERT INTO T1 (ID, MARK) VALUES (6, '6 ');
INSERT INTO T1 (ID, MARK) VALUES (7, '9 ');

create table T2(id int,mark char(2));

INSERT INTO T2 (ID, MARK) VALUES (1, null);
INSERT INTO T2 (ID, MARK) VALUES (2, '2 ');
INSERT INTO T2 (ID, MARK) VALUES (3, '3 ');
INSERT INTO T2 (ID, MARK) VALUES (4, '5 ');
INSERT INTO T2 (ID, MARK) VALUES (5, '6 ');
INSERT INTO T2 (ID, MARK) VALUES (6, '8 ');

T1 (MARK)                                                   T2(MARK)

NULL                                                            NULL

NULL                                                            2

1                                                                    3

3                                                                    5

5                                                                    6

6                                                                    8

9

 

(SELECT MARK FROM T1)  EXCEPT (SELECT MARK FROM T2) ;

结果  1,9

(SELECT MARK FROM T1)  INTERSECT (SELECT MARK FROM T2) ;

结果  3,5,6,(null)

(SELECT MARK FROM T1)  UNION (SELECT MARK FROM T2) ;

结果  1,2,3,5,6,8,9 ,(null)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值