UNION、INTERSECT和EXCEPT

UNIONINTERSECTEXCEPT用于将多个查询结果集进行组合,从而得到一个最终结果。

语法

query
{ UNION [ ALL ] | INTERSECT | EXCEPT }
query     

参数

  • UNION:返回两个查询表达式的集合运算。

  • UNION ALLALL关键字用于保留UNION中产生的重复行。

  • INTERSECT:返回只有在两个集合中同时出现的行,返回结果将删除两个集合中的重复行。

  • EXCEPT:先删除两个集合中重复的数据行,返回只在第一个集合中出现且不在第二个集合中出现的所有行。

计算顺序

  • UNIONEXCEPT集合运算符为左关联,如果未使用圆括号来改变计算顺序,则按照从左到右的顺序进行集合运算。

    例如,以下查询中,首先计算T1T2UNION,然后对UNION结果执行EXCEPT操作。

    select * from t1
    union
    select * from t2
    except
    select * from t3
    order by c1;                 
  • 在同一查询中,组合使用集合运算符时,INTERSECT运算符优先于UNIONEXCEPT运算符。

    例如,以下查询先计算T2T3的交集,然后将计算得到的结果与T1进行并集。

    select * from t1
    union
    select * from t2
    intersect
    select * from t3
    order by c1;                  
  • 可以使用圆括号改变集合运算符的计算顺序。

    以下示例中,将T1T2的并集结果与T3执行交集运算。

    (select * from t1
    union
    select * from t2)
    intersect
    (select * from t3)
    order by c1;