Resumo Rápido – Consultas com JOIN no SQL

AGRADEÇA AO AUTOR COMPARTILHE!

O comando JOIN do SQL tem a função básica de agregar tabelas mediante um campo que faça sentido às mesmas.

Por exemplo, considerando o diagrama hipotético abaixo, caso eu queira como retorno todas as compras de um cliente, poderia retornar algo como:

SELECT * FROM cliente JOIN compra ON idcliente

Mas e se eu quero retornar somente os clientes que estão ligados a uma compra? Ou compras que não estão ligadas a nenhum cliente cadastro?

Para esses tipos de consultas mais complexas existe uma série de complementos para o JOIN, dos quais os mais utilizados são INNER JOIN e LEFT JOIN, que permitem filtrar os resultados da junção entre tabelas. Veja os detalhes de cada um abaixo:


INNER JOIN

SELECT * FROM cliente INNER JOIN compra ON idcliente

Utilizando o INNER JOIN você terá como resultado de sua consulta somente os pares de cliente/compra, ou seja, os casos em que uma compra não está ligada a nenhum cliente ou clientes que não possuem compras, não serão apresentados no resultado.


LEFT JOIN

SELECT * FROM cliente LEFT JOIN compra ON idcliente

O LEFT JOIN traz todos os resultados da tabela mais à esquerda e o agrega ao seu valor correspondente das outras tabelas, caso existam. Ou seja, nesse caso a consulta retornaria todos os clientes e suas compras, caso existam. Caso não existam compras para esses clientes os campos relativos à tabela de compras ficariam em branco.


RIGHT JOIN

SELECT * FROM cliente RIGHT JOIN compra ON idcliente

De forma análoga ao LEFT JOIN, o RIGHT JOIN traz todos os resultados da tabela mais à direita e o agrega ao seu valor correspondente das outras tabelas, caso existam. Ou seja, nesse caso a consulta retornaria todas as compras e, caso existam, seus clientes. Caso não existam clientes para essa compra os campos relativos à tabela de clientes ficariam em branco.


OUTER JOIN

SELECT * FROM cliente OUTER JOIN compra ON idcliente

O comando OUTER JOIN, mesmo não sendo muito conhecido, pode ser bastante útil em alguns casos. Ele traria como resultado todos os clientes que não estão ligados à nenhuma compra.

Espero que seja útil. Caso queira complementar algo ou caso tenha alguma dúvida, deixe seu comentário!

Postado originalmente em Eu Faço Programas.

AGRADEÇA AO AUTOR COMPARTILHE!

Gabii Fonseca

Mais artigos deste autor »

Gabriella Fonseca Ribeiro tem 21 anos e cursa Sistemas de Informação. Trabalha com desenvolvimento, pesquisa e otimização de websites - SEO, marketing digital, redes sociais e comunicação interativa. || www.eufacoprogramas.com


5 Comentários

Adalberto Olegario
3

Muito bom Post porém esta sitax somente funcionara em tabelas que tem chaves comuns entre si um exemplo seria na tabela COMPRA o campo IdCliente deve ser uma chave estrangeira da tabela CLIENTE então para quem quer utilizar da junções entre tabelas vai a Sintax.

SELECT
CLI.IdCliente as IDCLIENTE,
COM.Numeropedido,
COM.NomeProduto,
COM.QtdItem
FROM
CLIENTES CLI
INNER JOIN COMPRA COM ON CLI.IdCliente = COM.IdCliente

A grande sacada na hora de realizar consultas é sempre saber qual tabela esta mais a esquerda, se eu fosse pesquisar todas as compras de um cliente então a tabela mais a esquerda seria a de COMPRA um exemplo abaixo:

SELECT
CLIENTE.IdCliente AS [ID CLIENTE],
CLIENTE.NomeCliente AS [NOME CLIENTE],
COMPRA.NumPedido AS [NUM PEDIDO],
COMPRA.DataCompra AS [DATA],
COMPRA.NomeProduto AS [DESCRIÇÃO PRODUTO],
COMPRA.ValorCompra AS [VALOR DA COMPRA]
FROM
COMPRA
LEFT JOIN CLIENTE ON COMPRA.IdCliente = CLIENTE.IdCliente
WHERE
CLIENTE.IdCliente = ‘012213’ AND (COMPRA.DataCompra >=’2011-01-01 AND COMPRA.DataCompra <= GETDATE())
ORDER BY
COMPRA.NumPedido DESC

Este Exemplo acima traz todas as compras realizadas pelo cliente numero '012213' no periodo
de data entre 01/01/2011 até a data atual e orderna todos os registros de modo decrecente
tomando como parametro o numero do pedido.
É boa pratica de programação utilizar Alias alterando o nome real das colunas como COLUNA AS [COLUNA EXEMPLO] assim ajudando a proteger seu banco de Ataques Indesejaveis.

Valeu Pessoal parabens Gabriella pelo seu Otimo Post.

Fábio Prado
4

Muito bom o post Gabriela. Como instrutor de Bancos de Dados, eu só gostaria de complementar que é uma boa prática sempre dar um apelido (ou álias) para as tabelas e referenciar as colunas prefixando o nome do apelido, como no exemplo do Adalberto. Quanto menor o apelido, melhor p/ o BD. Os motivos??? Isso eu guardo p/ os meus treinamentos… rsrsrs

[]s

Fábio Prado
http://www.fabioprado.net

Deixe seu comentário

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

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>