UNION的做用數據庫
UNION運算符用於組合兩個或更多SELECT語句的結果集。ide
UNION使用前提
UNION中的每一個SELECT語句必須具備相同的列數3d
這些列的數據類型必須兼容:類型沒必要徹底相同,可是必須能夠隱式轉換。code
UNION 語法
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;blog
註釋:默認狀況下,UNION 運算符選擇一個不一樣的值。若是容許重複值,請使用 UNION ALL。排序
UNION ALL 語法
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;it
※ 註釋:UNION結果集中的列名老是等於UNION中第一個SELECT語句中的列名。table
示例數據庫
如下是"Customers" 表中的數據:class
選自 "Suppliers" 表的數據:基礎
UNION 實例
如下SQL語句從 "Customers" 和"Suppliers" 表中選擇全部不一樣的城市(只有不一樣的值):
實例 SELECT 城市 FROM Customers UNION SELECT 城市 FROM Suppliers
結果:
※ 註釋:UNION具備排除重複記錄行的功能。若是一些客戶和供應商來自同一個城市,每一個城市將只被列入一個列表。UNION將只選擇不一樣的值,即會排除重複數據只保留一個。請使用UNION ALL選擇重複值!
UNION ALL 實例
如下SQL語句使用 UNION ALL 從 "Customers"和"Suppliers" 表中選擇全部城市(也是重複的值):
實例
SELECT 城市 FROM Customers UNION ALL SELECT 城市 FROM Suppliers
結果:
帶有 WHERE 的UNION ALL
如下SQL語句使用UNIONALL從"Customers"和 "Suppliers" 表中選擇全部上海市的城市(也是重複數值):
實例
SELECT 城市, 省份 FROM Customers WHERE 省份='上海市' UNION ALL SELECT 城市, 省份 FROM Suppliers WHERE 省份='上海市'
結果:
帶有WHERE的UNION
如下SQL語句從「客戶」和「供應商」中選擇全部不一樣的上海城市(只有不一樣的值):
SELECT 城市, 省份 FROM Customers WHERE 省份='上海市' UNION SELECT 城市, 省份 FROM Suppliers WHERE 省份='上海市'
結果:
另外一個UNION示例
如下SQL語句列出了全部客戶和供應商所在的城市和省份:
SELECT '客戶姓名' As Type,城市, 省份 FROM Customers UNION SELECT '供應商名稱',城市, 省份 FROM Suppliers;
結果:
帶有ORDER BY的UINON
如下SQL語句列出了全部客戶和供應商所在的城市和省份,而且對省份進行排序:
SELECT '客戶姓名' As Type,城市, 省份 FROM Customers UNION SELECT '供應商名稱',城市, 省份 FROM Suppliers ORDER BY `省份`
結果爲:
注意:UNION和UNION ALL的ORDER BY子句要寫在最後一條SELECT語句後面,雖然ORDER BY彷佛只是最後一條SELECT語句的組成部分,但實際上MySQL將用它來排序全部SELECT語句返回的全部結果 。