指定 UNION ALL 关键字

如果要在 UNION 操作的结果中保留重复项,请指定 UNION ALL 关键字,而不是仅指定 UNION。

本主题使用与 使用 UNION 关键字组合子查询相同的步骤和示例。

第 3 步, SQL 组合了两个临时结果表:

SELECT EMPNO 
     FROM CORPDATA.EMPLOYEE
     WHERE WORKDEPT = 'D11'
 UNION ALL
SELECT EMPNO 
     FROM CORPDATA.EMPPROJACT
     WHERE PROJNO='MA2112' OR
                 PROJNO= 'MA2113' OR
                 PROJNO= 'AD3111'
   ORDER BY EMPNO;

查询将返回包含重复项的有序结果表。

EMPNO
000060
000150
000150
000150
000160
000160
000170
000170
000170
000170
000180
000180
000190
000190
000190
000200
000210
000210
000210
000220
000230
000230
000230
000230
000230
000240
000240
200170
200220

UNION ALL 操作是关联的,例如:

(SELECT PROJNO FROM CORPDATA.PROJECT
UNION ALL
SELECT PROJNO FROM CORPDATA.PROJECT)
UNION ALL
SELECT PROJNO FROM CORPDATA.EMPPROJACT;

此语句也可以写为:

SELECT PROJNO FROM CORPDATA.PROJECT
UNION ALL
(SELECT PROJNO FROM CORPDATA.PROJECT
UNION ALL
SELECT PROJNO FROM CORPDATA.EMPPROJACT);

但是,当您在与 UNION 运算符相同的 SQL 语句中包含 UNION ALL 时,该操作的结果取决于求值顺序。 在没有括号的情况下,求值从左到右。 在包含括号的情况下,将首先对括号大小的子查询进行求值,然后从左到右依次对语句的其他部分进行求值。