quinta-feira, 6 de dezembro de 2012

Sql Server JOINs - FULL OUTER JOIN- Parte 4

Olá, continuando a falar sobre os tipos de junções hoje iremos abordar a junção FULL OUTER JOIN.

O operador FULL OUTER JOIN (ou FULL JOIN) tem como função unir e retornar os dados de 2 ou mais tabelas utilizando algum dado que seja comum entre elas. De um modo geral esse dado compreende suas chaves primárias e extrangeiras. Para facilitar a compreensão, nesse artigo não vou utilizar o banco AdventureWorks. Vejamos no script abaixo os resultados que serão retornados.

-- Criar tabelas temporárias

create table #FUNCIONARIO
(
 IDFUNC INT,
 NOME VARCHAR(40),
 IDDEPAR INT NULL
)
CREATE TABLE #DEPARTAMENTO
(
IDDEPAR INT,
DESCRI VARCHAR(40)
)

-- Inserir dados para teste

INSERT INTO #FUNCIONARIO VALUES(1,'MARIA',NULL)
INSERT INTO #FUNCIONARIO VALUES(2,'JOSE',NULL)
INSERT INTO #FUNCIONARIO VALUES(3,'JOAO',1)
INSERT INTO #FUNCIONARIO VALUES(4,'ANA',2)
INSERT INTO #FUNCIONARIO VALUES(5,'SILVA',3)

INSERT INTO #DEPARTAMENTO VALUES (1, 'RH')
INSERT INTO #DEPARTAMENTO VALUES (2, 'ADM')
INSERT INTO #DEPARTAMENTO VALUES (3, 'FIN')
INSERT INTO #DEPARTAMENTO VALUES (4, 'PATR')
INSERT INTO #DEPARTAMENTO VALUES (5, 'SEG')

-- Executar select
SELECT F.IDFUNC, F.NOME, F.IDDEPAR, D.IDDEPAR, D.DESCRI FROM #DEPARTAMENTO D FULL OUTER JOIN #FUNCIONARIO F ON F.IDDEPAR = D.IDDEPAR;
-- Resultado do select

Analisando o resultado podemos chegar a conclusão que o operador FULL JOIN funciona como uma união dos operadores LEFT JOIN e RIGHT JOIN. Execute o select abaixo e compare os resultados.

-- select com union

SELECT F.IDFUNC, F.NOME, F.IDDEPAR, D.IDDEPAR, D.DESCRI FROM #DEPARTAMENTO D LEFT JOIN #FUNCIONARIO F ON F.IDDEPAR = D.IDDEPAR
UNION
SELECT F.IDFUNC, F.NOME, F.IDDEPAR, D.IDDEPAR, D.DESCRI FROM #DEPARTAMENTO D RIGHT JOIN #FUNCIONARIO F ON F.IDDEPAR = D.IDDEPAR

Nenhum comentário:

Postar um comentário