Mysql聯合查詢union和union all的使用介紹


Mysql的聯合查詢命令UNION和UNION ALL,總結了使用語法和注意事項,以及學習例子和項目例子,需要的朋友可以參考下 一、UNION和UNION ALL的作用和語法 UNION 用於合......


Mysql的聯合查詢命令UNION和UNION ALL,總結了使用語法和注意事項,以及學習例子和項目例子,需要的朋友可以參考下
一、UNION和UNION ALL的作用和語法
UNION 用於合併兩個或多個 SELECT 語句的結果集,並消去表中任何重複行。
UNION 內部的 SELECT 語句必須擁有相同數量的列,列也必須擁有相似的數據類型。
同時,每條 SELECT 語句中的列的順序必須相同.
SQL UNION 語法:
sql腳本代碼如下:

1
2
3
SELECT column_name FROM table1
UNION
SELECT column_name FROM table2

註釋:默認地,UNION 操作符選取不同的值。如果允許重複的值,請使用 UNION ALL。
當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重複行
SQL UNION ALL 語法
sql腳本代碼如下:

1
2
3
SELECT column_name FROM table1
UNION ALL
SELECT column_name FROM table2

註釋:另外,UNION 結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名。
注意:1、UNION 結果集中的列名總是等於第一個 SELECT 語句中的列名
2、UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同
二、union的用法及注意事項
union:聯合的意思,即把兩次或多次查詢結果合併起來。
要求:兩次查詢的列數必須一致
推薦:列的類型可以不一樣,但推薦查詢的每一列,想對應的類型以一樣
可以來自多張表的數據:多次sql語句取出的列名可以不一致,此時以第一個sql語句的列名爲準。
如果不同的語句中取出的行,有完全相同(這裏表示的是每個列的值都相同),那麼union會將相同的行合併,最終只保留一行。也可以這樣理解,union會去掉重複的行。
如果不想去掉重複的行,可以使用union all。
如果子句中有order by,limit,需用括號()包起來。推薦放到所有子句之後,即對最終合併的結果來排序或篩選。
如:
sql腳本代碼如下:

1
(select from order by id) union (select from order id);

在子句中,order by 需要配合limit使用纔有意義。如果不配合limit使用,會被語法分析器優化分析時去除。
三、學習例子
下面的例子中使用的原始表:

1
Employees_China:

sql腳本代碼如下:

1
2
3
4
5
6
E_ID E_Name
01 Zhang, Hua
02 Wang, Wei
03 Carter, Thomas
04 Yang, Ming
Employees_USA:

sql腳本代碼如下:

1
2
3
4
5
E_ID E_Name
01 Adams, John
02 Bush, George
03 Carter, Thomas
04 Gates, Bill

使用 UNION 命令實例
列出所有在中國和美國的不同的僱員名:
sql腳本代碼如下:

1
2
3
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA

結果:
sql腳本代碼如下:

1
2
3
4
5
6
7
8
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Gates, Bill

註釋:這個命令無法列出在中國和美國的所有僱員。在上面的例子中,我們有兩個名字相同的僱員,他們當中只有一個人被列出來了。UNION 命令只會選取不同的值。
使用 UNION ALL 命令實例
UNION ALL 命令和 UNION 命令幾乎是等效的,不過 UNION ALL 命令會列出所有的值。
sql腳本代碼如下:

1
2
3
SQL Statement 1
UNION ALL
SQL Statement 2

實例:
列出在中國和美國的所有的僱員:
sql腳本代碼如下:

1
2
3
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA

結果
sql腳本代碼如下:

1
2
3
4
5
6
7
8
9
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Carter, Thomas
Gates, Bill

文檔來源:Mysql聯合查詢union和union all的使用介紹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章