4.2.7 合并查询结果

4.2.7 合并查询结果

利用union关键字,可以给出多条select语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。各个select语句之间使用union或union all关键字分隔。union不使用关键字all,执行的时候删除重复的记录,所有返回的行都是唯一的;使用关键字all的作用是不删除重复行,也不对结果进行自动排序。基本语法格式如下:

【例4.72】查询所有工资高于10 000的员工的信息,查询deptno等于1和5的所有员工的信息,使用union连接查询结果。

SQL语句及执行效果如下:

如前所述,union将多个select语句的结果组合成一个结果集合。可以分开查看每个select语句的结果:

由以上查询结果可以看到,第1条select语句查询工资高于10 000的员工信息,第2条select语句查询部门编号deptno是1和5的员工信息。使用union将两条select语句分隔开,执行完毕之后,把输出结果组合成单个的结果集,并删除重复的记录。

使用union all包含重复的行,在前面的例子中,分开查询时,两个返回结果中有相同的记录。union从查询结果集中自动去除了重复的行,如果要返回所有匹配行而不进行删除,可以使用union all。

【例4.73】查询所有工资高于10 000的员工的信息,查询deptno等于1和5的所有员工的信息,使用union all连接查询结果。

SQL语句及执行结果如下:

由结果可以看到,这里总的记录数等于两条select语句返回的记录数之和,连接查询结果并没有去除重复的行“董事长”。

提示:union和union a l l的区别:使用union a l l的功能是不删除重复行,加上a l l关键字语句执行时所需要的资源少,所以尽可能地使用它。因此,知道有重复行,但是想保留这些行,确定查询结果中不会有重复数据或者不需要去掉重复数据的时候,应当使用union a l l,以提高查询效率。