UNION
與UNION ALL
的差別在於,
UNION
會聯集兩個查詢結果並將相同的資料合併為一筆;
UNION ALL
也是聯集兩個查詢結果,但相同的資料不合併為一筆。
例如現在有兩張資料表EMPLOYEE
及MANAGER
如下。
EMPLOYEE
+----+------+------------+---------+
| ID | NAME | PHONE | ADDRESS |
+----+------+------------+---------+
| 1 | John | 0931123456 | Taipei |
| 2 | Mary | 0932000811 | Hualian |
| 3 | Nico | 0933111224 | Yilan |
+----+------+------------+---------+
MANAGER
+----+------+------------+-------------------+
| ID | NAME | PHONE | TITLE |
+----+------+------------+-------------------+
| 1 | Dave | 0931300699 | Marketing Manager |
| 2 | Mike | 0928811566 | HR Manager |
| 3 | John | 0934274998 | Project Manager |
+----+------+------------+-------------------+
例如下面使用UNION
查詢兩資料表都有的NAME
欄位,可以看到在兩張表NAME
欄位中所有的姓名都被列出,不過相同的名稱John被合併為一筆。
SELECT e.NAME FROM EMPLOYEE e
UNION
SELECT m.NAME FROM MANAGER m;
+------+
| NAME |
+------+
| Dave |
| John | <-- combine
| Mary |
| Mike |
| Nico |
+------+
下面一樣查詢兩張表的NAME
欄位,但改用UNION ALL
結合兩個查詢結果,可以看到內容相同的John沒有被合併為一。
SELECT e.NAME FROM EMPLOYEE e
UNION ALL
SELECT m.NAME FROM MANAGER m;
+------+
| NAME |
+------+
| John | <--
| Mary |
| Nico |
| Dave |
| Mike |
| John | <--
+------+
要強調的是所謂"資料相同"指UNION
查詢結果中整列所有欄位的資料都相同才會被合併,只要某一欄資料不同則兩筆資料是不同的所以不會被合併。
例如下面使用UNION
查詢上面兩資料表的ID
,NAME
,PHONE
欄位,但這時John並沒有和上面一樣因為名稱相同被合併為同一筆資料,因為以全部的欄位資料來看ID
及PHONE
欄位資料並不相同,兩筆資料是不同的。
SELECT e.ID, e.NAME, e.PHONE FROM EMPLOYEE e
UNION
SELECT m.ID, m.NAME, m.PHONE FROM MANAGER m;
+----+------+------------+
| ID | NAME | PHONE |
+----+------+------------+
| 1 | Dave | 0931300699 |
| 1 | John | 0931123456 | <--
| 2 | Mary | 0932000811 |
| 2 | Mike | 0928811566 |
| 3 | John | 0934274998 | <--
| 3 | Nico | 0933111224 |
+----+------+------------+
參考:
沒有留言:
張貼留言