您的位置:首页 > 数据库 > SQL语言 > 正文

SQL中Union,Intersect,Except

更多 时间:2014-12-18 类别:数据库 浏览量:589

SQL中Union,Intersect,Except

SQL中Union,Intersect,Except

一、SQL中Union、Intersect、Except的含义

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

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

3、union返回两个结果集的并集。

 

二、限制条件

(1)所有查询中的列数和列的顺序必须相同。

(2)比较的两个查询结果集中的列数据类型可以不同但必须兼容。

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

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

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

(6)通过比较行来确定非重复值时,两个 NULL 值被视为相等。(EXCEPT 或 INTERSECT 返回的结果集中的任何列的为空性与操作数左侧的查询返回的对应列的为空性相同)

 

三、SQL中Union、Intersect、Except实例

 

  •  
  • SQL 代码   复制
  • 
    create table t1(id int,mark char(2))
    go
    create table t2(id int,mark char(2))
    go
    insert into t1
        select 1,'t1' union all
        select 2,'t2' union all
        select 3,'t3' union all
        select 4,'t4'
    go
    insert into t2
        select 2,'t2' union all
        select 3,'m3' union all
        select 5,'m5' union all
        select 6,'t6'
    go
    select * from t1
    EXCEPT
    select * from t2
    go
    select * from t1
    INTERSECT
    select * from t2
    go
    
    --EXCEPT结果集为
    --1    t1
    --3    t3
    --4    t4
    
    --INTERSECT结果集为
    --2    t2
    
    		
  •  

    四、EXCEPT和INTERSECT的优先级

     

  •  
  • SQL 代码   复制
  • 
    create table t3(int id,mark char(2))
    go
    insert into t3
        select 3,'t3' union all
        select 3,'r3' union all
        select 5,'m5' union all
        select 5,'r5' union all
        select 7,'b7' union all
        select 8,'b8'
    go
    select * from t1
    EXCEPT
    select * from t2
    INTERSECT
    select * from t3
    
    --运行结果
    --1    t1
    --2    t2
    --3    t3
    --4    t4
    
    		
  • 执行过程

    t2和t3先进行的INTERSECT运算,得出5 m5结果集,再和t1进行EXCEPT运算。

     

    标签:SQL
    您可能感兴趣