如所見,並且是非常容易使用的。但在進行並時有幾條規則需要注意。
1.UNION 必須由兩個或兩個以上的 SELECT 語句組成,語句之間用關鍵字 UNION 分隔(因此,如果組合4個 SELECT 語句,就會使用3個UNION 關鍵字)。
2. UNION 中的每個查詢必須包含相同的列、表達式或聚集函數(不過各個列不需要以相同的次序列出)。
3.列資料型別必須相容:型別不必完全相同,但必須是DBMS可以隱含轉換的型別(例如,不同的數值型別或不同的日期型別)。如果遵守了這些基本規則或限制,則可以將並用於任何資料檢索任務。
包含或取消重複的行
我們注意到,在分別執行時,第一條SELECT 語句傳回4行,第二條SELECT 語句傳回5行。但用 UNION 組合兩個 SELECT 語句後,只回傳了8行而不是9行。
UNION 從查詢結果集中自動移除了重複的行(換句話說,它的行為與單一 SELECT 語句中使用多個 WHERE 子句條件一樣)。因為供應商 1002 生產的一種物品的價格也低於 5 ,所以兩個 SELECT 語句都會回傳該行。使用UNION 時,重複的行會自動取消。
這是 UNION 的預設行為,但如果需要,可以改變它。事實上,如果想要傳回所有符合行,可使用 UNION ALL 而不是 UNION 。
請看下面的範例:
輸入:
select vend_id,prod_id,prod_price from products where prod_price <= 5 union all select vend_id,prod_id,prod_price from products where vend_id in (1001,1002);
輸出:
分析:使用UNION ALL , MySQL不取消重複的行。因此這裡的例子傳回9行,其中有一行出現兩次。
UNION 與 WHERE UNION 幾乎總是完成與多個WHERE 條件相同的工作。 UNION ALL 為 UNION 的一種形式,它完成WHERE 子句完成不了的工作。如果確實需要每個條件的符合行全
部出現(包括重複行),則必須使用 UNION ALL 而非 WHERE 。
對組合查詢結果排序
SELECT 語句的輸出以 ORDER BY 子句排序。用 UNION 組合查詢時,只能使用一條 ORDER BY 子句,它必須出現在最後一條 SELECT 語句之後。對於結果集,不存在以一種方式排序一部分,而用另一種方式排序另一部分的情況,因此不允許使用多個 ORDER BY 子句。
下面的範例排序前面UNION 回傳的結果:
#輸入:
select vend_id,prod_id,prod_price from products where prod_price <= 5 union select vend_id,prod_id,prod_price from products where vend_id in (1001,1002) order by vend_id,prod_price;
輸出:
##分析:這條UNION 在最後一條SELECT 語句後面使用了ORDER BY 子句。雖然 ORDER BY 子句似乎只是最後一個 SELECT 語句的組成部分,但實際上MySQL將用它來排序所有 SELECT 語句傳回的所有結果。 組合不同的表 為使表述比較簡單,本章例子中的組合查詢所使用的皆是相同的表。但其中使用 UNION 的組合查詢可以套用不同的表。以上是MySQL組合查詢中UNION排序規則範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!