 
 
UNION和UNION ALL的重要的区别关于对重复结果的处理。
UNION在合并子查询重复的记录只保留一条,而UNION All并不合并子查询的重复记录。现举例说明它们之间的区别。
示例1:查询职位为‘CLERK’员工信息。
| SQL> SELECT EMPNO,ENAME,JOB DEPTNO FROM EMP WHERE JOB='CLERK'; 
 EMPNO ENAME DEPTNO ---------- ---------- --------- 7369 SMITH CLERK 7876 ADAMS CLERK 7900 JAMES CLERK 7934 MILLER CLERK | 
示例2:查询部门编号为20员工信息。
| SQL> SELECT EMPNO,ENAME,JOB DEPTNO FROM EMP WHERE DEPTNO=20; 
 EMPNO ENAME DEPTNO ---------- ---------- --------- 7369 SMITH CLERK 7566 JONES MANAGER 7788 SCOTT ANALYST 7876 ADAMS CLERK 7902 FORD ANALYST | 
示例3:使用UNION ALL合并示例1和示例2的子查询。
| SQL> SELECT EMPNO,ENAME,JOB DEPTNO FROM EMP WHERE JOB='CLERK' 2 UNION ALL 3 SELECT EMPNO,ENAME,JOB DEPTNO FROM EMP WHERE DEPTNO=20; 
 EMPNO ENAME DEPTNO ---------- ---------- --------- 7369 SMITH CLERK 7876 ADAMS CLERK 7900 JAMES CLERK 7934 MILLER CLERK 7369 SMITH CLERK 7566 JONES MANAGER 7788 SCOTT ANALYST 7876 ADAMS CLERK 7902 FORD ANALYST 
 已选择9行。 
 | 
示例4:使用UNION合并示例1和示例2的子查询。
| SQL> SELECT EMPNO,ENAME,JOB DEPTNO FROM EMP WHERE JOB='CLERK' 2 UNION 3 SELECT EMPNO,ENAME,JOB DEPTNO FROM EMP WHERE DEPTNO=20; 
 EMPNO ENAME DEPTNO ---------- ---------- --------- 7369 SMITH CLERK 7566 JONES MANAGER 7788 SCOTT ANALYST 7876 ADAMS CLERK 7900 JAMES CLERK 7902 FORD ANALYST 7934 MILLER CLERK 
 已选择7行。 | 
从示例4可以看到UNION合并后记录数据比使用UNION ALL少了2条。很显然使用UNION查询合并了两个子查询的重复的记录。
来源:oschina
链接:https://my.oschina.net/u/2971691/blog/809492