Projeto e otimização banco de dados
Por: Kleber.Oliveira • 30/11/2018 • 609 Palavras (3 Páginas) • 379 Visualizações
...
('C4','D3','P3',204),
('C5','D4','P3',204),
('C5','D4','P4',207);
- Consultas solicitadas para o trabalho (SQL)
/*a)Código e nome das disciplinas com carga horária entre 3 e 5 inclusive e que não
sejam da área de Saúde.*/
SELECT CodD, NomeD FROM Disciplina
WHERE CargaD BETWEEN 3 AND 5 AND AreaD NOT LIKE 'Saúde';
/*b)Nome das disciplinas com carga horária menor que 5 e que sejam ministradas por
professores doutores.*/
SELECT DISTINCT NomeD FROM Disciplina d
INNER JOIN Grade g USING (CodD)
INNER JOIN Professor p USING (CodP)
WHERE d.CargaD
/*c)Salas onde haverá aulas cujos cursos possuam duração superior a 3 anos e cujas
disciplinas não sejam nem da área de Matemática, nem de Saúde e nem de
Humanas e cujo professor seja Paulo, Joaquim ou Juliana.*/
SELECT g.Sala FROM Disciplina d
INNER JOIN Grade g USING (CodD)
INNER JOIN Professor p USING (CodP)
INNER JOIN Curso c USING (CodC)
WHERE c.DuracaoC > 3 AND d.AreaD NOT IN('Matemática','Saúde','Humanas')
AND p.NomeP IN ('Paulo','Joaquim','Juliana');
/*d) Nomes dos professores que não ministram nenhuma disciplina.*/
SELECT p.NomeP FROM Professor p
WHERE NOT EXISTS (SELECT CodP FROM Grade g WHERE g.CodP = p.CodP);
/*e) Nomes das disciplinas e o nome dos respectivos pré-requisitos.*/
SELECT d.NomeD disciplina,
(CASE WHEN (pr.NomeD is null) THEN 'nenhum' ELSE pr.NomeD END) pre_requisito
FROM Disciplina d
LEFT JOIN Disciplina pr ON d.PreReqD = pr.CodD;
/*f) Nome das disciplinas que possuam carga horária maior que todas as disciplinas da
área de Matemática.*/
SELECT NomeD FROM Disciplina
WHERE CargaD > ALL (SELECT CargaD FROM Disciplina WHERE AreaD LIKE 'Matemática')
--OU, creio que o mais comumente utilizado:
SELECT NomeD FROM Disciplina
WHERE CargaD > (SELECT MAX(CargaD) FROM Disciplina WHERE AreaD LIKE 'Matemática')
/*g) Código de cada disciplina, com a quantidade de cursos em que a mesma é oferecida.*/
SELECT d.CodD, COUNT(DISTINCT g.CodC) FROM Disciplina d
INNER JOIN Grade g USING (CodD)
GROUP BY d.CodD
ORDER BY d.CodD;
/*h) Carga horária média das áreas com carga horária média maior ou igual a 3.*/
SELECT AreaD, TRUNC(AVG(CargaD),2) carga_hr_med FROM Disciplina
WHERE AreaD not null
GROUP BY AreaD
HAVING TRUNC(AVG(CargaD),2) >= 3
ORDER BY AreaD;
/*i) Nome das disciplinas que não têm pré-requisito e que não são pré-requisito.*/
SELECT d.NomeD FROM Disciplina d
WHERE d.PreReqD is null
AND NOT EXISTS(SELECT 1 FROM Disciplina pr WHERE pr.PreReqD = d.CodD);
--OU:
SELECT NomeD FROM Disciplina
WHERE PreReqD is null
AND CodD != ALL(SELECT d.CodD FROM Disciplina d
INNER JOIN Disciplina pr ON pr.PreReqD = d.CodD);
--OU:
SELECT NomeD FROM Disciplina WHERE PreReqD is null
EXCEPT
SELECT d.NomeD FROM Disciplina d INNER JOIN Disciplina pr ON pr.PreReqD = d.CodD
/*j) Nome dos cursos que têm a mesma duração do curso de Engenharia Elétrica e que
têm mensalidade maior que o referido curso.*/
SELECT c.NomeC FROM Curso c
WHERE
...