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
Nome | Salário | Departamento |
Salas | 900,00 | 1 |
Zamorano | 800,00 | 4 |
Fernanda | 950,00 | 3 |
Thalia | 450,00 | |
Rodrigo | 650,00 | 5 |
SELECT * FROM TAB_DEPARTAMENTOS
ID | Descricao |
1 | Banco de Dados |
2 | Desenvolvimento |
3 | Suporte |
4 | Treinamento |
5 | Consultoria |
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.
Nome | Salário | Departamento |
Fernanda | 950,00 | Suporte |
Rodrigo | 650,00 | Consultoria |
Salas | 900,00 | Banco de Dados |
Zamorano | 800,00 | Desenvolvimento |
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
Nome | Salário | Departamento |
Fernanda | 950,00 | Suporte |
Rodrigo | 650,00 | Consultoria |
Salas | 900,00 | Banco de Dados |
Thalia | 450,00 | |
Zamorano | 800,00 | Desenvolvimento |
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
Nome | Salário | Departamento |
Fernanda | 950,00 | Suporte |
Rodrigo | 650,00 | Consultoria |
Salas | 900,00 | Banco de Dados |
Zamorano | 800,00 | Treinamento |
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.
Quer me contratar ?
Cel. 96420687". Hoje, vai saber...
0 comentários:
Postar um comentário