quinta-feira, 6 de dezembro de 2012

Sql Server JOINs - CROSS JOIN- Parte 5

Pessoal, neste artigo vamos falar sobre o operador CROSS JOIN. Sua função é criar um produto cartesiano entre 2 ou mais tabelas. Devemos tomar cuidado com esse operador, a depender da quantidade de tabelas e registros envolvidos a consulta poderá ser extremamente custosa. Por exemplo um cross join entre duas tabelas cada uma com 5 registros retornará um resultset com 25 registros, isso porque cada registro da primeira tabela terá uma relação com cada registro da segunda tabela! Vamos ao exemplo:

-- Tabelas temporárias

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

--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')

--Select com CROSS JOIN
SELECT F.IDFUNC, F.NOME, F.IDDEPAR, D.IDDEPAR, D.DESCRI FROM #DEPARTAMENTO D CROSS JOIN #FUNCIONARIO F; 

--Resultado!

Como podem ver, cada funcionário é relacionado com um departamento independente de existir o relacionamento entre chave primária e estrangeira. Até o próximo artigo.


Nenhum comentário:

Postar um comentário