2.3. 组合查询

两个查询的结果可以用集合操作并,交,和异进行组合.语法是

query1 UNION [ALL] query2
query1 INTERSECT [ALL] query2
query1 EXCEPT [ALL] query2
query1query2 都是可以使用我们到此为止讨论的 所有查询特性的查询.集合操作也可以嵌套和级连,比如
query1 UNION query2 UNION query3
实际上说的是
(query1 UNION query2) UNION query3

UNION 有效地把 query2 的结果附加到 query1 的结果上(不过我们不能保证这就是 这些行实际返回的顺序)并且删除所有重复的行,就象 DISTINCT 做的那样,除非你声明了 ALL.

INTERSECT 返回那些同时存在于 query1 的结果中和 query2的结果中的行,除非声明了 ALL, 否则所有重复行都被删除.

EXCEPT 返回所有在 query1 的结果中但是不在 query2 的结果中的行.除非声明了 ALL, 否则所有重复行都被删除.

为了计算两个查询的并,交,或异,这两个查询必须是 “并集兼容的”,也就意味着它们都返回同样数量的列, 并且对应的烈有兼容的数据类型,象 Section 5.5 里描述的那样.