Inner join ou subconsulta. Qual usar?
15/06/2009
0
Qual a diferença entre uma subconsulta e um inner join? Por exemplo:
select nome_filme from filme where cod_filme in (select cod_filme from locacao)
ou
select f.nome_filme from filme f, locacao l where f.cod_filme = l.cod_filme
ou
select f.nome_filme from filme f inner join locacao l on f.cod_filme = l.cod_filme
Rsaforuns
Post mais votado
16/06/2009
2º caso, CONSULTA dos registros não relacionados entre as ENTIDADES ´filmes´ e ´locação´ porém deva retornar apenas os registros em que o ´código do filme´ sejam iguais;
3º caso, CONSULTA com relacionamento entre as ENTIDADES ´filme´ e ´locação´ onde os registros da ENTIDADE ´locação´ devem ser iguais ao ATRIBUTO ´código do filme´ na ENTIDADE ´filme´.
Jair Bg
Mais Posts
17/06/2009
Rsaforuns
17/06/2009
Emerson Nascimento
1a. consulta
[i:23e7a82d86]select nome_filme from filme
where cod_filme in (select cod_filme from locacao)[/i:23e7a82d86]
retorna SOMENTE os dados da tabela filme, para os filmes que já foram locados. retorna somente 1 registro por filme.
2a. consulta
[i:23e7a82d86]select f.nome_filme from filme f, locacao l
where f.cod_filme = l.cod_filme[/i:23e7a82d86]
retorna dados da tabela filme e da tabela locacao, para os filmes que já foram locados. o número de registros retornados será igual ao número de locações que o filme sofreu.
3a. consulta
[i:23e7a82d86]select f.nome_filme from filme f
inner join locacao l on f.cod_filme = l.cod_filme[/i:23e7a82d86]
idem à 2a, porém esteticamente melhor (gosto pessoal)
não tem mais correta. depende da sua necessidade.
- se você precisa saber quais filmes já foram locados, use a 1a forma.
- se você quer saber quais filmes já foram locados e as datas, clientes e demais dados de cada locação, use a segunda ou a terceira forma (eu prefiro a terceira)
17/06/2009
Rsaforuns
Eu falei que as 3 consultas retornavam a mesma coisa, pois no meu teste foi o que aconteceu.
Estou usando o sql server 2000
17/06/2009
Emerson Nascimento
select [b:30d713a85b]nome_filme[/b:30d713a85b]
e o
select [b:30d713a85b]f.nome_filme[/b:30d713a85b]
por
select [b:30d713a85b]*[/b:30d713a85b]
e veja o que acontece...
Clique aqui para fazer login e interagir na Comunidade :)