Resumo Rápido – Consultas com JOIN no SQL

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.

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!


2 + nove =

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>