Archive for the 'sql' Category

Cláusula JOIN (INNER,LEFT,RIGHT)

Nas minhas pesquisas sobre o JOIN achei uma explicação muito boa e didática sobre a cláusula. Quem escreveu isso num fórum foi o Herleson Pontes (http://www.officeceara.com.br):

————————————————————

Vamos as explicações: suponha que você tenha duas tabelas: Clientes e Vendas, relacionadas entre si. Na tabela de Clientes, você tem o cadastro de todos os clientes da loja. Na tabela de Vendas, você tem as vendas que foram realizadas pelos clientes da loja. suponha ainda que não é obrigado o cliente ser cadastrado para efetuar uma venda.

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;

————————————————————