在本教程中,咱們將學習如何使用MySQL UNION操做符從多個SELECT語句將兩個或多個結果集組合成一個結果集。html
MySQL UNION運算符容許您從多個表查詢出來的兩個或多個結果集組合成一個結果集。 MySQL UNION的語法以下:mysql
SELECT column1,column2 UNION[DISTINCT|ALL] SELECT column1,column2 UNION[DISTINCT|ALL] …
執行上面的 SQL 語句後,獲得下面的結果 - 執行上面的 SQL 語句後,獲得下面的結果 - 有一些使用UNION運算符須要遵循的規則:sql
默認狀況下,UNION運算符從結果集中清除重複行,即便沒有明確使用DISTINCT操做符。所以,也就是說UNION子句是UNION DISTINCT的一種快捷方式。spa
若是使用UNION ALL明確地保留重複行,若是有的話它將保留在結果集中。UNION ALL性能比UNION DISTINCT更快。htm
如今使用MySQL UNION 來做一些例子和練習,以幫助咱們更好地理解它。排序
假設咱們想將 customer 表和 employee 表中的數據合併到一個單一的結果集,則能夠UNION運算符,下面的查詢:教程
SELECT customer_id id, contact_name name FROM studymysql.customer UNION SELECT employee_id id, employee_name name FROM studymysql.employee
執行上面的 SQL 語句後,獲得下面的結果 -
get
在上面的例子中,咱們在SELECT語句的每一列使用了列別名。若是咱們不使用列別名輸出會是什麼?MySQL在第一個SELECT語句使用的列名做爲標籤輸出。
接下來讓咱們嘗試不使用列的別名合併 customer 和 employee 表信息,以下查詢:
(SELECT customer_id,contact_name FROM studymysql.customer) UNION (SELECT employee_id, employee_name FROM studymysql.employee) ORDER BY contact_name,customer_id
結果中有 customerNumber 和 contactLastname 標籤,這是第一個SELECT語句中列的名稱。
若是想在UNION運算符中對查詢返回結果集進行排序,則須要在SQL中最後的那個 SELECT語句使用ORDER BY子句。
讓咱們來看看下面的例子:
(SELECT customer_id id, contact_name name FROM studymysql.customer) UNION (SELECT employee_id id, employee_name name FROM studymysql.employee) ORDER BY name,id
執行上面的 SQL 語句後,獲得下面的結果 -
在上面的查詢中,咱們首先使用 UNION 操做符合並 employee 表和 customer 表的 ID 和 name 到一個結果集。 而後咱們經過使用ORDER BY子句排序結果集。請注意,咱們把SELECT語句放在括號內,並把ORDER BY子句做爲最後一個語句。
若是將ORDER BY子句放在每一個SELECT語句中,也不會影響UNION運算符所產生的最終結果行的順序。
MySQL還提供了另一種方案 - 基於列位置使用ORDER BY子句將結果集進行排序,以下面的查詢:
(SELECT customer_id,contact_name FROM studymysql.customer) UNION (SELECT employee_id,employee_name FROM studymysql.employee) ORDER BY 2,1
執行上面的 SQL 語句後,獲得下面的結果 -
在本教程中,您已經學會了如何使用MySQL UNION語句從多個表中查詢數據併合併成一個結果集。