MySQL UNION

在本教程中,咱們將學習如何使用MySQL UNION操做符從多個SELECT語句將兩個或多個結果集組合成一個結果集。html

MySQL UNION操做符

MySQL UNION運算符容許您從多個表查詢出來的兩個或多個結果集組合成一個結果集。 MySQL UNION的語法以下:mysql

SELECT column1,column2
UNION[DISTINCT|ALL]
SELECT column1,column2
UNION[DISTINCT|ALL]
…

執行上面的 SQL 語句後,獲得下面的結果 - 執行上面的 SQL 語句後,獲得下面的結果 - 有一些使用UNION運算符須要遵循的規則:sql

  • 顯示在相應SELECT語句列數量必須相等。性能

  • 如今每一個SELECT語句的列對應的位置必須具備相同的數據類型,或至少是可轉換的數據類型。學習

默認狀況下,UNION運算符從結果集中清除重複行,即便沒有明確使用DISTINCT操做符。所以,也就是說UNION子句是UNION DISTINCT的一種快捷方式。spa

若是使用UNION ALL明確地保留重複行,若是有的話它將保留在結果集中。UNION ALL性能比UNION DISTINCT更快。htm

MySQL UNION示例

如今使用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

MySQL UNION不使用別名

在上面的例子中,咱們在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語句中列的名稱。

MySQL UNION 與 ORDER BY

若是想在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語句從多個表中查詢數據併合併成一個結果集。

相關文章
相關標籤/搜索