resolucao exercicio algebra sql1

3
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.

Upload: fertzao

Post on 12-Jan-2016

53 views

Category:

Documents


3 download

DESCRIPTION

Algebra Relacional

TRANSCRIPT

Page 1: Resolucao Exercicio Algebra Sql1

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.

Page 2: Resolucao Exercicio Algebra Sql1

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

Page 3: Resolucao Exercicio Algebra Sql1

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)