Duvida: Qual melhor maneira de consulta?

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
anderson
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 06 Jun 2005 1:08 pm
Localização: Toledo - PR
Contato:
Anderson Nuernberg
---

Segue dois exemplos de consulta?

Selecionar tudo

SELECT t1.coluna1, t1.coluna2, t2.coluna1, t2.coluna2
FROM tabela1, tabela2
WHERE t1.chave = t2.chave

SELECT t1.coluna1, t1.coluna2, t2.coluna1, t2.coluna2
FROM tabela1
LEFT JOIN tabela2 ON t1.chave = t2.chave
uma usa comparação direta no where e outra usa left join.
qual das duas é melhor ou mais correta ?
rerodrig
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Qua, 06 Fev 2008 10:33 am
Localização: Americana - SP
Renato Rodrigues

Esses dois selects não fazem a mesma coisa, no primeiro vai retornar os registros que tiverem informações nas duas tabelas, e no segundo select, vai retornar os registros que tem na primeira tabela, e não necessariamente na segunda (precisaria usar o inner join para retornar a mesma coisa que o primeiro).

O join é do padrão sql ansi (não é específico para um banco apenas, funciona em outros bancos também), já o modo feito no primeiro select é do Oracle.

Acho que é isso, qualquer coisa posta aí. Falow!
targinosilveira
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Ter, 16 Set 2008 5:56 pm
Localização: Fortaleza - CE

Boa cara eu sempre uso o primeiro e não tenho tido problemas não!

Abraços!!!
Avatar do usuário
anderson
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 06 Jun 2005 1:08 pm
Localização: Toledo - PR
Contato:
Anderson Nuernberg
---

a questão é que sempre usei o primeiro exemplo, e a poucos dias comecei a trabalhar em outra empresa, e o povo de lá só usa o segundo exemplo, por isso surgiu minha dúvida.
Gibson
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Ter, 11 Nov 2008 6:44 pm
Localização: São Paulo

Cuidado aí, velho... As duas consultas podem não retornar o mesmo resultado.

O select com o LEFT JOIN é o mesmo que:

Selecionar tudo

SELECT t1.coluna1, t1.coluna2, t2.coluna1, t2.coluna2
FROM tabela1, tabela2
WHERE t1.chave = t2.chave (+)

Assim como você tb pode usar RIGHT JOIN e FULL JOIN!!!

Abs!!
Avatar do usuário
anderson
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 06 Jun 2005 1:08 pm
Localização: Toledo - PR
Contato:
Anderson Nuernberg
---

Ok, até aqui beleza, tudo entendido, mas agora em questão de performace do banco, em que alguma consulta gigante ou complexa utilizando left ou right join, qual das duas maneira é melhor para o banco??

usando:

Selecionar tudo

SELECT t1.coluna1, t1.coluna2, t2.coluna1, t2.coluna2
FROM tabela1
LEFT JOIN tabela2 ON t1.chave = t2.chave 
ou

Selecionar tudo

SELECT t1.coluna1, t1.coluna2, t2.coluna1, t2.coluna2
FROM tabela1, tabela2
WHERE t1.chave = t2.chave (+)
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Anderson, acho que você ainda não entedeu o conceito de LEFT e RIGHT JOIN.

Quanto á performance, tudo depende dos dados que você quer trazer.

Se você usar o LEFT JOIN, ele vai trazer todos os registros da tabela á esquerda e seus registros relacionados na tabela á direita, se existirem.

Selecionar tudo

SELECT t1.coluna1, t1.coluna2, t2.coluna1, t2.coluna2
FROM tabela1, tabela2
WHERE t1.chave (+) = t2.chave 
Aqui tem um exemplo do resultado de um LEFT JOIN:

Imagem

Fonte: http://www.luis.blog.br/left-join-e-inn ... s-sql.aspx

No Right Join, ele traz dados da tabela á direita, e os registros relacionados na tabela á esquerda, se existirem.

Então o lance de desempenho tem mais a ver com o que você quer trazer.

Tendeu?
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Ou a sua dúvida é em relação á performance no uso da sintaxe?

Ou usa assim:

Selecionar tudo

... 
 left outer join  departments d
 on  e.department_id = d.department_id; 

...
Ou usa assim:

Selecionar tudo

... 
where   e.department_id = d.department_id(+);

...
É isso?

Eu particularmente uso o (+) por simplicidade ao escrever o código. Mas não sei te dizer se uma sintaxe tem performance melhor que a outra.

Mais sobre Joins http://www.psoug.org/reference/joins.html[/b][/code]
Avatar do usuário
anderson
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 06 Jun 2005 1:08 pm
Localização: Toledo - PR
Contato:
Anderson Nuernberg
---

Valeu Matheus, o conceito eu sei legal, a dúvida maior era a respeiro da performance no uso da sintaxe.
Mas estou fazendo testes pra descobrir algo a respeito.

Valor pela força até aqui.

[]´s
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 21 visitantes