Você está na página 1de 3

17/12/13

Diferena entre Left, Right e Inner Join

Diferena entre Left, Right e Inner Join


Qui, 20 de Agosto de 2009 10:44 Rocha Artigos - Banco de Dados Marcos

Avaliao do Usurio: Pior

/ 210 Melhor A VA LIA R

Se voc iniciante em Bancos de Dados ou ainda tem dvidas sobre a utilizao 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 experincia e persistncia se encarregaro de lhe ensinar qual utilizar nas situaes do cotidiano. Programas Utilizados - Bancos de Dados (Firebird, Interbase, MySQL, etc.) - Gerenciador de Bancos de Dados (IBExpert, IBOConsole, IBConsole, etc.) - Tabelas abaixo F I L I A L F I L _ C O D I G O F I L _ N O M E 1 2 3 M A T R I Z F I L I A L1 F I L I A L2

F U N C I O N A R I O S F U N _ C O D I G O F I L _ C O D I G O 1 1 2 2 3 2 4 3 5 n u l l

F U N _ N O M E J O O J O A Q U I M J O S M R C I O P E D R O

Pequena Histria Na verdade, utilizamos palavras em ingls, 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 ingls significa Unir ou Unio e a utilizamos quando precisamos buscar dados em outras tabelas desde que satisfaa as condies para isso. Porm ainda paira a dvida: utilizo Join, Inner Join, Left Join, Right Join ou me jogo do 14 Andar? Esta histria de direita e esquerda funciona em qualquer banco de dados relacional pois so padres 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: S E L E C T*F R O MF U N C I O N A R I O S W H E R EF I L _ C O D I G O=1 E no DB2 fosse completamente diferente: F R O MF U N C I O N A R I O SW H E R EF I L _ C O D I G O=1S E L E C T* Isto certamente causaria um "Access Violation" em sua cabea. 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.

www.prosige.com.br/portal/index.php?option=com_content&view=article&id=58:diferenca-entre-left-right-e-inner-join&catid=1:bancodedados&Itemid=55

1/3

17/12/13

Diferena entre Left, Right e Inner Join

Left Join Na primeira situao temos o Left Join, a seta est apontando para a tabela FUNCIONARIOS simbolizando que a precedncia da tabela da Esquerda, ento podemos dizer que no select abaixo, sero listados todos os Funcionrios, mesmo aqueles que no tem Filial cadastrada. S E L E C TA . F U N _ N O M E ,B . F I L _ N O M EF R O MF U N C I O N A R I O SA L E F TJ O I NF I L I A LBO NA . F I L _ C O D I G O=B . F I L _ C O D I G O -R E S U L T A D OD AC O N S U L T AF U N _ N O M E F I L _ N O M E J O O M A T R I Z J O A Q U I M J O S M R C I O P E D R O F I L I A L1 F I L I A L1 F I L I A L2 n u l l

Repare que Pedro foi includo no resultado, porm ele no possui uma Filial associada em seu cadastro. Este tipo de Join o mais utilizado quando no se tem certeza que todos os registros possuem ligao entre as tabelas e tambm na maioria das vezes por questes de desempenho. Right Join Na segunda situao foi utilizado o Right Join, tambm conhecido apenas por Join, que aponta para a tabela FILIAL simbolizando a precedncia da tabela da Direita, logo, conclumos que os dados da tabela Filial devem existir para que o registro seja trazido no Select. S E L E C TA . F U N _ N O M E ,B . F I L _ N O M EF R O MF U N C I O N A R I O SA R I G H TJ O I NF I L I A LBO NA . F I L _ C O D I G O=B . F I L _ C O D I G O -A I N D AP O D E M O SU T I L I Z A RS E MAP A L A V R AR I G H T / * S E L E C TA . F U N _ N O M E ,B . F I L _ N O M EF R O MF U N C I O N A R I O SA J O I NF I L I A LBO NA . F I L _ C O D I G O=B . F I L _ C O D I G O * / -R E S U L T A D OD AC O N S U L T AF U N _ N O M E F I L _ N O M E J O O M A T R I Z J O A Q U I M F I L I A L1 J O S M R C I O F I L I A L1 F I L I A L2

Note que o funcionrio Pedro desta vez no foi includo na lista de resultados, isto ocorreu porque esta consulta traz apenas registros onde existe um cadastro de Filial para o Funcionrio. Inner Join Temos ainda a situao 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 includo na lista de resultados, o campo de ligao entre duas tabelas deve satisfazer as condies em ambas. O resultado desta consulta seria algo muito semelhante ao Join.

www.prosige.com.br/portal/index.php?option=com_content&view=article&id=58:diferenca-entre-left-right-e-inner-join&catid=1:bancodedados&Itemid=55

2/3

17/12/13

Diferena entre Left, Right e Inner Join

Concluso Com algum conhecimento bsico para interao entre tabelas, podemos efetuar consultas complexas ao banco de dados envolvendo resultados perfeitamente controlados. Isto garante no somente credibilidade em consultas mas tambm desempenho do sistema quando utilizado corretamente. Ainda existem outros tipos de Join, porm seus resultados so 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 contedo sobre PL/SQL).

www.prosige.com.br/portal/index.php?option=com_content&view=article&id=58:diferenca-entre-left-right-e-inner-join&catid=1:bancodedados&Itemid=55

3/3

Você também pode gostar