resolucao exercicio algebra sql1
DESCRIPTION
Algebra RelacionalTRANSCRIPT
Bacharelado em Ciência da Computação
FCT/Unesp
Banco de Dados
Exercício 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) Prédio(CodPred,NomePred) Sala(CodPred,NumSala,CapacSala) Professor(CodProf,NomeProf,CodTit,CodDepto) ProfOferta(AnoSem,CodDepto,NumDisc,SiglaOfer,CodProf) Titulação(CodTit,NomeTit) Observações:
As Chaves Primárias estão sublinhadas.
O Código de uma disciplina (matéria) é composto pelo código do departamento que a ministra e pelo número da disciplina dentro do departamento.
Uma oferta é um horário em que uma disciplina é oferecida.
Um pré-requisito é uma disciplina que um aluno deve ter cursado com aprovação para poder cursar a disciplina em questão.
Consultas (Álgebra Relacional e SQL):
a) Obter os nomes de todas as disciplinas com mais de cinco créditos; b) Obter os nomes de todas as disciplinas do departamento “Informática”; c) Obter os nomes de todas as disciplinas ministradas no ano/semestre 2000/1 por professores
vinculados ao departamento denominado “Informática”; 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 código “INF” foram
oferecidas; f) Obter o número de salas do prédio de código “43421”; g) Para cada prédio que possui mais que 5 salas, obter o código do prédio, seu nome e sua
capacidade total; h) Obter os nomes dos professores que possuem título denominado “DOUTOR” e que
ministram, 2000/1, mais que três ofertas.
Bacharelado em Ciência da Computação
FCT/Unesp
a) Obter os nomes de todas as disciplinas com mais de cinco créditos. select nome_disc from disciplina where créditos_disc > 5
nome_disc ( créditos_disc > 5 (disciplina))
b) Obter os nomes de todas as disciplinas do departamento “Informática”. select nome_disc from depto d, disciplina dis where d.cód_depto = dis.cód_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 “Informática”. select nome_disc from disciplina d, profOferta pó, professor p, depto de where de.cód_depto = d.cód_depto and d.nome_depto = „Informatica‟ and pó.anosem_oferta = 2000/1 and pó.cód_prof = p.cód_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 Ciência da Computação
FCT/Unesp
e) Obter o ano/semestre em que todas as disciplinas do departamento de código “INF” foram oferecidas;
select anosem from Oferta, departamento where oferta.cod_depto = departamento.cod_depto and departamento.nome_depto = „Inf‟
anosem ( nome_depto = „Inf‟ (oferta |X| departamento)
f) Obter o número de salas do prédio de código “43421”. select count(*) from sala where cód_pred = 43421 group by cód_pred
G count (*) ( cod_pred = 43421 (sala))
g) Para cada prédio que possui mais de 5 salas, obter o código do prédio, seu nome e sua capacidade total. select p.cod_pred, p.nome_pred, sum (cap_sala) from predio p, sala s where p.cód_pred = s.cod_pred group by p.cód_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 título denominado “Doutor” e que ministram, 2000/1, mais que três ofertas. select nome_prof from professor p, proOferta pó, titulação t where p.cód_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)