SQL Server 2008 – Consultas com JOIN

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:

Sua consulta deverá obedecer a sintaxe.

SELECT * FROM cliente JOIN compra ON idcliente

A palavra JOIN deve ser compreendida como JUNTAR

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 existem 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.

Esses “complementos” são:

  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • OUTER JOIN

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 cliente que não possuem compras, não serão apresentados no resultado.

SELECT * FROM cliente INNER 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 essa cliente os campos relativos à tabela de compras ficariam em branco.

SELECT * FROM cliente LEFT 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.

SELECT * FROM cliente RIGHT 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.

SELECT * FROM cliente OUTER JOIN compra ON idcliente

Juntou tudo?

Conhecimento deve ser compartilhado. Todos ganham com isso e a sociedade fica melhor e mais evoluida.

Até a próxima.

Comentarios

comentarios