Você está na página 1de 3

UNIVERSIDADE FEDERAL DE UBERLÂNDIA

FACULDADE DE COMPUTAÇÃO
SISTEMAS DE BANCO DE DADOS

2013-2

EXERCÍCIO 3 - Consultas SQL

BD do SAFIS

Implemente as consultas abaixo, usando a linguagem SQL

de um SGBD(por exemplo, o PostgreSQL).

1) Listar (unidade.nome, professor.nome, disciplina.nome) das

disciplinas que possuem a palavra "computacao" em seu nome e

com turmas ministradas pelo professor lotado na unidade.

Considere apenas turmas de um determinado ano/semestre,

por exemplo, ano=2005 e semestre=1;

SELECT nomeunidade, nomepessoa, nomedisciplina

FROM unidade u, pessoa p, disciplina d,

historicoprofessor h, funcionario f

WHERE d.nomedisciplina LIKE '%Computação%'

AND d.coddisciplina = t.coddisciplina

AND t.ano = '2010'

AND t.semestre = '2'

AND t.coddisciplina = h.coddisciplina

AND h.matricula = p.matricula

AND h.matricula = f.matricula

AND f.codunidade = u.codunidade

2) Listar (atividade.descricao, responsavel.nome) das atividades cuja

data de término seja maior que a data prevista;

SELECT descricao, nomepessoa

FROM pessoa p, atividade a

WHERE p.matricula = a.matricula AND a.dfimatividade > a.dprevistafim

3) Listar (nome) das pessoas que participam de alguma atividade de projeto

mas não participam de nenhum dos resultados do projeto;

SELECT nomepessoa

FROM atividade a, projeto pj, pessoa pe

WHERE a.codprojeto = pj.codprojeto

AND a.matricula = pe.matricula

AND NOT EXISTS


(SELECT * FROM pessoaresultado pr

WHERE pr.matricula = pj.matricula

AND pr.codprojeto = pj.codprojeto)

4) Listar (nome) dos alunos que participam de algum resultado de projeto;

SELECT nomepessoa

FROM pessoa p

WHERE EXISTS (SELECT * FROM pessoaresult pr, aluno a

WHERE p.matricula = pr.matricula

AND p.matricula = a.matricula)

5) Listar (nome) dos projetos que têm pelo menos um resultado

cadastrado;

SELECT tituloprojeto

FROM projeto p

WHERE EXISTS

(SELECT resultado r

WHERE p.codprojeto = r.codprojeto)

6) Listar (nome) dos dirigentes que não estão dirigindo

qualquer unidade ou curso;

SELECT nomepessoa

FROM dirigente d, pessoa p

WHERE d.matricula = p.matricula

AND NOT EXISTS

(SELECT * FROM unidade u

WHERE d.matricula = u.matriculadirigente)

AND NOT EXISTS

(SELECT * FROM curso c

WHERE d.matricula = c.matriculadirigente)

7) Listar (nome) dos alunos matriculados em mais de um curso;

SELECT nomepessoa

FROM pessoa p

WHERE (SELECT COUNT(*)

FROM alunocurriculo ac

WHERE ac.matricula = p.matricula) > 1;

8) Atualizar o atributo historicosprofessor.qtdreprovadosfreq com o número

de alunos com frequência inferior a 75% das aulas ministradas na turma;

UPDATE historicoprofessor hp

SET qtdreprovadosfreq = (SELECT COUNT(*)

FROM historicoaluno ha, turma t

WHERE hp.codturma = t.codturma

AND hp.codturma = ha.codturma

AND ha.frequencia < 0.75 * t.nroaulasdadas)

9) Listar (nome) dos alunos que já cursaram todas as disciplinas

obrigatórias de seu currículo;

SELECT nomepessoa

FROM pessoa p, aluno a

WHERE p.matricula = a.matricula

AND NOT EXISTS

(SELECT *

FROM curriculodisciplina cd, alunocurriculo ac

WHERE a.matricula = ac.matricula

AND cd.codcurso = ac.codcurso

AND cd.dataaprovacao = ac.dataaprovacao

AND cd.caracteristica = 'OB'

AND NOT EXISTS

(SELECT * FROM historicoaluno h

WHERE cd.coddisciplina = h.coddisciplina

AND h.situacao = 'aprovado'));

10) Listar (aluno.nome, curso.nome, qtda, qtdc) onde

qtda é a quantidade de disciplinas em que o aluno foi aprovado e

qtdc é a quantidade de disciplinas obrigatórias do currículo do aluno,

somente para os alunos com qtda superior a 85\% de qtdc;

SELECT nomepessoa, nomecurso,

COUNT(ha.situacao='aprovado') as qtda,

COUNT(cd.caracteristica='OB') as qtdc

FROM pessoa p, historicoaluno ha, alunocurriculo ac,

curso c, curriculo cc, curriculodisciplina cd

WHERE p.matricula = ha.matricula

AND ha.matricula = ac.matricula

AND ac.codigocurso = c.codigocurso

AND (ac.codigocurso = cc.codigocurso

AND ac.dataaprovacao = cc.dataaprovacao)

AND (cc.codigocurso =cd.codigocurso

AND cc.dataaprovacao = cd.dataaprovacao)

GROUP BY nomepessoa, nomecurso

HAVING qtda > 0.85 * qtdc

11) Listar (nome) das disciplinas que fazem parte de todos os currículos

de um curso;

SELECT nomedisciplina

FROM disciplina d

WHERE EXISTS

(SELECT * FROM curso c

WHERE NOT EXISTS

(SELECT * FROM curriculo cc

WHERE c.codcurso = cc.codcurso

AND NOT EXISTS

(SELECT *

FROM curriculodisciplina cd

WHERE cd.coddisciplina = d.coddisciplina

AND cd.codcurso = cc.codcurso

AND cd.dataaprovacao = cc.dataaprovacao)));

12) Listar (unidade.nome, qtdalunos) da unidade, sendo qtdalunos a

quantidade de alunos que estão matriculados (situacao='M') em turmas

oferecidas por professore lotados na unidade;

SELECT nomeunidade, COUNT(*) as qtdalunos

FROM unidade u, funcionario f,

historicoaluno ha, historicoprof hp

WHERE u.codunidade = f.codunidade

AND f.matricula = hp.matricula

AND ha.codturma = hp.codturma

AND situacao = 'M'


GROUP BY nomeunidade

13) Listar (nome, qtdprojetos) dos funcionários, sendo

qtdprojetos a quantidade de projetos gerenciados pelo

funcionário. Listar somente os funcionários que gerenciam pelo menos

um projeto;

SELECT nomepessoa, COUNT (*) as qtdprojetos

FROM pessoa p, funcionario f, projeto pj

WHERE f.matricula = p.matricula

AND f.matricula = pj.matricula

GROUP BY nomepessoa

14) Listar (nome) dos alunos que cursaram pelo menos uma disciplina que

não faz parte das disciplinas de seu currículo;

SELECT nomepessoa

FROM aluno a, pessoa p

WHERE a.matricula = p.matricula

AND EXISTS (SELECT * FROM historicoaluno ha

WHERE a.matricula = ha.matricula

AND NOT EXISTS

(SELECT * FROM alunocurriculo ac, disciplinacurriculo dc

WHERE a.matricula = ac.matricula

AND ac.codcurso = dc.codcurso

AND ac.dataaprovacao = dc.dataaprovacao

AND dc.coddisciplina = ha.coddisciplina))

15) Lista (codprojeto, somarecebidos) de cada projeto, sendo que

somarecebidos é a soma de receitas de custeio e investimento recebidos pelo

projeto. Sugestão usar cláusula UNION para gerar tabela de subconsulta

na cláusula FROM.

FORA DE ESCOPO POIS AS RECEITAS NÃO FORAM DIVIDIDAS EM CUSTEIO E

INVESTIMENTO NO PROJETO DO SISTEMA....

Você também pode gostar