Mysql教程

10.6合并查询结果

合并査询结果是将多个SELECT语句的查询结果合并到一起。因为某种情况下,需要将几个SELECT语句查询出来的结果合并起来显示。例如,现在需要査询公司甲和公司乙这两个公司所有员工的信息。这就需要从公司甲中査询出所有员工的信息,再从公司乙中 査询出所有员工的信息。然后将两次的查询结果合并到一起。进行合并操作使用UNION 和UNION ALL关键字。本小节将详细讲解合并查询结果的方法。

使用UNION关键字时,数据库系统会将所有的查询结果合并到一起,然后去除掉相同的记录。而UNION ALL关键字则只是简单的合并到一起。其语法规则如下:

SELECT 语句 1 UNION | UNION ALL SELECT 语句 2 UNION | UNION ALL ...SELECT 语句 n ;

从上面可以知道,可以合并多个SELECT语句的查询结果。而且,每个SELECT语句之间使用UNION或UNION ALL关键字连接。

【示例10-67】下面从department表和employee表中查询d_id字段的取值。然后通过UNION关键字将结果合并到一起。首先,先查看department表和employee表中d_id字段的取值。查询结果如下:

//department表中d_id字段的取值
mysql>SELECT d_id FROM department;
+-----------+
|   d_id    |
+-----------+
|   1001    |
|   1002    |
|   1003    |
+-----------+
3 rows in set(0.00 sec)
//employee表中d_id字段的取值
+-----------+
|   d_id    |
+-----------+
|   1001    |
|   1001    |
|   1002    |
|   1004    |
+-----------+
4 rows in set(0.00 sec)

从査询结果可以看到department表的d_id字段取值分别为1001、1002和1003。而employee表的d_id字段取值分别为]001、1002和1004。其中,d_id为1001的记录有两条。现在这两个表中的d_id字段的取值合并在一起。语句如下:

SELECT d_id FROM department UNION SELECT d_id FROM employee;

两个SELECT语句之间用UNION关键字进行连接。代码执行结果如下:

+-----------+
|   d_id    |
+-----------+
|   1001    |
|   1001    |
|   1002    |
|   1004    |
+-----------+
4 rows in set(0.00 sec)

从查询结果可以看出,d_id字段的取值为1001、1002、1003和1004。这刚好是department表和employee表d_id字段的所有取值。而且,结果中没有任何重复的记录。

如果使用UNION ALL关键字,那么只是将查询结果直接合并到一起。结果中可能存在相同的记录。

【示例10-68】下面从department表和employee表中查询d_id字段的取值。然后通过UNION ALL关键字将结果合并到一起。语句如下

SELECT d_id FROM department UNION ALL SELECT d_id FROM employee;
+-----------+
|   d_id    |
+-----------+
|   1001    |
|   1002    |
|   1003    |
|   1001    |
|   1001    |
|   1002    |
|   1004    |
+-----------+
7 rows in set(0.00 sec)

从上面可以看出,结果中存在相同的记录。这说明UNION ALL关键字只是将查询结果直接合并到一起,没有消除相同的记录。

注意:UNION关键字和UNION ALL关键字都可以合并查询结果,但是两者有一点区别UNION关键字合并查询结果时,需要将相同的记录消除掉。UNION ALL关键字则相反,它不会消除掉相同的记录,而是将所有的记录合并到一起。


关注微信获取最新动态