Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida com sql, uso de on e where


deathcon4

Pergunta

Estou com dúvidas no uso das clausulas on e where no inner join. As vezes aparece somente on e as vezes somente o where.para fazer a comparação entre as tabelas do banco, isso está deixando-me confuso. Quando usar o on e quando usar o where. Também vi que dá para usar os dois juntos. Em inner join eu vi on sem where, com right join e left join com os dois. Posso usar select tabela.campo from tabela inner join where tabelaA.campo = tabelaB.campo where condição. Condição, por exemplo, cidade que seja Rio de Janeiro. em vez de select tabela.campo from tabela inner join on tabelaA.campo = tabelaB.campo where condição.

Obrigado.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

simples. Veja esta consuta:

select
a.id,
a.colunaB,
b.tabelaA_id,
b.colunaD
from
tabelaA a
left join tabelaB b on (a.id=b.tabelaA_id)
where
a.ano = 2014
and
b.data between '2014-01-01' and '2014-01-31'

Veja que o ON foi utilizado para estabelecer a ligacao entre a tabelaA e a tabelaB.

A clausula where foi utilizada para estabelecer as condiçoes da consulta.

Ela so traz informacoes no ano 2014 da tabela tabelaA e a data esteja entre 1 e 31 de janeiro na tabela tabelaB.

ON sempre utilizado para fazer as ligacoes. WHERE sempre utilizado para estabelecer as condicoes da consulta a ser executada.

Espero que tenha ajudado.

Link para o comentário
Compartilhar em outros sites

  • 0

Dr. House,

Ao colocar o filtro "b.data between '2014-01-01' and '2014-01-31'" na cláusula where você transformou o left join em um inner join pois o teste dos valores nulos na coluna b.data vai retornar falso.

deathcon4,

Os filtros podem ser usados tanto no where quanto no on embora seja mais legível fazer como explicado pelo Dr. House.

As condições usadas no on serão aplicadas antes da junção e as condições usadas no where serão aplicadas depois.

No caso do inner join não há diferença semântica. Mas no outer join é preciso tomar cuidado com a cláusura where. Na consulta exemplo, para preservar o left join, dever ser assim

from
    tabelaA a
    left join 
    tabelaB b on a.id = b.tabelaA_id and b.data between '2014-01-01' and '2014-01-31'
where a.ano = 2014
Editado por Kakao
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...