prosige.com.br

  • Aumentar tamanho da fonte
  • Tamanho da fonte padrão
  • Diminuir tamanho da fonte
Home Artigos Banco de Dados Diferença entre Left, Right e Inner Join

Diferença entre Left, Right e Inner Join

Imprimir PDF
Avaliação do Usuário: / 268
PiorMelhor 

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


E no DB2 fosse completamente diferente:
FROM FUNCIONARIOS WHERE FIL_CODIGO = 1 SELECT *

Isto certamente causaria um "Access Violation" em sua cabeça.
Vamos ao que interessa.

Entendendo LEFT, RIGHT e INNER
Quando dizemos que a tabela será Left ou Right, estamos informando ao comando SQL que ele deve obedecer o sentido para a Direita ou para a Esquerda, ou seja, ao utilizarmos Left Join o banco de dados irá analisar a estrutura da tabela da Direita e comparar com a tabela da Esquerda (leia-se Direita para a Esquerda), veja o desenho.
Left e Right 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 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).

 

Menu Principal


Warning: Parameter 1 to modMainMenuHelper::buildXML() expected to be a reference, value given in /home/prosige/public_html/portal/libraries/joomla/cache/handler/callback.php on line 99

Quem está online

Nós temos 2 visitantes online
Banner
Banner