7.4. 合并查询

可以使用集合操作并集,交集和差异来合并两个查询的结果。语法是

query1 UNION [ALL] query2
query1 INTERSECT [ALL] query2
query1 EXCEPT [ALL] query2
  • query1 query2 *是可以使用到目前为止所讨论的任何功能的查询。 Set 操作也可以嵌套和链接,例如
query1 UNION query2 UNION query3

执行为:

(query1 UNION query2) UNION query3

UNION有效地将* query2 的结果附加到 query1 *的结果上(尽管不能保证这是实际返回行的 Sequences)。此外,除非使用UNION ALL,否则它以与DISTINCT相同的方式从结果中消除重复的行。

INTERSECT返回* query1 的结果和 query2 *的结果的所有行。除非使用INTERSECT ALL,否则消除重复的行。

EXCEPT返回* query1 结果中的所有行,而不是 query2 结果中的所有行。 (这有时称为两个查询之间的 difference *.)同样,除非使用EXCEPT ALL,否则消除重复项。

为了计算两个查询的并集,相交或差,两个查询必须是“联合兼容的”,这意味着它们返回相同数量的列,并且对应的列具有兼容的数据类型,如Section 10.5中所述。