在本教程中,您将学习如何组合两个或多个SQL查询的结果。
UNION操作符用于将两个或多个SELECT查询的结果合并到一个结果集中。UNION操作不同于使用合并两个表中的列的连接。union运算符将两个源表中的所有行放在一个结果表中,从而创建一个新表。
以下是使用UNION组合两个SELECT查询的结果集的基本规则:
在所有查询中,列的数量和顺序必须相同。
相应列的数据类型必须兼容。
当满足这些条件时,这些表是联合兼容(union-compatible):
UNION的基本语法:
SELECT column_list FROM table1_name UNION SELECT column_list FROM table2_name;
为了更好地理解联合操作,我们假设在employees和customers表中存在一些假设字段,例如first_name和last_name。 请注意,这些字段实际上在我们的演示数据库表中不存在。
+----+------------+-----------+--------+ | 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 |
让我们执行联合操作来合并两个查询的结果。
以下语句返回所有客户和员工的名字和姓氏:
SELECT first_name, last_name FROM employees UNION SELECT first_name, last_name FROM customers;
执行上述语句后,结果集将如下所示:
+---------------+--------------+ | 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”同时出现在employees和customers表中。
但是,如果要保留重复的行,可以使用ALL关键字,如下所示:
SELECT first_name, last_name FROM employees UNION ALL SELECT first_name, last_name FROM customers;