使用 INTERSECT 关键字
InterSECT 关键字返回由两个结果集中存在的所有行组成的组合结果集。
假设您要查找包含部门 D11 中人员的员工编号列表,这些人员的分配包括项目 MA2112, MA2113和 AD3111。
InterSECT 操作将返回这两个结果集中存在的所有员工编号。 换言之,此查询将返回部门 D11 中同时处理项目 MA2112, MA2113和 AD3111:
SELECT EMPNO
FROM CORPDATA.EMPLOYEE
WHERE WORKDEPT = 'D11'
INTERSECT
SELECT EMPNO
FROM CORPDATA.EMPPROJACT
WHERE PROJNO = 'MA2112' OR
PROJNO = 'MA2113' OR
PROJNO = 'AD3111'
ORDER BY EMPNO;
要更好地了解这些 SQL 语句的结果,请设想 SQL 执行以下过程:
步骤 1. SQL 处理第一个 SELECT 语句:
SELECT EMPNO
FROM CORPDATA.EMPLOYEE
WHERE WORKDEPT = 'D11';此查询返回临时结果表。
| 来自 CORPDATA.EMPLOYEE |
|---|
| 000060 |
| 000150 |
| 000160 |
| 000170 |
| 000180 |
| 000190 |
| 000200 |
| 000210 |
| 000220 |
| 200170 |
| 200220 |
第 2 步, SQL 处理第二个 SELECT 语句:
SELECT EMPNO
FROM CORPDATA.EMPPROJACT
WHERE PROJNO='MA2112' OR
PROJNO= 'MA2113' OR
PROJNO= 'AD3111';此查询将返回另一个临时结果表。
| 来自 CORPDATA.EMPPROJACT |
|---|
| 000230 |
| 000230 |
| 000240 |
| 000230 |
| 000230 |
| 000240 |
| 000230 |
| 000150 |
| 000170 |
| 000190 |
| 000170 |
| 000190 |
| 000150 |
| 000160 |
| 000180 |
| 000170 |
| 000210 |
| 000210 |
第 3 步, SQL 采用第一个临时结果表,将其与第二个临时结果表进行比较,并返回两个表中存在的行减去任何重复行,然后对结果进行排序。
SELECT EMPNO
FROM CORPDATA.EMPLOYEE
WHERE WORKDEPT = 'D11'
INTERSECT
SELECT EMPNO
FROM CORPDATA.EMPPROJACT
WHERE PROJNO='MA2112' OR
PROJNO= 'MA2113' OR
PROJNO= 'AD3111'
ORDER BY EMPNO;此查询返回包含按升序排列的值的组合结果表。
| EMPNO |
|---|
| 000150 |
| 000160 |
| 000170 |
| 000180 |
| 000190 |
| 000210 |