Login:

iMasters | Por uma internet mais criativa e dinâmica

Feeds

Banco de Dados

Feed da seção Banco de Dados

Newsletter de Banco de Dados


Segunda-feira, 16/07/2007 - 10:00 - Por Thiago Caserta
Seções relacionadas:

Consultas com JOINS

Quando comecei na área de TI, sempre me deparava com situações no SQL em que precisava pegar campos de outras tabelas não vinculadas diretamente com a que estamos manipulando, e sentia certa dificuldade em amarrar as tabelas pelas suas respectivas chaves, fossem elas código, id, usuário, etc.

Bem, algo que é de extrema ajuda nesses casos são os nossos amigos JOINs (LEFT JOIN, RIGHT JOIN, INNER JOIN e FULL JOIN).

Hoje percebo que muitos daqueles que estão começando na área de TI sentem o mesmo.

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. Então: Let s JOIN!

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.

Espero que esta matéria tenha sido de grande ajuda para àqueles que estão começando ou sentem dificuldades nesse assunto.

Até a próxima!

Todos os artigos de Thiago Caserta

10 comentários publicados

  • 1. Muito bom!

    Terça-feira, 17/07/2007, por André Ravache

    Muito boa a matéria, estou começando a programar e uso o Firebird, e este tipo de consulta amarrando as tabelas é uma mão na roda. Valeu!

    Responder comentário
  • 2. Query

    Segunda-feira, 23/07/2007, por Felipe N. de Moura

    Bom, primeiramente, parabénz pela matéria, é bom ver que ha gente apoiando o uso destas ferramentas. Muitos, sequer conhecem isto, ou usam geradores de codigos, que chamam 2 ou 3 querys para fazer algo que, uma unica query bem pensada poderia. Achei a matéria bem explicativa, continue com este bom trabalho. Mas conforme o que tenho usado e acompanhado, percebi que pequenas querys, como algumas dos primeiros exemplos, nao resultam tão mais rapido que utilizando a clausula where, e tambem percebi que, utilizar nomeDaTabela.nomeDoCampo retorna mais rapido que t.nomeDoCampo, gostaria de saber de algumas tecnicas para deixar ainda mais ágeis as querys.

    Att.

    Responder comentário
  • 3. Link quebrado

    Segunda-feira, 23/07/2007, por Charles Schaefer

    Olá Thiago. Gostei da matéria. Mas o link que você forneceu está quebrado.

    Responder comentário
  • 4. Resposta: Query

    Segunda-feira, 23/07/2007, por Thiago Caserta

    Felipe, fico grato pelo seu comentário.
    Com respeito à otimização de cláusulas no SQL,
    fico feliz pela sua colocação pois hoje realmente é algo de extrema importância nos preocuparmos com o tempo de execução de nossas consultas.
    Como havia mencionado na matéria, o fato de usarmos nossas amarrações
    pelo FROM (LEFT JOIN, RIGHT JOIN, INNER JOIN, etc), além de otimizar o tempo de execução nos dão uma maior organização dos códigos se tornando assim mais fácil para manutenção das consultas caso necessário.
    Isso que você mencionou também é verdade, a consulta se torna mais rápida se ao invés de usarmos "Alias" para as tabelas, usarmos
    os nomes completos na utilização das Colunas,
    Exemplo: "SELECT Produtos.Codigo, Produtos.Descricao FROM Produtos WHERE Produtos.Codigo = '123'", apenas gostaria de salientar que se você não faz consultas que retornam muitos registros essa diferença de tempo é mínima.
    Outro ponto onde também podemos melhorar o tempo de execução de nossas consultas é na conexão com os bancos que estamos utilizando,
    ao invés de usarmos os nomes dos bancos durante a consulta (Dados..Produtos) usarmos algum arquivo de configuração definindo um "Alias" para cada Base.
    Erros de "Time-Out" são coisa bem desagradáveis em cláusulas criadas por nós por isso é muito bom nos preocuparmos com essa otimização,
    muito em breve estarei escrevendo um artigo sobre otimização de cláusulas SQL dando assim mais dicas sobre como utilizar melhor nossas consultas. Obrigado,
    Att.

    Responder comentário
  • 5. Reposta: Link quebrado

    Segunda-feira, 23/07/2007, por Thiago Caserta

    Obrigado pela notificação Charles.
    Enviei o erro reportado aos responsáveis pela colocação da Matéria.
    Caso queira o exemplo, antes mesmo do pessoal da redação corrigir, me envie um e-mail que terei o prazer de enviá-lo.
    Atenciosamente.

    Responder comentário
  • 6. otima matéria

    Quarta-feira, 25/07/2007, por Paulo Fernandes

    matéria muito bom, eu sempre usava o inner join talvez seja hora de rever os códigos e arruma-los

    PS: link quebrado

    Responder comentário
  • 7. OLAP no MySQL 4

    Sexta-feira, 24/08/2007, por Antonio Miguel Zarth

    Pra quem gosta de SQL avançado, pode dar uma olhada em um trabalho de faculdade que fiz sobre OLAP em MySQL 4 comparando com DB2.
    http://www.webnaveia.com.br/index.php?option=com_content&task=view&id=22&Itemid=1

    Responder comentário
  • 8. Link Quebrado

    Segunda-feira, 15/10/2007, por Thiago Ferreira

    O link ainda não foi corrigido.

    Responder comentário
  • 9. Bem explanado

    Segunda-feira, 12/11/2007, por Bruno Henrique Araújo Montanher

    Gostei da forma que voce trouxe as definições e os exemplos.Gostaria de saber se tem conceitos e exemplos nesse formato sobre Having, Subseleção (Subselect), case, or,and. Obrigado

    Responder comentário
  • 10. Consultas no BD

    Segunda-feira, 12/11/2007, por Bruno Henrique Araújo Montanher

    Hoje trabalho no suporte técnico de uma empresa de Software de Gestão, e uso os comandos sql para montar relatórios de configuração rápida e consultas no banco de dados Firebird e Interbase.Gostaria de saber se tem exemplos de comandos com definições com exemplos. Grato
    Bruno Henrique de A. Montanher.

    Responder comentário

Poste um comentário


Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.

Sobre o autor

Thiago Caserta é Graduando em Análise de Sistemas pela Metrocamp em Campinas/SP, formado em Sistemas de Informação pelo Politécnico Bento Quirino, possui certificações de empresas renomeadas na área de TI. Trabalha atualmente como DBA SQL Server na IBM Brazil. É grande contribuinte da comunidade Microsoft com foco em banco de dados - SQL Server."


Indique para um amigo

captcha

TI SHOP Produtos iMasters

  • Lançamento: CD-ROM Treinamento Aplicado de SQL - Lançamento! Treinamento Aplicado de SQL - Aprenda a trabalhar com SQL com bancos de dados Oracle e SQL Server. São mais de 100 tópicos explicados por Mauro Pichilliani, um articulistas mais lidos do iMasters. Aproveite! Apenas R$ 69,90 no TI SHOP.
  • Lançamento: Livro iMasters "O Encontro de 2 Mundos"- Este livro conta com 56 crônicas de profissionais mais admirados e influentes do mercado brasileiro de Internet. Aproveite o preço especial para leitores do iMasters. Apenas R$ 40,00 e envio imediato!
  • DVD Curso Completo de Photoshop - Do conceito à finalização Lançamento! Curso Completo de Photoshop, em DVD, com mais de 230 aulas dividas em 4 módulos: conceito, básico, avançado e finalização. Apenas R$ 69,50 no TI SHOP - Frete com 50% de desconto
  • DVD Javascript Starter - Curso Completo Com mais de 9 horas de vídeo-aulas, é um curso completo sobre Javascript. Ideal para quem deseja aprender a linguagem. Apenas R$ 64,90 no TI SHOP - Frete com 50% de desconto!

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.