SQL - INNER JOIN VS WHERE IN
Boa tarde!
Eu tenho uma tabela (tbl_pessoas1) com 600.000 registros e uma tabela (tbl_pessoas2) com 7000 registros.
Gostaria de retornar apenas o que há em comum com entre elas. Fiz duas consultas:
Obs: os codigos, nomes e idades se repetem em ambas as tabelas
--- consulta 1:
SELECT codigo,nome,idade FROM tbl_pessoas1
INNER JOIN tbl_pessoas2
ON tbl_pessoas1.codigo = tbl_pessoas2.codigo
AND tbl_pessoas1.nome = tbl_pessoas2.nome
AND tbl_pessoas1.idade = tbl_pessoas2.idade
--- consulta 2:
SELECT codigo,nome,idade FROM tbl_pessoas1
WHERE codigo IN ( SELECT codigo FROM tbl_pessoas2)
AND nome IN (SELECT nome FROM tbl_pessoas2)
AND idade IN (SELECT idade FROM tbl_pessoas2)
A consulta 1, acho que é a correta. Pois retorna o que há em comum com entre a tbl_pessoas1 e tbl_pessoas2
A consulta 2 retorna os códigos, nomes e idades que existirem na tbl_pessoas2, mesmo que não sejam equivalentes à tbl_pessoas1.
Ex: Se a busca for: 874,fulano,22 na tbl_pessoas1
e na tbl_pessoas2 existirem:
874,zeca,25
415,fulano,33
633,juca,22
874,fulano,22
Aà essa consulta2 irá retornar 4 registros, sendo que deveria retornar somente o último.
é isso mesmo?
Abs.
Eu tenho uma tabela (tbl_pessoas1) com 600.000 registros e uma tabela (tbl_pessoas2) com 7000 registros.
Gostaria de retornar apenas o que há em comum com entre elas. Fiz duas consultas:
Obs: os codigos, nomes e idades se repetem em ambas as tabelas
--- consulta 1:
SELECT codigo,nome,idade FROM tbl_pessoas1
INNER JOIN tbl_pessoas2
ON tbl_pessoas1.codigo = tbl_pessoas2.codigo
AND tbl_pessoas1.nome = tbl_pessoas2.nome
AND tbl_pessoas1.idade = tbl_pessoas2.idade
--- consulta 2:
SELECT codigo,nome,idade FROM tbl_pessoas1
WHERE codigo IN ( SELECT codigo FROM tbl_pessoas2)
AND nome IN (SELECT nome FROM tbl_pessoas2)
AND idade IN (SELECT idade FROM tbl_pessoas2)
A consulta 1, acho que é a correta. Pois retorna o que há em comum com entre a tbl_pessoas1 e tbl_pessoas2
A consulta 2 retorna os códigos, nomes e idades que existirem na tbl_pessoas2, mesmo que não sejam equivalentes à tbl_pessoas1.
Ex: Se a busca for: 874,fulano,22 na tbl_pessoas1
e na tbl_pessoas2 existirem:
874,zeca,25
415,fulano,33
633,juca,22
874,fulano,22
Aà essa consulta2 irá retornar 4 registros, sendo que deveria retornar somente o último.
é isso mesmo?
Abs.
COM WHERE:
SELECT codigo,nome,idade FROM tbl_pessoas1, tbl_pessoas2
WHERE tbl_pessoas1.codigo = tbl_pessoas2.codigo
AND tbl_pessoas1.nome = tbl_pessoas2.nome
AND tbl_pessoas1.idade = tbl_pessoas2.idade
Entendi. Obrigado pela SQL.
Mas também gostaria de saber se essa consulta 2 iria retornar mesmo o que citei abaixo dela.
Abs.
Mas também gostaria de saber se essa consulta 2 iria retornar mesmo o que citei abaixo dela.
Abs.
Você quer saber se essas duas consultas produzem o mesmo resultado, é isso?
Se for, acho que não produzem. E mesmo que produzissem, creio que seria muito mais lenta do que a primeira.
Se for, acho que não produzem. E mesmo que produzissem, creio que seria muito mais lenta do que a primeira.
Usava-se muito where no lugar de join numa epoca em que o join ou não era tão conhecido ou nem existia ainda
em uma época muito remota diga-se de passagem rs
o join facilita muito a vida, porém deve-se ser sempre usado com cautela, pois, ou ele dará lentidão ao seu banco se mal construido ou vc se perderá na sua query ( quando ela é gigantesca )
dai pessoas acabam usando views ( particularmente não gosto ) mas não é ruim também.
Não use o where como o join, além de ser péssimo em performance em comparação um a outro, estéticamente também fica horrivel hauahauhauha
em uma época muito remota diga-se de passagem rs
o join facilita muito a vida, porém deve-se ser sempre usado com cautela, pois, ou ele dará lentidão ao seu banco se mal construido ou vc se perderá na sua query ( quando ela é gigantesca )
dai pessoas acabam usando views ( particularmente não gosto ) mas não é ruim também.
Não use o where como o join, além de ser péssimo em performance em comparação um a outro, estéticamente também fica horrivel hauahauhauha
Só por curiosidade, por que ter no mesmo banco duas entidades com os mesmos atributos?
é apenas um exemplo, o caso real é muito mais complexo. São informações repetidas de dados fiscais. Na tabela1 tem 600.000 registros e tabela2 tem 7000. O objetivo é identificar quais os registros que existem na tabela2 que também existem na tabela1.
A dúvida era se a SQL com WHERE produziria o mesmo efeito da INNJER JOIN. Mas não produz, visto que ela retorna linhas que possuam qualquer uma das condições, mesmo se não possuir as três condições, o que não é o que desejo. Ao passo que com INNER JOIN, retorna as linhas que tiverem as condições informadas.
Abs.
A dúvida era se a SQL com WHERE produziria o mesmo efeito da INNJER JOIN. Mas não produz, visto que ela retorna linhas que possuam qualquer uma das condições, mesmo se não possuir as três condições, o que não é o que desejo. Ao passo que com INNER JOIN, retorna as linhas que tiverem as condições informadas.
Abs.
Tópico encerrado , respostas não são mais permitidas