在本教程中,您將學習如何組合兩個或多個SQL查詢的結果。
UNION操作符用于將兩個或多個SELECT查詢的結果合并到一個結果集中。UNION操作不同于使用合并兩個表中的列的連接。union運算符將兩個源表中的所有行放在一個結果表中,從而創(chuàng)建一個新表。
以下是使用UNION組合兩個SELECT查詢的結果集的基本規(guī)則:
在所有查詢中,列的數(shù)量和順序必須相同。
相應列的數(shù)據(jù)類型必須兼容。
當滿足這些條件時,這些表是聯(lián)合兼容(union-compatible):
UNION的基本語法:
SELECT column_list FROM table1_name UNION SELECT column_list FROM table2_name;
為了更好地理解聯(lián)合操作,我們假設在employees和customers表中存在一些假設字段,例如first_name和last_name。 請注意,這些字段實際上在我們的演示數(shù)據(jù)庫表中不存在。
+----+------------+-----------+--------+ | id | first_name | last_name | salary | +----+------------+-----------+--------+ | 1 | Ethan | Hunt | 5000 | | 2 | Tony | Montana | 6500 | | 3 | Sarah | Connor | 8000 | | 4 | Rick | Deckard | 7200 | | 5 | Martin | Blank | 5600 | +----+------------+-----------+--------+ | +----+------------+-----------+----------+ | id | first_name | last_name | city | +----+------------+-----------+----------+ | 1 | Maria | Anders | Berlin | | 2 | Fran | Wilson | Madrid | | 3 | Dominique | Perrier | Paris | | 4 | Martin | Blank | Turin | | 5 | Thomas | Hardy | Portland | +----+------------+-----------+----------+ | |
表: employees | 表: customers |
讓我們執(zhí)行聯(lián)合操作來合并兩個查詢的結果。
以下語句返回所有客戶和員工的名字和姓氏:
SELECT first_name, last_name FROM employees UNION SELECT first_name, last_name FROM customers;
執(zhí)行上述語句后,結果集將如下所示:
+---------------+--------------+ | first_name | last_name | +---------------+--------------+ | Ethan | Hunt | | Tony | Montana | | Sarah | Connor | | Rick | Deckard | | Martin | Blank | | Maria | Anders | | Fran | Wilson | | Dominique | Perrier | | Thomas | Hardy | +---------------+--------------+
默認情況下,UNION運算符會從組合結果集中消除重復的行。這就是為什么上面的查詢只返回9行,如果您注意到名稱“Martin Blank”同時出現(xiàn)在employees和customers表中。
但是,如果要保留重復的行,可以使用ALL關鍵字,如下所示:
SELECT first_name, last_name FROM employees UNION ALL SELECT first_name, last_name FROM customers;