
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查询合并了两个子查询的重复的记录。
本文通过具体的SQL示例对比了UNION和UNION ALL两种操作符在处理子查询结果时的不同行为。UNION会移除重复的记录,而UNION ALL则保留所有记录,包括重复项。
5523

被折叠的 条评论
为什么被折叠?



