Saltar navegação

S01.b - OUTER JOIN

Conceitos

Um outer join mantém na tabela resultado, as linhas de uma tabela cujos valores não são coincidentes nas condições de combinação (unmatched) com qualquer linha de outra tabela.

Na função são suportados o left join, o right join e o full outer join.

Tipo Mantém as linhas
Left outer join da tabela composite
Right outer join da tabela nova
Full outer join de ambas as tabelas

Os tipos de outer join são distinguidos por quais linhas não coincidentes (unmatched) são mantidas na tabela resultado e a execução do join em duas ou mais tabelas é feita em uma série de passos.

No left outer join a tabela resultado contém as linhas não coindicentes (unmatched) da primeira tabela acessada no primeiro passo do join ou da tabela composite do passo anterior da execução. No right outer join a tabela resultado contém as linhas não coincidentes (unmatched) da tabela nova que é adicionada ao join. No full outer join a tabela resultado contém as linhas não coincidentes (unmatched) tanto da tabela composite quanto da tabela nova.

Pelo fato de o outer join gerar uma tabela resultado com mais de uma linha, ele deve ser codificado dentro de uma declaração DECLARE CURSOR.

Tanto uma view quanto um cursor serão read only se suas declarações SELECT contiverem um join.

Sintaxe

SELECT column-specification [AS result-column]
  [, column-specification [AS result-column] ] ...
FROM table-spec [, table-spec] ...
  {LEFT | RIGHT | FULL} [OUTER] JOIN table-spec
  [ON join-condition ]
  [WHERE selection-condition]
  [ORDER BY sort-column [DESC] [, sort-column [DESC] ] ...]

Exemplos

Left outer join

SELECT A.DEPTNO, B.EMPNO
  FROM PW0001.DEPT A
  LEFT JOIN PW0001.EMP B
  ON A.DEPTNO = B.WORKDEPT

Full outer join

SELECT A.DEPTNO, B.EMPNO
  FROM PW0001.DEPT A
  FULL JOIN PW0001.EMP B
  ON A.DEPTNO = B.WORKDEPT

Para gerar o resultado, o join utiliza o artifício da linha nula (null row) que é uma linha onde todas as colunas tem valor nulo. No primeiro exemplo acima, cada linha não coincidente (unmatched) da tabela DEPT é combinada com uma linha nula da tabela EMP. No segundo exemplo, cada linha unmatched da tabela DEPT é combinada com uma linha nula da tabela EMP e cada linha unmatched da tabela EMP é combinada com uma linha nula da tabela DEPT.

O full join pode utilizar apenas o operador igual (=). Em conjunto com o operador igual (=) pode-se usar AND mas OR e NOT não são permitidos.

Licença: licença proprietária