INNERJOIN e OUTJOIN no MySQL

Faça uma pergunta
Esta dica é indicada 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 tabelas. Estas tabelas devem ser ligadas por, pelo menos, uma coluna </bold> (um nome, um ID, um número de telefone, aquilo que você quiser, mas estas duas tabelas devem ter uma coluna em comum). É o que se chama de critério de JOIN.

INNER JOIN: intersecção das tabelas

O INNER JOIN (JOIN interno) é utilizado quando você tem duas tabelas e só recupera as informações das linhas presentes nas duas.

Por exemplo, você tem uma tabela Pessoas que contém muita gente com dados gerais (pessoa_ID, sobrenome, nome, endereço, etc.) e você tem uma tabela Engenheiros, que contém informações próprias aos engenheiros (ID_engenheiro, pessoa_ID, nome de empresa, escola, etc.). Admitamos que seu banco de dados está atualizado e que todos os engenheiros estejam presentes na tabela Pessoas. Depois disso, você quer recuperar todas as informações sobre os engenheiros, incluindo endereços, nomes e sobrenomes. Então, é preciso conseguir as informações armazenadas nas duas tabelas. Aqui, o nosso critério de JOIN é o ID_pessoa presente nas suas, e único em cada uma das tabelas.

Vamos fazer:

SELECT *   
FROM pessoas p
INNER JOIN engenheiros i ON i.pessoa_id = p.pessoa_id;

Recuperamos, então, todas as informações das pessoas presentes nas duas tabelas.

OUTER JOIN: união das tabelas

O OUTER JOIN (juntar externo) torna-se útil quando queremos manter uma das duas tabelas completas. No exemplo acima, recuperamos somente uma parte da tabela pessoa (aquelas que têm uma linha na tabela Engenheiro). Devemos, assim, especificar que queremos manter a tabela pessoas completa. Então, vamos ter os dados Engenheiros para os engenheiros, e valores vazios para as pessoas ausentes da tabela Engenheiros. É para isso, que utilizamos um OUTER JOIN.

LEFT OUTER JOIN

O LEFT OUTER JOIN especifica que é a primeira tabela citada 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 tabela pessoas completa com os dados da tabela Engenheiros, se ela existir.

RIGHT OUTER JOIN

É igual ao LEFT, mas aqui, é a segunda tabela que será completamente mantida. Você pode escolher entre LEFT ou RIGHT, mas você verá que, em certos casos, Juntar em cascata é mais prático.

Nossa solicitação seria aqui:

SELECT *   
FROM engenheiros e RIGHT OUTER JOIN pessoas p ON p.pessoas_id = i.pessoa_id;

Saiba que, no nosso exemplo, como os engenheiros se encontram todos na tabela Pessoas, o INNER JOIN é exatamente igual ao OUTER JOIN realizado na tabela dos engenheiros. Nos dois casos tudo será recuperado completamente.

FULL OUTER JOIN

O FULL OUTER JOIN também é muito útil e permite recuperar a integralidade dos dados das duas tabelas. Muitas das colunas serão esvaziadas por uma ou pelas duas tabelas recuperadas.

Aqui teremos:

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

Aqui será, mais uma vez, igual ao RIGHT e ao LEFT JOIN realizados acima, já que a mesa foi recuperada na sua totalidade.

Foto: © MySQL.

Artigo original publicado por deri58. Tradução feita por ninha25. Última modificação: 6 de março de 2018 às 09:07 por pintuda.

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 (https://br.ccm.net/) ao utilizar este artigo.

My SQL - Evitar o bloqueio em caso de erro "TOO MANY CONN..."
PHP: A extensão MySQL é obsoleta