Exemplos de consultas com tabelas relacionadas e comparação de Inner join com Left join

Neste artigo quero mostrar como fazer consultas com tabelas relacionas e comparar a instrução Inner Join com Left Join.

No artigo anterior falei sobre relacionamentos no MySQL, portanto neste artigo vou mostrar a prática.

O exemplo abaixo mostra como juntar as tabelas “pessoas” e “enderecos” usando o relacionamento entre as chaves primárias e estrangeiras.

Assim, permitirá que você selecione todas as colunas das duas tabelas, relacionando-as pela chave “pessoa_id”.

SELECT pessoas.*, enderecos.* FROM pessoas JOIN enderecos ON pessoas.id = enderecos.pessoa_id;

No próximo exemplo mostra como juntar as tabelas “pedidos” e “itens” usando o relacionamento entre as chaves primárias e estrangeiras.

Então isso permitirá que você selecione todas as colunas das duas tabelas, relacionando-as pela chave “pedido_id”.

SELECT pedidos.*, itens.* FROM pedidos JOIN itens ON pedidos.id = itens.pedido_id;

O exemplo abaixo mostra como juntar as tabelas “produtos”, “produtos_categorias” e “categorias” usando o relacionamento entre as chaves primárias e estrangeiras.

Portanto isso permitirá que você selecione todas as colunas das três tabelas, relacionando-as pela chave “produto_id” e “categoria_id”.

SELECT produtos.*, categorias.* FROM produtos
JOIN produtos_categorias ON produtos.id = produtos_categorias.produto_id
JOIN categorias ON produtos_categorias.categoria_id = categorias.id;

Inner join x Left join

A principal diferença entre o INNER JOIN e o LEFT JOIN é a forma como eles lidam com linhas não correspondentes.

O INNER JOIN retorna somente as linhas que correspondem entre as tabelas unidas.

O resultado final não terá inclusão da linha caso ela não tenha correspondência na outra tabela.

Por isso esse tipo de join é útil quando você deseja retornar somente os dados correspondentes entre as tabelas.

Já o LEFT JOIN retorna todas as linhas da tabela à esquerda (a tabela especificada antes do JOIN), incluindo as linhas que não têm correspondências na tabela à direita.

O preenchimento dos valores das colunas da tabela à direita serão com NULL cao a linja a tabela à esquerda não tiver uma correspondência na tabela à direita.

Esse tipo de join é útil quando você deseja retornar todos os dados da tabela à esquerda, independentemente de haver ou não correspondências na tabela à direita.

Aqui está um exemplo para ilustrar a diferença entre INNER JOIN e LEFT JOIN:

SELECT pessoas.*, enderecos.* FROM pessoas
INNER JOIN enderecos ON pessoas.id = enderecos.pessoa_id;

SELECT pessoas.*, enderecos.* FROM pessoas
LEFT JOIN enderecos ON pessoas.id = enderecos.pessoa_id;

No primeiro exemplo, o resultado final terá o retorno apenas das pessoas que possuem um endereço registrado, por causa do INNER JOIN.

Ou seja, uma pessoa sem um endereço registrado não está no resultado.

Já no segundo exemplo, usando o LEFT JOIN, todas as pessoas serão retornadas no resultado final, independentemente de possuírem ou não um endereço registrado.

Se uma pessoa não possuir um endereço registrado, os valores das colunas de endereço serão preenchidos com NULL.

Por essa razão, o INNER JOIN é mais adequado quando você deseja retornar somente os dados correspondentes entre as tabelas, enquanto o LEFT JOIN é mais adequado quando você deseja retornar todos os dados da tabela à esquerda, independentemente de haver ou não correspondências na tabela à direita.

Tags: | | | | |

2 Comentários

Deixe um comentário

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


Solicitar exportação de dados

Use este formulário para solicitar uma cópia de seus dados neste site.

Solicitar a remoção de dados

Use este formulário para solicitar a remoção de seus dados neste site.

Solicitar retificação de dados

Use este formulário para solicitar a retificação de seus dados neste site. Aqui você pode corrigir ou atualizar seus dados, por exemplo.

Solicitar cancelamento de inscrição

Use este formulário para solicitar a cancelamento da inscrição do seu e-mail em nossas listas de e-mail.