问题
你想返回存储在多张表中的数据,即将多个结果集合并。这些表并非必须有相同的键,但它们的列的数据类型必须相同。例如,你想显示 EMP 表中部门编号为 20 的员工的姓名和部门编号,以及 DEPT 表中每个部门的名称和编号。
解决方案
使用集合运算 UNION ALL 合并来自多张表的行。
select name as name_and_dname, deptno
from emp
where deptno = 20
union all
select dname, deptno
from dept
扩展
UNION ALL 可以将来自多个数据源的行合并为一个结果集。与所有的集合运算一样,在 SELECT 子句中指定的列的数量和类型必须匹配。
需要指出的是,UNION ALL 不会剔除重复的行。要剔除重复的行,可以使用运算符 UNION。
使用 UNION(而不是 UNION ALL)时,很可能引发排序操作以消除重复的行。处理大型结果集时,务必牢记这一点。
除非必要,否则不要在查询中使用 DISTINCT。这条规则也适用于 UNION:除非必要,否则不要使用 UNION,而应该使用 UNION ALL。
点个赞吧,这对我非常重要!