Buscar

prova2-2004-1

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 5 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

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

Fundamentos de Bancos de Dados – Prova 2
Prof. Carlos A. Heuser
Junho de 2004
Duração: 2 horas – Prova com consulta
Para as consultas de SQL, considere o seguinte esquema de um banco de dados
de estradas (mesmo esquema da primeira prova):
Modelo(CodModelo,NomeModelo,CodCPU)
CodCPU referencia CPU
/* Tabela com os modelos de computadores que são
fabricadas */
CPU(CodCPU,NomeCPU,CodFabricante)
CodFabricante referencia Fabricante
/* Tabela com os modelos de CPUs que são usadas */
FabricanteCPU(CodFabricante,NomeFabricante)
/* Tabela com os fabricantes de CPUs */
Configuracao(CodModelo,NoConfig,NomeConfig)
CodModelo referencia Modelo
/* Tabela com as várias configurações nas quais um
modelo pode ser fabricado. Cada configuração tem
um nome */
PerifComp(CodPerifComp,NomePerifComp)
/* Tabela com os periféricos e componentes usados
na fabricação de computadores */
PerifCompConfig(CodPerifComp,CodModelo,NoConfig,Quantidade)
CodPerifComp referencia PerifComp
(CodModelo,NoConfig) referencia Configuração
/* Tabela informando que componentes e em que
quantidade são usados dentro de cada configuração*/
1
Expresse as seguintes consultas em SQL:
1. Obter os nomes dos modelos que obedecem a ambos os requisitos abaixo:
• o modelo utiliza uma CPU de um fabricante denominado ’Intel’;
• o modelo tem pelo menos uma configuração chamada ’Estação de tra-
balho gráfica’.
A consulta deve ser resolvida de duas formas:
a) no estilo álgebra relacional, isto é, sem uso de consultas aninhadas
com IN ou EXISTS, e
select NomeModelo
from Modelo M,
CPU,
FabricanteCPU F,
Configuracao Cf
where M.CodCPU=CPU.CodCPU and
CPU.CodFabricante=F.CodCPU and
M.CodModelo=Cf.CodModelo and
NomeFabricante=’Intel’ and
NomeConfig=’Estação de trabalho gráfica’
b) no estilo cálculo relacional, isto é, com uso de consultas aninhadas
com IN ou EXISTS.
select NomeModelo
from Modelo
where CodCPU in
(select CodCPU
from CPU
where CodFabricante in
(select CodFabricante
from FabricanteCPU
where NomeFabricante=’Intel’))
and
CodModelo in
(select CodModelo
from Configuracao
where NomeConfig=’Estação de trabalho gráfica’)
2. Obter uma tabela com três colunas: nome do modelo, nome da configuração
e nome do periférico/componente. A tabela deve conter uma linha para cada
2
periférico/componente que é usado em uma configuração do modelo em
questão. Somente deve ser exibida uma linha, quando mais que 10 unidades
do periférico/componente em questão são usadas na configuração.
Caso um modelo não tenha configurações, as colunas referentes ao nome da
configuração e ao nome do periférico/componente devem aparecer vazias
(valor NULL).
Já uma configuração sem periféricos/componentes, ou na qual não exista
nenhum periférico/componente com mais que 10 unidades, deve aparecer
com o nome do periférico/componente vazio.
select NomeModelo,NomeConfig,NomePerifComp
from
(( Modelo
left outer join
Configuracao
on Modelo.CodModelo=Configuracao.CodModelo
)
left outer join
PerifCompConfig
on Configuracao.CodModelo=PerifCompConfig.CodModelo AND
Configuracao.NoConfig=PerifCompConfig.NoConfig and
Quantidade>10)
left outer join
PerifComp
on PerifComp.CodPerifComp=PerifCompConfig.CodPerifComp
3. Obter uma tabela com duas colunas, a primeira com um nome de modelo e
a segunda com um nome de um outro modelo. O segundo modelo deve usar
pelo menos um periférico/componente que também é usado pelo primeiro
modelo. Modelos que não tem periféricos/componentes em comum não
aparecem na tabela. A tabela deve estar ordenada pela primeira coluna.
select M1.NomeModelo, M2.NomeModelo
from Modelo M1,
Modelo M2,
PerifCompConfig P1,
PerifCompConfig P2
where P1.CodPerifCompConfig=P2.CodPerifCompConfig and
P1.CodModelo=M1.CodModelo and
3
P2.CodModelo=M2.CodModelo and
M1.CodModelo<>M2.CodModelo
order by M1.NomeModelo
4. Obter os nomes dos periféricos/componentes que são utilizados em todos
modelos. (é o mesmo que: obter os nomes dos periféricos/componentes, tal
que não existe nenhum modelo para o qual eles não aparecem na configura-
ção)
select NomePerifComp
from PerifComp
where not exists
(select * from Modelo
where not exists
(select * from PerifCompConf
where CodModelo=Modelo.CodModelo and
CodPerifComp=PerifComp.CodPerifComp))
5. Para cada configuração que usa mais que três tipos (não unidades) diferentes
de periférico/componente, obter: o nome do modelo, o nome da configura-
ção e a quantidade média de periféricos/componentes usada no modelo.
select ModeloComMedia.NomeModelo,
NomeConfig,
ModeloComMedia.QuantMedModelo
from
(select M.CodModelo,
NomeModelo,
AVG(Quantidade) as QuantMedModelo
from Modelo M,
PerifCompConfig PCC
where M.CodModelo=PCC.CodModelo
group by M.CodModelo,NomeModelo) as ModeloComMedia
Configuracao C,
PerifCompConfig PCC
where ModeloComMedia.CodModelo=C.CodModelo and
C.CodModelo=PCC.CodModelo and
C.NoConfig=PCC.NoConfig
group by ModeloComMedia.NomeModelo,
NomeConfig,
ModeloComMedia.QuantMedModelo
having count(*)>3
4
aceitei também a solução abaixo (quantidade média por configuração apesar
de ela não corresponder exatamente ao enunciado (quantidade média por
modelo)
select NomeModelo,
NomeConfig,
AVG(Quantidade)
from
Modelo as M
Configuracao C,
PerifCompConfig PCC
where M.CodModelo=C.CodModelo and
C.CodModelo=PCC.CodModelo and
C.NoConfig=PCC.NoConfig
group by NomeModelo,
NomeConfig,
having count(*)>3
6. Obter os nomes do periféricos/componentes que são usados em maior quan-
tidade (maior valor de PerifCompConfig.Quantidade).
SELECT NomePerifComp
FROM PerifCompConfig PCC,
PerifComp PC
WHERE PC.CodPerifComp=PCC.CodPerifComp AND
Quantidade =
(SELECT MAX(Quantidade)
FROM PerifCompConfig)
5

Continue navegando