UNION, INTERSECT, EXCEPT) #可以使用集合操作 union、intersection 和 difference 來合併兩個查詢的結果。語法如下:
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,否則會刪除重複行。
為了計算兩個查詢的 union、intersection 或 difference,這兩個查詢必須是“union 相容”,這意味著它們返回的列數相同,並且對應列的資料型別相容,具體描述參見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)
如果您在文件中發現任何不正確、不符合您對特定功能的體驗或需要進一步闡明的內容,請使用此表格報告文件問題。