要将来自多个表的数据组织到一起,就像将一个结果集叠加到另外一个上面一样。 这些表不必有相同的关键字,但是他们对应列的数据类型必须相同。
使用union all 把多个表中的行组合到一起。
select ename, deptno from emp where deptno = 10union allselect '-----', deptno from deptunion allselect dname, deptno from dept;UNION ALL将多个来源的行组合起来,放到一个结果集中。 所有select列表中的项目数和对应项目的数据类型必须要匹配。
UNION ALL会包括重复的项目,如果要筛选掉重复项,可以使用UNION运算符。
如果使用UNION而不是UNION ALL,很可能是为了去除重复项而进行排序操作。 在处理大结果集时要记住,使用UNION子句大致相当于下面的查询,对UNION ALL子句的查询结果使用DISTINCT子句
SQL> select distinct deptno 2 from (select deptno from dept 3 union all 4 select deptno from dept);DEPTNO------ 30 20 40 10SQL> SQL> select deptno 2 from dept 3 union 4 select deptno from dept 5 ;DEPTNO------ 10 20 30 40SQL> 通常,查询中不要使用distinct,除非确定有必要这样做; 对于UNION而言也是如初,除非确定有必要,一般使用UNION ALL,而不适用UNION。多表有一些相同的列,或者有些列的值相同,需要通过关联这些列得到结果。
第二种解决方式是利用显示的JOIN子句(inner 关键字可省略),如果希望将联接逻辑关系放在from子句中,而不是在where 子句中,可以使用JOIN子句, 这两种方式都符合ANSI标准。
新闻热点
疑难解答