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