INNERJOIN e OUTJOIN no MySQL

Janeiro 2017


Este artigo é indicado para os usuários que querem usar JOIN, muito útil, mas que pode confundi-los entre os INNER e os OUTER.

O JOIN

JOIN permite recuperar informações provenientes de diversas mesas. Estas mesas devem estar ligadas pelo menos a uma coluna (um nome, um ID, um número de telefone, aquilo que você quiser, mas estas duas mesas devem ter uma coluna em comum). É o que se chama de critério para JOIN .

INNER JOIN : intersecção das mesas

A INNER JOIN (JOIN interno) é utilizado quando você tem duas, e que você recupera somente as informações das linhas presentes nas duas.

Exemplo: você tem uma mesa pessoas que contém muita gente com dados gerais (pessoa-id, sobrenome, nome, endereço...) e você tem uma mesa engenheiros que contém informações próprias aos engenheiros 9id-engenheiro, pessoa (id_engenheiro, pessoa_id, nome de empresa, escola...). Admitamos que sua base é própria e que todos os engenheiros estejam presentes na mesa Pessoas. Agora você recupera todas as informações dos engenheiros, incluindo endereços, nomes, sobrenomes. É preciso, depois, conseguir as informações estocadas nas duas mesas! Aqui, o nosso critério para JOIN é o id_pessoa presente nos dois, e único em cada uma das mesas.

Vamos em frente:
SELECT *   
FROM pessoas p INNER JOIN engenheiros i ON i.pessoa_id = p.pessoa_id;


Recupera-se então todas as informações das pessoas presentes nas duas mesas.

OUTER JOIN: união das mesas

O OUTER JOIN (juntar externo) torna-se útil quando queremos guardar uma ou outra das mesas completas. No exemplo acima, recuperamos somente uma parte da mesa pessoa (aquelas tem uma linha na mesa engenheiro). Devemos, assim, sublinhar que queremos guardar a mesa pessoas completa : ela terá os dados engenheiros para os engenheiros, e valores vazios para as pessoas ausentes da mesa engenheiros. É para isso, que utilizamos um OUTER JOIN.

LEFT OUTER JOIN

O LEFT OUTER JOIN diz que é a primeira mesa citada a que deve ficar completa.
No nosso exemplo, isto fica assim:
SELECT * FROM pessoas p LEFT OUTER JOIN engenheiros i ON i.pessoa_id = p.pessoa_id;


Pronto, com isto você tem a mesa pessoas completa com os dados da mesa engenheiros se ela existr.

RIGHT OUTER JOIN

É o mesmo que o LEFT, mas aqui, a segunda mesa que será inteiramente guardada. Você é livre para escolher entre LEFT ou RIGHT, mas você verá que, em certos casos Juntar em cascata, pode revelar-se mais prático para usar.

Nossa solicitação:
SELECT *   
FROM engenheiros e RIGHT OUTER JOIN pessoas p ON p.pessoas_id = i.pessoa_id;


Notemos, ao mesmo tempo, que no nosso exemplo, os engenheiros que se encontram todos na mesa Pessoas, o INNER JOIN é exatamente a mesma coisa que outro realizado na mesa dos engenheiros. Nos dois casos tudo será recuperado completamente.

FULL OUTER JOIN

Muito útil também, o FULL OUTER JOIN permite recuperar a integralidade dos dados das duas mesas. Muitas das colunas vazias por um ou outro das mesas recuperadas. Vazio por um ou outro das mesas recuperadas..

Aqui temos:
SELECT *  FROM pessas p FULL OUTER JOIN engenheiros  i ON i.pessoa_id = p.pessoae_id;


Será mais uma vez rigorosamente equivalente ao RIGHT e ao LEFT join realizados aqui na frente pois a mesa já está recuperada na sua totalidade.

Bem, agora cabe à você decidir como juntar para obter o que busca.

Veja também

Publicado por ninha25. Última modificação: 6 de dezembro de 2016 às 06:39 por ninha25.
Este documento, intitulado ' INNERJOIN e OUTJOIN no MySQL', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.