UNION、INTERSECT和EXCEPT

UNION、INTERSECT和EXCEPT用于将多个查询语句的结果集进行组合,从而形成一个最终结果。

  1. query
  2. { UNION [ ALL ] | INTERSECT | EXCEPT | MINUS }
  3. query

参数

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

  • UNION ALL:ALL关键字用于保留由UNION生成的任何重复行。

  • INTERSECT:返回派生自两个查询表达式的行的集合运算。返回结果中将丢弃未同时由两个表达式返回的行。

  • EXCEPT| MINUS:返回派生自两个查询表达式之一的行的集合运算。返回的结果行必须存在于第一个结果表而不存在于第二个结果表中。MINUS和EXCEPT完全同义。

计算顺序

  • UNION和EXCEPT集合运算符是左关联的,如果未指定圆括号来影响优先顺序,则将以从左到右的顺序来计算这些集合运算符的组合。例如,在以下查询中,首先计算T1和T2的UNION,然后对UNION结果执行EXCEPT操作:
    1. select * from t1
    2. union
    3. select * from t2
    4. except
    5. select * from t3
    6. order by c1;
  • 在同一个查询中使用运算符组合时,INTERSECT运算符优先于UNION和EXCEPT运算符。例如,以下查询将计算T2和T3的交集,然后计算得到的结果与T1 的并集:
    1. select * from t1
    2. union
    3. select * from t2
    4. intersect
    5. select * from t3
    6. order by c1;
  • 通过添加圆括号,可以强制实施不同的计算顺序。在以下示例中,将T1和T2的并集结果与T3执行交集运算,并且查询可能会生成不同的结果。
    1. (select * from t1
    2. union
    3. select * from t2)
    4. intersect
    5. (select * from t3)
    6. order by c1;