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查询合并了两个子查询的重复的记录。