UNION / 合并操作符
UNION操作符用于将两个或多个SELECT查询结果合并到一个结果集中。UNION操作不同于JOIN(连接),UNION操作将两个源表中的所有行放在一个结果表中,单行之间并不合并。
以下是使用UNION合并两个SELECT查询结果集的基本规则:
- 结果集中的字段数量和顺序必须相同
- 对应合并字段的数据类型必须兼容
当符合这些标准时,这些表可以用UNION合并:
语法
UNION的基本语法如下:
SELECT column_list FROM table1_name
UNION SELECT column_list FROM table2_name;
让我们来看一下实例。
假设我们有下面两张表:
employees
+----+------------+-----------+--------+
| 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 |
+----+------------+-----------+--------+
customers
+----+------------+-----------+----------+
| 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 |
+----+------------+-----------+----------+
让我们执行一个UNION操作来组合两个查询结果。
下面的语句返回所有客户和员工的姓和名:
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;