Consultas com JOINS

Informática

31/03/2008

Junções, tradução de JOINs, são utilizadas em duas cláusulas específicas: FROM e WHERE, eu particularmente prefiro usar na cláusula FROM, por questões de desempenho e organização.
 
Neste artigo vamos analisar algumas consultas possíveis com essas poderosas cláusulas. 
 
A princípio vamos entender o primeiro JOIN mencionado, o LEFT JOIN.
 
Como podemos observar, e a própria sintaxe indica, essa cláusula trabalha com os dados da tabela "Esqueda" como sendo os dados principais, ou seja, de acordo com o exemplo abaixo, o LEFT JOIN mostrará o que esta na Tabela1 (esquerda), podendo trabalhar também com qualquer outro dado da Tabela2 com a mesma chave encontrada na Tabela1.
 
Os dados principais que estaremos trabalhando serão os da Tabela1, já que esta, como já mencionado, é a nossa tabela “Esquerda”.
 
SELECT Tab1.* FROM Tabela1 Tab1
LEFT JOIN Tabela2 Tab2 ON Tab1.Cod = Tab2.Cod
<> 
Podemos fazer a mesma amarração junto à cláusula WHERE assim como no exemplo abaixo onde estamos pegando os mesmos valores do exemplo acima.
 
SELECT Tab1.* FROM Tabela1 Tab1, Tabela2 Tab2
WHERE Tab1.Cod *= Tab2.Cod
<>
Nesse exemplo os sinais " *= " indicam a condição LEFT JOIN.
 
Partiremos agora para o irmão mais próximo do LEFT JOIN, o RIGHT JOIN.
 
O RIGHT JOIN retorna o que estiver na Tabela1 e Tabela2 com a mesma chave, e sendo o inverso do LEFT JOIN a tabela principal se torna a tabela da "Direita", ou seja, a Tabela2.
 
SELECT Tab2.* FROM @Tabela1 Tab1
RIGHT JOIN @Tabela2 T2 ON Tab1.Cod = Tab2.Cod
 
Do mesmo modo que podemos utilizar o LEFT JOIN na cláusula WHERE podemos fazer assim também com o RIGHT JOIN.
<>
SELECT Tab2.* FROM @Tabela1 Tab1, @Tabela2 Tab2
WHERE T1.Cod =* T2.Cod
<>
Observe que o sinal no RIGHT JOIN é diferente do LEFT JOIN, de "Asterisco ="mudamos para"= asterísco ".
 
Alteramos o asterisco da esquerda para a direita, o que se torna uma ajuda para não confundirmos as cláusulas. 
LEFT JOIN - Asterisco à esquerda;
RIGHT JOIN - Asterisco à direita.
<>
Desse ponto partiremos para os dois últimos JOINS, o INNER JOIN e o FULL JOIN.
 
O INNER JOIN nos retorna apenas o que esta na Tabela1 e Tabela2 com a mesma chave.
Exemplo:
 
SELECT * FROM @Tabela1 T1
INNER JOIN @Tabela2 T2 ON T1.Cod = T2.Cod
<>
Assim como o LEFT JOIN e o RIGHT JOIN, podemos da mesma forma fazer essa amarração junto à cláusula WHERE, como segue o exemplo:
 
SELECT * from @Tabela T1, @Tabela2 T2
WHERE T1.Cod = T2.Cod
<>
Nesse exemplo o sinal " = " indica a função INNER JOIN.
 
Já O FULL JOIN retorna o que estiver na Tabela1 e Tabela2 levando em conta o seu significado FULL, ou seja, completo. Portanto o FULL JOIN retorna tudo o que há nas Tabelas selecionadas
 
SELECT * FROM @Tabela1 T1
FULL JOIN @Tabela2 T2 ON T1.Cod = T2.Cod
<>
Bem, essas são as 4 cláusulas mais utilizadas para fazermos amarrações entre tabelas ou pegarmos valores relacionados. Com certeza é de grande ajuda para todos os que fazem uso de banco de dados independentemente de qual seja.
 
Em anexo está um exemplo de todas as cláusulas tratadas aqui, porém com banco e tabelas reais.
 
Este exemplo foi baseado no Microsoft SQL Server. As sintaxes das consultas não irão mudar, porém para àqueles que forem executar os exemplos em outros bancos terão de modificar os scripts de criação das tabelas.
<>
Fonte: Thiago Caserta (iMasters)

Esta apresentação reflete a opinião pessoal do autor sobre o tema, podendo não refletir a posição oficial do Portal Educação.


Colunista Portal - Educação

por Colunista Portal - Educação

O Portal Educação possui uma equipe focada no trabalho de curadoria de conteúdo. Artigos em diversas áreas do conhecimento são produzidos e disponibilizados para profissionais, acadêmicos e interessados em adquirir conhecimento qualificado. O departamento de Conteúdo e Comunicação leva ao leitor informações de alto nível, recebidas e publicadas de colunistas externos e internos.

Portal Educação

UOL CURSOS TECNOLOGIA EDUCACIONAL LTDA, com sede na cidade de São Paulo, SP, na Alameda Barão de Limeira, 425, 7º andar - Santa Cecília CEP 01202-001 CNPJ: 17.543.049/0001-93