比方說,我有兩個或更多的表充滿用戶,我想在同一個查詢中從這些表中檢索所有用戶。如何從同一查詢中的不同表中檢索相似的行?
表共享一些列,那些具有相同名稱的列是我試圖檢索的列。
喜歡的東西:
SELECT name, age FROM users1;
SELECT name, age FROM users2;
etc.
注意:這只是一個例子,而不是真正的問題。我無法將這些表合併爲一個。
比方說,我有兩個或更多的表充滿用戶,我想在同一個查詢中從這些表中檢索所有用戶。如何從同一查詢中的不同表中檢索相似的行?
表共享一些列,那些具有相同名稱的列是我試圖檢索的列。
喜歡的東西:
SELECT name, age FROM users1;
SELECT name, age FROM users2;
etc.
注意:這只是一個例子,而不是真正的問題。我無法將這些表合併爲一個。
您可以使用UNION:
UNION用於將結果從多個SELECT語句合併成一個結果集。
第一個SELECT語句的列名用作返回結果的列名。在每個SELECT語句的相應位置列出的選定列應具有相同的數據類型。
一個例子:
mysql> SELECT 1 as ColumnA,'a' as ColumnB
-> UNION
-> SELECT 2, 'b'
-> UNION
-> SELECT 3, 'c';
+---------+---------+
| ColumnA | ColumnB |
+---------+---------+
| 1 | a |
| 2 | b |
| 3 | c |
+---------+---------+
3 rows in set (0.05 sec)
還要注意:
工會的默認行爲是重複的行從結果中刪除。可選的DISTINCT關鍵字除缺省值外沒有其他作用,因爲它還指定刪除重複行。使用可選的ALL關鍵字,不會發生重複行刪除,結果包括所有SELECT語句中的所有匹配行。
一個例子:
mysql> SELECT 1 as x
-> UNION
-> SELECT 1;
+---+
| x |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
mysql> SELECT 1 as x
-> UNION ALL
-> SELECT 1;
+---+
| x |
+---+
| 1 |
| 1 |
+---+
2 rows in set (0.00 sec)
嘗試
SELECT name, age FROM users1
UNION
SELECT name, age FROM users2
您可以使用union
或union all
,這取決於你想要什麼樣的行爲:
select name, age from users1
union
select name, age from users2
union
select name, age from users3
或:
select name, age from users1
union all
select name, age from users2
union all
select name, age from users3
區別在於union
刪除重複項,而union all
沒有。
如果您知道沒有重複項,則應該使用union all
,以便數據庫不必進行額外的工作來嘗試查找重複項。
還注意到'union all'會比'union'快得多。