Saltar navegação

S01.b4 - Diversas Tabelas

Conceitos

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

Tabela Projetos (PROJ)

PROJNO EMPNO
P1011
5002
P1011
5006
P1012
5001
P1013
5010
P1014
5003
P1014
5004
P1014
5005
P1015
5008

Full outer join combinando três tabelas e usando COALESCE e subquery

SELECT
COALESCE(C.EMPNO, D.EMPNO, 'NO EMP') AS EMP_NO,
  COALESCE(C.DEPTNO, C.WORKDEPT, 'NO DEPT') AS DEPT_NO,
  COALESCE(C.DEPTNAME, 'NO DEPT NAME') AS DEPT_NAME
  COALESCE(D.PROJNO, 'NO PROJECT') AS PROJ_NO
  FROM
  (SELECT A.DEPTNO, A.DEPTNAME, B.EMPNO, B.WORKDEPT
  FROM PW0001.DEPT A
  FULL JOIN PW0001.EMP B
  ON A.DEPTNO = B.WORKDEPT) C
  FULL JOIN PW0001.PROJ D
  ON C.EMPNO = D.EMPNO
  ORDER BY EMP_NO, DEPT_NO

Tabela Intermediária

DEPTNO DEPTNAME
EMPNO
WORKDEPT
A01
ACCOUNTING
5001
A01
A04
PERSONNEL
5002
A04
A03
OPERATIONS
5003
A03
A03
OPERATIONS
5004
A03
A04
PERSONNEL
5005
A04
A04
PERSONNEL
5006
A04
A03
OPERATIONS
5007
A03
<null>
<null>
5008
A06
A02
PAYROLL
<null>
<null>
A05
MAINTENANCE
<null>
<null>

Tabela Resultado

EMP_NO DEPT_NO
DEPT_NAME
PROJ_NO
NO EMP
A02 PAYROLL NO PROJECT
NO EMP A05
MAINTENANCE
NO PROJECT
5001 A01
ACCOUNTING
P1012
5002 A04
PERSONNEL
P1011
5003 A03
OPERATIONS
P1014
5004 A03
OPERATIONS P1014
5005 A04
PERSONNEL
P1014
5006 A04
PERSONNEL
P1011
5007 A03
OPERATIONS
NO PROJECT
5008 A06
NO DEPT NAME
P1015
5010
NO DEPT
NO DEPT NAME
P1013

Na declaração SELECT acima, aparece uma segunda declaração SELECT na cláusula FROM. Esta segunda SELECT, codificada entre parênteses é denominada subquery.

No exemplo, a subquery efetua o full join das tabelas DEPT e EMP criando a tabela intermediária cujo sinonimo é "C". A declaração SELECT principal então efetua o full join da tabela intermediária com a tabela PROJ gerando a tabela resultado.

Ao se efetuar outer joins de três ou mais tabelas, é comum o uso de subqueries para efetuar os joins de duas tabelas a cada etapa.

A primeira função COALESCE existem três argumentos; C.EMPNO, D.EMPNO e 'NO EMP'. O resultado da execução da função é retornar o primeiro valor não nulo encontrado.

Se a cláusula ORDER BY não for utilizada, a tabela resultado terá uma sequencia de linhas sem sentido.

Licença: licença proprietária