sql里面EXCEPT、INTERSECT的区别
2017-01-16 17:08
239 查看
用法区别:
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)
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)
相关文章推荐
- SQL中Union,Intersect,Except的区别
- Sql Server2005 Transact-SQL 新兵器学习总结之-EXCEPT和INTERSECT运算符
- SQL 2005 except,intersect
- SQL中EXCEPT和Not in的区别
- LINQ to SQL语句(8)之Concat/Union/Intersect/Except
- SQL中EXCEPT和NOT IN的区别
- SQL中EXCEPT和Not in的区别?
- SQL基础——UNION, EXCEPT, INTERSECT
- SQL关键字 except和except all的含义和区别
- 探讨 T-SQL 的 EXISTS、EXCEPT、INTERSECT 算符
- SQL基础之 - UNION,UNION ALL, EXCEPT, INTERSECT图形小结
- EXCEPT 和 INTERSECT (Transact-SQL)
- Sql Server2005 Transact-SQL 新兵器学习总结之-EXCEPT和INTERSECT运算符
- EXCEPT 和 INTERSECT快速比较SQL表异同
- [Sql]EXCEPT 和 INTERSECT关键字
- LINQ to SQL语句(8)之Concat/Union/Intersect/Except
- SQL中 EXCEPT、INTERSECT用法
- SQL中EXCEPT和Notin的区别
- LINQ to SQL语句(8)之Concat/Union/Intersect/Except
- sql之union,intersect,except语句