Escolar Documentos
Profissional Documentos
Cultura Documentos
Se você é iniciante em Bancos de Dados ou ainda tem dúvidas sobre a utilização de Joins
entre tabelas, saiba que o procedimento é mais simples do que parece. Basta entender pra que
serve cada tipo de join e como eles trabalham. Sua experiência e persistência se encarregarão
de lhe ensinar qual utilizar nas situações do cotidiano.
Programas Utilizados
- Bancos de Dados (Firebird, Interbase, MySQL, etc.)
- Gerenciador de Bancos de Dados (IBExpert, IBOConsole, IBConsole, etc.)
- Tabelas abaixo
FILIAL
FIL_CODIGO FIL_NOME
1 MATRIZ
2 FILIAL 1
3 FILIAL 2
FUNCIONARIOS
FUN_CODIGO FIL_CODIGO FUN_NOME
1 1 JOÃO
2 2 JOAQUIM
3 2 JOSÉ
4 3 MÁRCIO
5 null PEDRO
Pequena História
Na verdade, utilizamos palavras em inglês, padronizadas pela ANSI (American National
Standards Institute), originalmente criada pela IBM com o nome de SEQUEL (Structured
English Query Language) e posteriormente abreviada para SQL, para efetuar consultas de
dados a um banco de dados relacional. Mas o que vem a ser um Join? Esta palavra em inglês
significa Unir ou União e a utilizamos quando precisamos buscar dados em outras tabelas
desde que satisfaça as condições para isso.
Porém ainda paira a dúvida: utilizo Join, Inner Join, Left Join, Right Join ou me jogo do 14º
Andar?
Esta história de direita e esquerda funciona em qualquer banco de dados relacional pois são
padrões definidos para se manter a compatibilidade entre os bancos de dados. Imagine você
como seria se para fazer uma busca no Firebird você tivesse de escrever:
SELECT * FROM FUNCIONARIOS
WHERE FIL_CODIGO = 1
1/3
Diferença entre Left, Right e Inner Join
Left Join
Na primeira situação temos o Left Join, a seta está apontando para a tabela FUNCIONARIOS
simbolizando que a precedência é da tabela da Esquerda, então podemos dizer que no select
abaixo, serão listados todos os Funcionários, mesmo aqueles que não tem Filial cadastrada.
SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A
LEFT JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO
-- RESULTADO DA CONSULTA --
FUN_NOME FIL_NOME
JOÃO MATRIZ
JOAQUIM FILIAL 1
JOSÉ FILIAL 1
MÁRCIO FILIAL 2
PEDRO null
Repare que Pedro foi incluído no resultado, porém ele não possui uma Filial associada em seu
cadastro. Este tipo de Join é o mais utilizado quando não se tem certeza que todos os registros
possuem ligação entre as tabelas e também na maioria das vezes por questões de
desempenho.
Right Join
Na segunda situação foi utilizado o Right Join, também conhecido apenas por Join, que aponta
para a tabela FILIAL simbolizando a precedência da tabela da Direita, logo, concluímos que os
2/3
Diferença entre Left, Right e Inner Join
dados da tabela Filial devem existir para que o registro seja trazido no Select.
SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A
RIGHT JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO
-- AINDA PODEMOS UTILIZAR SEM A PALAVRA RIGHT
/*
SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A
JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO
*/
-- RESULTADO DA CONSULTA --
FUN_NOME FIL_NOME
JOÃO MATRIZ
JOAQUIM FILIAL 1
JOSÉ FILIAL 1
MÁRCIO FILIAL 2
Note que o funcionário Pedro desta vez não foi incluído na lista de resultados, isto ocorreu
porque esta consulta traz apenas registros onde existe um cadastro de Filial para o
Funcionário.
Inner Join
Temos ainda a situação do Inner Join que nada mais faz do que observar se existem registros
combinados em ambas as tabelas, ou seja, para que um registro seja incluído na lista de
resultados, o campo de ligação entre duas tabelas deve satisfazer as condições em ambas. O
resultado desta consulta seria algo muito semelhante ao Join.
Conclusão
Com algum conhecimento básico para interação entre tabelas, podemos efetuar consultas
complexas ao banco de dados envolvendo resultados perfeitamente controlados. Isto garante
não somente credibilidade em consultas mas também desempenho do sistema quando
utilizado corretamente. Ainda existem outros tipos de Join, porém seus resultados são
semelhantes ou seu uso é muito pouco frequente. Para quem quiser saber mais a respeito de
consultas SQL, basta ler um livro de Banco de Dados (qualquer um que seja pois todos tem
muito conteúdo sobre PL/SQL).
3/3