Exception join
A left exception join returns only the rows from the first table that do not have a match in the second table.
Using the same tables as before, return those employees
that are not responsible for any projects.
SELECT EMPNO, LASTNAME, PROJNO
FROM CORPDATA.EMPLOYEE EXCEPTION JOIN CORPDATA.PROJECT
ON EMPNO = RESPEMP
WHERE LASTNAME > 'S'
This join returns the following output.
EMPNO | LASTNAME | PROJNO |
---|---|---|
000170 | YOSHIMURA | - |
000180 | SCOUTTEN | - |
000190 | WALKER | - |
000280 | SCHNEIDER | - |
000300 | SMITH | - |
000310 | SETRIGHT | - |
200170 | YAMAMOTO | - |
200280 | SCHWARTZ | - |
200310 | SPRINGER | - |
200330 | WONG | - |
An exception join can also be written as a subquery using
the NOT EXISTS predicate. The previous query can be rewritten in the
following way:
SELECT EMPNO, LASTNAME
FROM CORPDATA.EMPLOYEE
WHERE LASTNAME > 'S'
AND NOT EXISTS
(SELECT * FROM CORPDATA.PROJECT
WHERE EMPNO = RESPEMP)
The only difference in this query is that it cannot return values from the PROJECT table.
There is a right exception join, too, that works just like a left exception join but with the tables reversed.