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查詢合併了兩個子查詢的重複的記錄。