Trabalhando com Full Join, Full Outer Join e Cross Join

Já publicamos artigos aqui sobre Inner Join, Left Join e Right Join, desta vez preparei exemplos para falarmos sobre Full Join, Full Outer Join e Cross Join, assim abrangemos as possibilidades de utilização do Join em nosso dia a dia.
Full Join ou Full Outer Join – Retorna todas as linhas das tabelas relacionadas no Join mesmo que não haja ligação, neste caso, se não houver ligação entre as tabelas os valores da tabela que não contém o registro retorna nulo. Pode-se dizer que o Full Join ou Full Outer Join retorna o resultado do Right e o Left Join ao mesmo tempo.
Abaixo segue exemplo da utilização do Full e Full Outer Join, como já utilizamos a estrutura da tabela de exemplo em artigos anteriores desta vez não inclui a estrutura.

Select SUM(v.QTD) 'Qtd Vendida', p.nome_produto, p.valor_produto, SUM(Valor_Total)  
  from Venda v 
  Full Join Produto p 
    On v.Id_Produto = p.Id_Produto 
 Group By p.nome_produto, valor_produto 

Resultado:
full

Select SUM(v.QTD) 'Qtd Vendida', p.nome_produto, p.valor_produto, SUM(Valor_Total)  
  from Venda v 
  Full Outer Join Produto p 
    On v.Id_Produto = p.Id_Produto 
 Group By p.nome_produto, valor_produto 

Resultado:
full

Cross Join – Em diversas literaturas veremos o Cross Join como produto de um plano cartesiano, na verdade simplificando a explicação sobre o Cross Join eles cruzam todas as informações da tabela A com as da tabela B. O Cross Join não necessita da utilização do ON A.ID = B.ID, sendo assim não necessita que as tabelas tenham ligação umas com as outras.
Vejamos abaixo um exemplo da utilização do Cross Join:

 
Create table funcionario (nome varchar(20)) 
go 
Insert into funcionario values ('Thiago Cruz'), ('Alexandre Curvelo'), ('Pedro Cardoso'), ('Wallacy Marques') 
Go 
Create Table Funcao (cargo varchar(30), salario money) 
go 
Insert Into Funcao Values ('Dba Jr',2300),('Desenvolvedor',2000),('Estagiario',1000),('Dba Sr.',6200),('Arquiteto de Sistemas',8400) 
Go 
Select cao.cargo, fun.nome, cao.salario  
  from Funcionario fun 
 Cross Join Funcao cao 

Resultado:
cross

Note que quando utilizamos o Cross Join as tabelas não tem nenhuma ligação uma com a outra e em uma tabela temos 4 registros e na outra 5.

2 Comentários

  1. Fábio Pereira de Souza

    Thiago, bom dia.

    Uma dúvida. Não há nenhuma diferença entre Full Join e Full Outer Join?

    Obrigado.

    Responder

    1. Fabio, boa tarde.
      Exatamente, Full Outer Join é a mesma coisa que Full Join, assim como Left outer Join é a mesma coisa que Left Join e por ai vai.

      Responder

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *


*