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