Conceitos
Quando um full outer join é executado, são apresentadas todas as linhas unmatched de todas as tabelas, com valores nulos. As funções COALESCE e VALUE substituem os valores nulos por literais. As funções tem nomes diferentes mas a sintaxe e o funcionamento são iguais.
Tabela Departamento (DEPT)
| DEPTNO |
DEPTNAME |
| A01 |
ACCOUNTING |
| A02 |
PAYROLL |
| A03 |
OPERATIONS |
| A04 | PERSONNEL |
| A05 |
MAINTENANCE |
Tabela Empregados (EMP)
| EMPNO |
WORKDEPT |
| 5001 |
A01 |
| 5002 |
A04 |
| 5003 |
A03 |
| 5004 |
A03 |
| 5005 |
A04 |
| 5006 |
A04 |
| 5007 |
A03 |
| 5008 |
A06 |
Full outer join com a função COALESCE
| SELECT |
COALESCE(B.EMPNO, 'NO EMP') AS EMPNO, |
| COALESCE(A.DEPTNO, 'NO DEPT') AS DEPTNO, |
|
| COALESCE(A.DEPTNAME, 'NO DEPT NAME') AS DEPTNAME |
|
| FROM PW0001.DEPT A |
|
| FULL JOIN PW0001.EMP B |
|
| ON A.DEPTNO = B.WORKDEPT |
|
| ORDER BY EMPNO |
Tabela Resultado
| EMPNO | DEPTNO |
DEPTNAME |
| NO EMP |
A02 | PAYROLL |
| NO EMP |
A05 | MAINTENANCE |
| 5001 | A01 | ACCOUNTING |
| 5002 | A04 | PERSONNEL |
| 5003 | A03 |
OPERATIONS |
| 5004 | A03 | OPERATIONS |
| 5005 | A04 |
PERSONNEL |
| 5006 | A04 |
PERSONNEL |
| 5007 | A03 | OPERATIONS |
| 5008 |
NO DEPT |
NO DEPT NAME |
Em cada linha unmatched entre as tabelas o valor <null> é substituido pela literal estabelecida na declaração SELECT com o uso da função COALESCE.
Por definição um full outer join mantém as linhas unmatched tanto da tabela composite (também chamada outer) quanto da tabela nova (também chamada inner). No exemplo, a tabela composite (outer) é a tabela PW0001.DEPT e a tabela nova (inner) é a tabela PW0001.EMP.