Inner, Left e Right Join
Neste cenário, podemos ter três situações:
1) Existem clientes que ainda não fizeram nenhuma compra na loja;
2) Existem vendas que foram efetuadas por clientes não cadastrados no sistema;
3) Existem vendas que foram realizadas por clientes cadastrados.
Entendido o contexto acima, fica fácil de entender os JOINS. Basicamente, a sintaxe seria a abaixo:
SELECT campos FROM Clientes c TIPO_DE_JOIN JOIN Venda v ON c.cod_cliente = v.cod_cliente;
Veja agora como aplicar cada tipo de Join:
INNER JOIN: O Inner Join é utilizado nas situações em que você quer selecionar os registro das duas tabelas, desde que as mesmas possuam informações cruzadas (relacionadas). No nosso exemplo, é o JOIN que resolve a situação 3: a consulta vai retornar os clientes cadastrados que efetuaram compras.
SELECT campos FROM Clientes c INNER JOIN Venda v ON c.cod_cliente = v.cod_cliente;
OUTER JOIN: O Outer join possui o funcionamento um pouco diferente do anterior. Ao usar o Outer join, além de podermos retornar os registros das duas tabelas seguindo alguma relação, ainda podemos retornar registros que não entram nesta relação, que é a situação mais usada.
Você tem duas opções para se utilizar no Outer Join:
- LEFT OUTER JOIN (ou simplesmente LEFT JOIN): Aplica o conceito de Outer Join na tabela que se encontrar à esquerda da relação (ou seja, o resultado vem da tabela à esquerda). No nosso exemplo, é o JOIN que resolve a situação 1: a consulta retorna apenas os clientes que ainda não efetuaram nenhuma compra na loja.
SELECT campos FROM Clientes c LEFT OUTER JOIN Venda v ON c.cod_cliente = v.cod_cliente WHERE c.cod_cliente IS NULL;
- RIGHT OUTER JOIN (ou simplesmente RIGHT JOIN): Aplica o conceito de Outer Join na tabela que se encontrar à direita da relação (ou seja, o resultado vem da tabela à direita). No nosso exemplo, é o JOIN que resolve a situação 2: a consulta retorna apenas asvendas que foram realizadas por clientes não cadastrados na loja.
SELECT campos FROM Clientes c RIGHT OUTER JOIN Venda v ON c.cod_cliente = v.cod_cliente WHERE v.cod_cliente IS NULL;
Bom achei esse explicação em um fórum que não lembro agora, e achei legal publicar aqui.
Se alguem souber deixe um comentário que eu coloco os créditos.
Abraços
Tiago Silveira
Compare Preços de: games, PS2, PS3, Nintendo, Wii, iPod no Buscapé.
