Home Artigos Banco de Dados Diferença entre Left, Right e Inner Join
Diferença entre Left, Right e Inner Join	Qui, 20 de Agosto de 2009 10:44	Marcos Rocha	Artigos	- Banco de Dados	Avaliação do Usuário: / 317
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 abaixoFILIALFIL_CODIGO FIL_NOME1 MATRIZ2 FILIAL 13 FILIAL 2
FUNCIONARIOSFUN_CODIGO FIL_CODIGO FUN_NOME1 1 JOÃO2 2 JOAQUIM3 2 JOSÉ4 3 MÁRCIO5 null PEDRO
Pequena HistóriaNa 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 FUNCIONARIOSWHERE FIL_CODIGO = 1E 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 INNERQuando 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 JoinNa 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 ALEFT JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO
-- RESULTADO DA CONSULTA --FUN_NOME FIL_NOMEJOÃO MATRIZJOAQUIM FILIAL 1JOSÉ FILIAL 1MÁRCIO FILIAL 2PEDRO nullRepare 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 JoinNa 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 ARIGHT 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 AJOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO*/
-- RESULTADO DA CONSULTA --FUN_NOME FIL_NOMEJOÃO MATRIZJOAQUIM FILIAL 1JOSÉ FILIAL 1MÁRCIO FILIAL 2Note 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 JoinTemos 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ãoCom 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).
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