Olá pessoal, vamos dar continuidade a nossa trilha do SQL. Dessa vez vamos aprender a relacionar tabelas no momento das consultas.
Para isso vamos utilizar a cláusula JOIN e suas cláusulas conjuntas.
Temos algumas variações da cláusula JOIN. Agora vamos entender cada uma delas.
INNER JOIN ou JOIN
A cláusula INNER JOIN ou somente JOIN, é utilizada para cruzarmos registro trazendo apenas aqueles que existirem em ambas as tabelas.
SELECT Func.NomeFuncionario ,Carg.DescCargo FROM FUNCIONARIO Func INNER JOIN CARGO Carg ON Carg.Cod = Func.CodCargo
Neste exemplo a consulta retornará todos os registros que contemplem ambos os lados da consulta, ou seja todos os funcionários que possuam cargos.
LEFT JOIN
A cláusula LEFT JOIN, é utilizada para cruzarmos registro trazendo todos os da tabela declarada a esquerda e aqueles que existirem em ambas as tabelas.
SELECT Func.NomeFuncionario ,Carg.DescCargo FROM FUNCIONARIO Func LEFT JOIN CARGO Carg ON Carg.Cod = Func.CodCargo
Neste exemplo a consulta retornará todos os funcionários que tenham cargo e também os que não possuírem, neste caso as informações de cargo virão como NULL.
RIGHT JOIN
A cláusula RIGHT JOIN, é utilizada para cruzarmos registro trazendo todos os da tabela declarada a direita e aqueles que existirem em ambas as tabelas.
SELECT Func.NomeFuncionario ,Carg.DescCargo FROM FUNCIONARIO Func RIGHT JOIN CARGO Carg ON Carg.Cod = Func.CodCargo
Neste exemplo a consulta retornará todos os cargos que tenham funcionários e também os que não possuírem, neste caso as informações de funcionário virão como NULL.
FULL JOIN
A cláusula FULL JOIN, é utilizada para cruzarmos registro trazendo os registros de ambas as tabelas, possuindo cruzamento ou não.
SELECT Func.NomeFuncionario ,Carg.DescCargo FROM FUNCIONARIO Func FULL JOIN CARGO Carg ON Carg.Cod = Func.CodCargo
Neste exemplo a consulta retornará todos os registros de ambas as tabelas, para as que não possuírem relacionamento, as informação não contempladas virão como NULL.
CROSS JOIN
A cláusula CROSS JOIN, realiza o cruzamento de todos os registro da primeira tabela com todos os registros da segunda tabela.
Está cláusula deve ser utilizado com cuidado, pois pode gerar lentidão no seu processamento dependendo do volume de registros.
SELECT Func.NomeFuncionario ,Carg.DescCargo FROM FUNCIONARIO Func CROSS JOIN CARGO Carg
No caso a cima, a consulta retornara um cruzamento desconsiderando a chave, e vai cruzar todos os registros de funcionário com os registros de cargo.
Por exemplo
NomeFuncionario | DescCargo |
Paulo | Analista |
Paulo | Gerente |
Paulo | Diretor |
Maria | Analista |
Maria | Gerente |
Maria | Diretor |
Pedro | Analista |
Pedro | Gerente |
Pedro | Diretor |
Pontos muito importantes !!!
- É sempre muito importante, para termos uma query que desempenhe bem, montarmos a cláusula ON seguindo um índice existente na tabela que será consultada.
- Também é muito importante deixar as condições relativas a uma tabela sempre dentro do ON da mesma tabela e não no WHERE. No WHERE deixamos as condições da tabela principal.
- Definirmos os campos que queremos que a consulta retorne, nunca deixar * no SELECT, isso impacta muito na performance do retorno.
- Utilizar FULL JOIN e CROSS JOIN com prudência, pois os mesmos impactam na performance das consultas.
Espero que ajude muito a todos.
Sobre o Autor