UNION和UNION ALL的重要的区别关于对重复结果的处理。code
UNION在合并子查询重复的记录只保留一条,而UNION All并不合并子查询的重复记录。现举例说明它们之间的区别。blog
示例1:查询职位为‘CLERK’员工信息。get
SQL> SELECT EMPNO,ENAME,JOB DEPTNO FROM EMP WHERE JOB='CLERK';table
EMPNO ENAME DEPTNOim ---------- ---------- ---------数据 7369 SMITH CLERK查询 7876 ADAMS CLERKimg 7900 JAMES CLERKtab 7934 MILLER CLERKco |
示例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查询合并了两个子查询的重复的记录。