Buscar

resposta filme

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Respostas da Lista de BD I – Exercícios de Revisão! 
 
Há duas formas de se fazer uma junção. Ou se usa o INNER JOIN, ou faz a junção pela 
comparação direta das CHAVES primárias e estrangeiras. 
 
a) Listar o Título e o Ano dos filmes produzidos pela Miramax. 
 
select titulo, ano 
from filme INNER JOIN produtora ON (filme.cprodutora = produtora.codprodutora ) 
where nomeprodutora = 'Miramax'; 
 
ou ... 
 
select titulo, ano 
from filme, produtora 
where filme.cprodutora = produtora.codprodutora 
 and nomeprodutora = 'Miramax'; 
 
OBS: as duas instruções são equivalentes 
 
b) Listar a Produtora e o Estúdio que produziram filmes com menos de uma hora e meia 
de duração. 
 
select nomeprodutora, nomeestudio 
from filme INNER JOIN produtora ON (filme.cprodutora = produtora.codprodutora) 
 INNER JOIN estudio ON (estudio.codestudio = filme.cestudio) 
where filme.duracao < 90; 
 
 
select nomeprodutora, nomeestudio 
from filme, produtora, estudio 
where filme.cprodutora = produtora.codprodutora 
 and estudio.codestudio = filme.cestudio 
 and filme.duracao < 90; 
 
c) Listar os nomes dos atores que atuaram no filme 'Quero ser Grande'. 
 
select nome 
from ator INNER JOIN atuação ON (ator.codator = atuacao.cator) 
 INNER JOIN filme ON (filme.codfilme = atuacao.cfilme) 
where filme.titulo = 'Quero ser Grande'; 
 
select nome 
from ator, atuacao, filme 
where ator.codator = atuacao.cator and filme.codfilme = atuacao.cfilme 
 and filme.titulo = 'Quero ser Grande'; 
d) Listar os títulos dos filmes e o nome das produtoras que os produziram. 
 
select titulo, nomeprodutora 
from filme INNER JOIN produtora ON (filme.cprodutora = produtora.codprodutora) 
 
 
select titulo, nomeprodutora 
from filme, produtora 
where filme.cprodutora = produtora.codprodutora 
 
e) Listar distintamente os endereços das produtoras que produziram filmes com mais de 
uma hora e meia de duração. 
 
select distinct produtora.endereco 
from filme INNER JOIN produtora ON (filme.cprodutora = produtora.codprodutora) 
where filme.duracao > 90 
 
 
select distinct produtora.endereco 
from filme, produtora 
where filme.cprodutora = produtora.codprodutora 
 and filme.duracao > 90 
 
* Listar a quantidade de filmes produzidos por cada Produtora 
 
select NomeProdutora, COUNT(*) 
from Produtora INNER JOIN Filmes ON (produtora.CodProdutora = Filmes.CProdutora) 
group by NomeProdutora; 
 
COUNT(*) – conta quantos registros tem. Neste caso, os registros estão sendo agrupados 
pelo nome da Produtora... ou seja, 
 
NomeProdutora Filme 
Miramax Filme1 
Miramax Filme2 
PlayArt Filme3 
PlayArt Filme4 
PlayArt Filme5 
 
Neste caso ele agrupa pelo Nome da Produtora apenas com o Nome igual e conta quantas 
linhas tem cada subgrupo. 
A resposta será : 
Miramax 2 
PlayArt 3 
 
 
Subgrupo 1 
Subgrupo 2 
Apenas um exemplo de SELECT aninhado 
 
f) Listar os nomes dos filmes em que os atores Tom Hanks e Meg Ryan atuaram juntos. 
 
select titulo 
from filme INNER JOIN atuacao ON (filme.codfilme = atuacao.cfilme) 
 INNER JOIN ator ON (ator.codator = atuacao.cator) 
where ator.nome = 'Tom Hanks' and 
 filme.codfilme in 
 ( select codfilme 
 from filme INNER JOIN atuacao 
 ON (filme.codfilme = atuacao.cfilme) 
 INNER JOIN ator 
 ON (ator.codator = atuacao.cator) 
 where ator.nome = 'Meg Ryan' ) 
 
 
select titulo 
from filme, ator, atuacao 
where filme.codfilme = atuacao.cfilme and ator.codator = atuacao.cator 
 and ator.nome = 'Tom Hanks' and 
 filme.codfilme in 
 ( select codfilme 
 from filme, ator, atuacao 
 where filme.codfilme = atuacao.cfilme and ator.codator = atuacao.cator 
 and ator.nome = 'Meg Ryan' ) 
 
Explicando este último SQL 
 
Esse problema usa um SQL aninhado... Por quê? 
O problema pode ser dividido em dois... Quais os filmes que a Meg Ryan participou? 
E depois, quais os filmes que o Tom Hanks participou? 
 
Se analisarmos, são duas consultas distintas, com isso o Select mais interno faz a consulta 
do código dos filmes que a Meg Ryan participou e o mais externo faz a consulta dos filmes 
que o Tom Hanks participou. 
 
Agora como juntas os dois SQLs (as duas consultas)? 
 
Nós podemos usar o comando IN, pois eu quero apenas os filmes em que os dois 
aparecem!!! 
 
Ele funciona assim: 
atributo IN (10,20,30) 
 
Ou seja, verifica se o atributo é igual a 10 ou a 20 ou a 30. 
 
O SELECT interno retorna o código dos filmes que a Meg Ryan fez, ou seja, algo do tipo 
(01,50,65,157) 
 
Aproveitando essa lista de código de filmes, o SQL para os filmes do Tom Hans é 
complementado com a cláusula: 
 
ator.nome = 'Tom Hanks' and 
 filme.codfilme in 
 ( select codfilme … Esse select aninhado tará a lista de códigos dos filmes que a Meg 
Ryan fez, ou seja, o comando na verdade fica algo desse tipo: 
 
ator.nome = 'Tom Hanks' and 
 filme.codfilme in (01,50,65,157) 
 
Com isso o comando retornará apenas o nome dos filmes que o Tom Hanks fez, mas 
que também tenham sido feitos pela Meg Ryan!!!!

Continue navegando