segunda-feira, 5 de agosto de 2002

Como usar o "JOIN" do SQL

Joins - Junção de Tabelas


O que são JOINS ?


Quando você trabalha com um banco normalizado, muitas das pesquisas sobre dados que você precisa enviar ao servidor são compartilhadas entre tabelas. Uma das metas da normalização é acabar com colunas que tenham um único propósito e estejam na mesma tabela, com isso seu banco fica com colunas que são compartilhadas entre estas tabelas. Por exemplo imagine as seguintes tabelas:


SELECT * FROM TAB_EMPREGADOS




























NomeSalárioDepartamento
Salas900,001
Zamorano800,004
Fernanda950,003
Thalia450,00
Rodrigo650,005

SELECT * FROM TAB_DEPARTAMENTOS






















IDDescricao
1Banco de Dados
2Desenvolvimento
3Suporte
4Treinamento
5Consultoria

A coluna DEPARTAMENTO da tabela EMPREGADOS serve para identificar o ID do departamento a qual o funcionário pertence, esta coluna aparece novamente na tabela DEPARTAMENTOS através do campo ID. Portanto, podemos unir as duas tabelas.


Como faríamos?


INNER JOIN


SELECT E.NOME, E.SALARIO, D.DESCRICAO
FROM TAB_EMPREGADOS E JOIN TAB_DEPARTAMENTOS D
ON E.DEPARTAMENTO = D.ID
ORDER BY E.NOME


O resultado seria exatamente o desejado, ou seja uma lista de meus funcionários e salários com a respectiva descrição do departamento.























NomeSalárioDepartamento
Fernanda950,00Suporte
Rodrigo650,00Consultoria
Salas900,00Banco de Dados
Zamorano800,00Desenvolvimento

Este resultado é baseado no que é conhecido como INNER-JOIN, este tipo de junção monta o result-set baseando-se naquelas linhas que satisfaçam as condições de junção impostas no join (ON E.DEPARTAMENTO = D.ID).


LEFT JOIN


SELECT E.NOME, E.SALARIO, D.DESCRICAO
FROM TAB_EMPREGADOS E LEFT JOIN TAB_DEPARTAMENTOS D
ON E.DEPARTAMENTO = D.ID
ORDER BY E.NOME



























NomeSalárioDepartamento
Fernanda950,00Suporte
Rodrigo650,00Consultoria
Salas900,00Banco de Dados
Thalia450,00
Zamorano800,00Desenvolvimento

Um LEFT-JOIN define que todos os registros da tabela à esquerda do operador farão parte do result-set, portanto a condição apresentada no modificador ON não será feita na tabela TAB_EMPREGADOS, isso faz com que a funcionári Thalia seja inclusa no resultado mesmo não tendo pertencendo a algum departamento.


RIGHT JOIN


SELECT E.NOME, E.SALARIO, D.DESCRICAO
FROM TAB_EMPREGADOS E RIGHT JOIN TAB_DEPARTAMENTOS D
ON E.DEPARTAMENTO = D.ID
ORDER BY E.NOME



























NomeSalárioDepartamento
Fernanda950,00Suporte
Rodrigo650,00Consultoria
Salas900,00Banco de Dados
Zamorano800,00Treinamento
Desenvolvimento

Um RIGHT-JOIN define que todos os registros da tabela à direita do operador farão parte do result-set, agora a condição apresentada no modificador ON não será feita na tabela TAB_DEPARTAMENTOS, isso faz com que o departamento Desenvolvimento seja listado, mesmo não possuindo nenhum funcionário.


Obs: Em todos os scripts SQL usados aqui foi utilizado o padrão de join do SQL ANSI-92.



Esta matéria foi postada originalmente no ASP4Developers por Ismael Nobre (site), que na época era "Analista.
Quer me contratar ?
Cel. 96420687". Hoje, vai saber...

0 comentários: