Você está na página 1de 3

Bacharelado em Cincia da Computao

FCT/Unesp

Banco de Dados

Exerccio 1
Considere as seguintes tabelas de uma base de dados relacional:
Depto(CodDepto, NomeDepto)
Disciplina(CodDepto,NumDisc,NomeDisc,CreditosDisc)
PreReq(CodDepto,NumDisc,DeptoReq,NumDisReq)
Oferta(AnoSem,CodDepto,NumDisc,SiglaOfer,DiaSem,HoraInicio,NumHoras,
CodPred,NumSala)
Prdio(CodPred,NomePred)
Sala(CodPred,NumSala,CapacSala)
Professor(CodProf,NomeProf,CodTit,CodDepto)
ProfOferta(AnoSem,CodDepto,NumDisc,SiglaOfer,CodProf)
Titulao(CodTit,NomeTit)
Observaes:
As Chaves Primrias esto sublinhadas.
O Cdigo de uma disciplina (matria) composto pelo cdigo do departamento que a ministra
e pelo nmero da disciplina dentro do departamento.
Uma oferta um horrio em que uma disciplina oferecida.
Um pr-requisito uma disciplina que um aluno deve ter cursado com aprovao para poder
cursar a disciplina em questo.
Consultas (lgebra Relacional e SQL):
a) Obter os nomes de todas as disciplinas com mais de cinco crditos;
b) Obter os nomes de todas as disciplinas do departamento Informtica;
c) Obter os nomes de todas as disciplinas ministradas no ano/semestre 2000/1 por professores
vinculados ao departamento denominado Informtica;
d) Para cada disciplina que possui pr-requisito, obter o seu nome e o nome de cada um de
seus pr-requisitos;
e) Obter o ano/semestre em que todas as disciplinas do departamento de cdigo INF foram
oferecidas;
f) Obter o nmero de salas do prdio de cdigo 43421;
g) Para cada prdio que possui mais que 5 salas, obter o cdigo do prdio, seu nome e sua
capacidade total;
h) Obter os nomes dos professores que possuem ttulo denominado DOUTOR e que
ministram, 2000/1, mais que trs ofertas.

Bacharelado em Cincia da Computao


FCT/Unesp
a) Obter os nomes de todas as disciplinas com mais de cinco crditos.
select nome_disc
from disciplina
where crditos_disc > 5

nome_disc ( crditos_disc > 5 (disciplina))


b) Obter os nomes de todas as disciplinas do departamento Informtica.
select nome_disc
from depto d, disciplina dis
where d.cd_depto = dis.cd_depto and
d.nome_depto = Informatica

nome_disc ( nome_depto = Informatica (disciplina |X| depto))


c) Obter os nomes de todas disciplinas ministradas no ano/semestre 2000/1 por professores
vinculados ao departamento denominado Informtica.
select nome_disc
from disciplina d, profOferta p, professor p, depto de
where de.cd_depto = d.cd_depto and
d.nome_depto = Informatica and
p.anosem_oferta = 2000/1 and
p.cd_prof = p.cd_prof and
po.num_disc = d.num_disc

nome_disc ( nome_depto = Informatica and anosem_oferta = 2000/1


(disciplina |X| profOferta |X| professor |X| depto))
d) Para cada disciplina que possui pr_requisito, obter o seu nome e o nome de cada um de seus
pr_requisitos.
select d1.nome_disc, d2.nome_disc
from disciplina d1, disciplina d2, preReq p
where p.num_disc = d1.num_disc and
p.numdis_req = d2.num_disc

disciplina.nome_disc, d2.nome_disc (disciplina |X| preReq |X| d1(disciplina))

Bacharelado em Cincia da Computao


FCT/Unesp
e) Obter o ano/semestre em que todas as disciplinas do departamento de cdigo INF foram
oferecidas;
select anosem
from Oferta, departamento
where oferta.cod_depto = departamento.cod_depto
departamento.nome_depto = Inf

and

anosem ( nome_depto = Inf (oferta |X| departamento)


f) Obter o nmero de salas do prdio de cdigo 43421.
select count(*)
from sala
where cd_pred = 43421
group by cd_pred

G count (*) ( cod_pred = 43421 (sala))


g) Para cada prdio que possui mais de 5 salas, obter o cdigo do prdio, seu nome e sua
capacidade total.
select p.cod_pred, p.nome_pred, sum (cap_sala)
from predio p, sala s
where p.cd_pred = s.cod_pred
group by p.cd_pred, p.nome_pred
having count (*) >= 5
temp1

p.cod_pred, p.nome_pred, G sum(cap_sala) (predio |X| sala)


p.cod_pred, p.nome_pred, G count(*) >=5

h) Obter os nomes dos professors que possuem ttulo denominado Doutor e que ministram, 2000/1,
mais que trs ofertas.
select nome_prof
from professor p, proOferta p, titulao t
where p.cd_prof = po.cod_prof and
po.cod_tit = t.cod_tit and
t.nome_tit = Doutor and
ano_sem = 2000/1
group by nome_prof
having count (*) > 3
temp1

nome_prof, G count(*) ( t.nome_tit = Doutor and


ano_sem = 2000/1) (professor |X| profOferta |X| titulacao)

nome_prof, G count(*) >3 (temp1)