SQL Server 2008 - Consultas com JOIN - TI Selvagem
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:
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.
Posted by Márcio de Andrade Banco de Dados Permalink
Flex – The entity name must immediately follow the '&' in the entity reference	Android – Convergindo serviços de chat com IMO