指定 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 时,该操作的结果取决于求值顺序。 在没有括号的情况下,求值从左到右。 在包含括号的情况下,将首先对括号大小的子查询进行求值,然后从左到右依次对语句的其他部分进行求值。