UNION、INTERSECT、EXCEPT) #可以使用集合运算联合、交集和差集来合并两个查询的结果。语法为
query1UNION [ALL]query2query1INTERSECT [ALL]query2query1EXCEPT [ALL]query2
其中 query1 和 query2 是可以利用到目前为止讨论过的任何特性的查询。
UNION 实际上将 query2 的结果附加到 query1 的结果(尽管无法保证这是实际返回行的顺序)。此外,它会从其结果中消除重复行,就像 DISTINCT 一样,除非使用了 UNION ALL。
INTERSECT 返回既在 query1 的结果中又在 query2 的结果中的所有行。除非使用了 INTERSECT ALL,否则会消除重复行。
EXCEPT 返回所有在 query1 的结果中但不在 query2 的结果中的行。(这有时称为两个查询之间的差异。)同样,除非使用了 EXCEPT ALL,否则会消除重复项。
为了计算两个查询的并集、交集或差集,这两个查询必须“并集兼容”,这意味着它们返回相同数量的列,并且相应的列具有兼容的数据类型,如 第 10.5 节 中所述。
集合运算可以组合,例如
query1UNIONquery2EXCEPTquery3
它等效于
(query1UNIONquery2) EXCEPTquery3
如这里所示,您可以使用括号来控制评估顺序。如果没有括号,UNION 和 EXCEPT 从左到右关联,但 INTERSECT 比这两个运算符绑定得更紧密。因此
query1UNIONquery2INTERSECTquery3
意味着
query1UNION (query2INTERSECTquery3)
您还可以用括号包围单个query。如果query 需要使用后续章节中讨论的任何子句,例如 LIMIT,这一点很重要。如果没有括号,您将收到语法错误,或者该子句将被理解为应用于集合运算的输出,而不是其输入之一。例如,
SELECT a FROM b UNION SELECT x FROM y LIMIT 10
被接受,但它意味着
(SELECT a FROM b UNION SELECT x FROM y) LIMIT 10
而不是
SELECT a FROM b UNION (SELECT x FROM y LIMIT 10)
如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。