[SQL 高级查询运算符的用法 UNION (ALL),EXCEPT(ALL),INTERSECT(ALL) ]

 

 

今天看到 三个查询运算符,给大家分享分享

为此我建立了两张表分别为 Articles 和  newArticles

我建立的时候,只建立了一张表 Articles   ,表 newArticles 是根据SQL语句

SELECT * INTO newArticles FROM Articleszhij

直接创建的

显示数据为


UNION (ALL)

UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中
任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION AL
L),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自
TABLE2。

SELECT Articles_Title  FROM dbo.newArticles
 UNION   
SELECT Articles_Title FROM Articles 

显示效果 

SELECT Articles_Title  FROM dbo.newArticles
 UNION ALL
SELECT Articles_Title FROM Articles 

显示效果


 EXCEPT(ALL)

EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重
复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消
除重复行。

SELECT Articles_Title FROM Articles 
EXCEPT 
SELECT Articles_Title  FROM dbo.newArticles

显示效果

SELECT Articles_Title  FROM dbo.newArticles
EXCEPT 
SELECT Articles_Title FROM Articles 

显示效果

提示:数据的不同和表查询的顺序有关;  因版本问题, EXCEPT(ALL) 无法查询;


 INTERSECTALL(ALL)  

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复
行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),
不消除重复行。

SELECT Articles_Title FROM Articles  
INTERSECT 
SELECT Articles_Title  FROM dbo.newArticles

显示效果

提示:因版本问题, INTERSECTALL(ALL)  无法查询;


 总结: UNION 返回两个结果集的并集 重复行合并,UNION ALL, 返回两个结果集的并集,重复行 不合并

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

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

限制条件:  

(1)所有查询中的列数和列的顺序必须相同
(2)比较的两个查询结果集中的列数据类型可以不同但必须兼容。
(3)比较的两个查询结果集中不能包含不可比较的数据类型(xml、text、ntext、image 或非二进制 CLR 用户定义类型)的列
(4)返回的结果集的列名与操作数左侧的查询返回的列名相同。ORDER BY 子句中的列名或别名必须引用左侧查询返回的列名。
(5)不能与 COMPUTE 和 COMPUTE BY 子句一起使用。
(6)通过比较行来确定非重复值时,两个 NULL 值被视为相等。(EXCEPT 或 INTERSECT 返回的结果集中的任何列的为空性与操作数左侧的查询返回的对应列的为空性相同。)
原文地址:https://www.cnblogs.com/shaopang/p/6913372.html