Voltar para a lista de artigos Artigos
4 minutos de leitura

Um Guia Ilustrado para o SQL OUTER JOIN

Já discutimos o curso SQL CROSS JOIN e JUNÇÃO DOS MEMBROS declarações. Chegou a hora de explorar outra: OUTER JOIN. O que é isso? Como funciona? Vamos descobrir!

Se você leu nossos outros posts, você sabe que pode vincular os dados em duas ou mais tabelas de banco de dados usando um dos muitos tipos de operadores SQL join. Hoje, vamos discutir os três tipos de OUTER JOIN: LEFT OUTER JOIN, RIGHT OUTER JOIN, e FULL OUTER JOIN. Estes juntam registros baseados em valores de linha correspondentes, mas o fazem de forma um pouco diferente de outras declarações de junção.

O que é um SQL OUTER JOIN?

Para responder a esta pergunta, temos que nos aprofundar nos diferentes tipos de OUTER JOIN:

  • LEFT OUTER JOIN retorna cada registro na tabela da esquerda e todos os registros correspondentes da tabela da direita. Se não for encontrada nenhuma correspondência, um NULL é mostrado ao lado do registro inigualável.
  • RIGHT OUTER JOIN retorna todos os registros da tabela da direita e todos os registros correspondentes da tabela da esquerda. Se não for encontrada nenhuma correspondência, é mostrado um NULL ao lado do registro inigualável.
  • FULL OUTER JOIN retorna todos os registros de ambas as tabelas. Todos os registros inigualáveis são emparelhados com NULLs.

Agora vamos ver as tabelas que vamos usar para ilustrar estes operadores.

O "shirt"A tabela tem apenas um campo, "color_shirt":

color_shirt
yellow
green
blue

O "pants"A tabela também tem um campo, "color_pants":

color_pants
pink
green
blue

Estas tabelas são auto-explicativas. Imagine-as como duas partes de uma roupa: a cor de suas calças e a cor de sua camisa. A idéia é encontrar camisas e calças com cores idênticas.

É bom saber: A tabela da esquerda é a primeira tabela listada e é encontrada após a cláusula FROM. A tabela da direita é a segunda tabela listada e é encontrada após a cláusula JOIN. Você geralmente pode omitir a palavra-chave OUTER em qualquer OUTER JOIN - FULL JOIN, LEFT JOIN, e RIGHT JOIN funcionará igualmente bem em muitos bancos de dados (mas verifique sua documentação para ter certeza).

Usando o JOGO ESQUERDO

O LEFT OUTER JOIN recupera todos os registros da primeira (esquerda) tabela e os combina com os registros da segunda (direita) tabela. Quaisquer registros não correspondentes da tabela da esquerda também são selecionados, mas com valores NULL onde estariam os registros da tabela da direita.

Dê uma olhada no exemplo.

SELECT color_shirt, color_pants 
FROM shirt
LEFT JOIN pants ON color_shirt=color_pants;

A tabela da esquerda (depois de FROM) é "shirt" e a tabela correta (depois de LEFT JOIN) é "pants”. O ON predicate declara a condição para a correspondência de registros de ".shirt"com registros de "pants”. Esta condição é que os valores no campo "shirt"."color_shirt" e aqueles no campo "pants"."color_pants" devem corresponder. Se não houver correspondência, os registros do campo "shirt"tabela será mostrada, mas um valor NULL é definido onde a correspondência "pants"seria o recorde.

Estes são os resultados desta consulta:

color_shirt color_pants
yellow NULL
green green
blue blue

E aqui está uma ilustração de como esta consulta funciona e como são os resultados:

esquerda se juntar

Como você vê, as roupas verdes e azuis combinadas estão juntas. A camisa amarela não tem calças porque o "pants"A tabela não tem nenhum campo com valor "amarelo".

Usando um JOGO DIREITO DE OUTRO

O RIGHT OUTER JOIN funciona como o LEFT JOIN, mas com uma grande diferença: ele seleciona todos os registros da tabela correta (neste caso, "pants”). Os registros da tabela da esquerda (").shirt") só serão mostrados se corresponderem.

Veja a consulta:

SELECT color_shirt, color_pants 
FROM shirt	
RIGHT JOIN pants ON color_shirt=color_pants;

Aqui está o resultado:

color_shirt color_pants
NULL pink
green green
blue blue

E aqui está a ilustração do uso de RIGHT JOIN e seus resultados. Todas as calças são mostradas, mas não há camisa correspondente para o par de calças cor-de-rosa.

junte-se à direita

Usando um JOIN FULL OUTER JOIN

Vamos recapitular o que fizemos até agora. Com LEFT JOIN, todas as camisas e quaisquer calças combinadas foram devolvidas. Com RIGHT JOIN, todas as calças e quaisquer camisas combinadas foram devolvidas. O que acontecerá se você usar um FULL OUTER JOIN? Ele mostra todos os registros de ambas as tabelas. Se possível, ele mostrará os registros correspondentes; se não, um NULL será mostrado onde o registro correspondente seria.

Vamos ver um exemplo de consulta:

SELECT color_shirt, color_pants 
FROM shirt
FULL  JOIN pants ON color_shirt=color_pants;

Observe que em um FULL JOIN qual tabela é esquerda e qual é direita é insignificante. O resultado será o mesmo.

Aqui está o resultado:

color_shirt color_pants
yellow NULL
green green
blue blue
NULL pink

O conjunto de resultados contém todos os registros armazenados no "shirt" mesa e no "pants" mesa.

junção completa

A foto mostra que FULL JOIN devolveu todas as roupas possíveis: todas as camisas e todas as calças. Os pares correspondentes (verde e azul) são mostrados juntos, e os itens inigualáveis (camisa amarela e calça rosa) são mostrados separadamente.

Quer saber mais sobre os pares combinados?

Há mais a descobrir sobre o uso de OUTER JOINS. Para saber mais, confira LearnSQL.com.br's SQL para Iniciantes curso.