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关键字则相反,它不会消除掉相同的记录,而是将所有的记录合并到一起。