SQL查询中的UNION ALL和UNION区别

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容