SQL UNION

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;


浙ICP备17015664号-1 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载