Exercício sobre SQL - Gabarito 1. Criação das tabelas: CREATE TABLE Aluno(RA int, Nome varchar(50), CPF varchar(11) UNIQUE, Endereco varchar(100), Telefone varchar(11), CONSTRAINT PK_Aluno PRIMARY KEY(RA)) CREATE TABLE Professor(Codigo int, Nome varchar(50), Endereco varchar(100), Telefone varchar(11), CONSTRAINT PK_Professor PRIMARY KEY(Codigo)) CREATE TABLE Disciplina(Codigo int, Nome varchar(30), CargaHoraria int, CodProf int, CONSTRAINT PK_Disciplina PRIMARY KEY(Codigo), CONSTRAINT FK1_Disciplina FOREIGN KEY(CodProf) REFERENCES Professor(Codigo)) CREATE TABLE Requisito(Codigo int, CodigoRequisito int, CONSTRAINT PK_Requisito PRIMARY KEY(Codigo, CodigoRequisito), CONSTRAINT FK1_Requisito FOREIGN KEY(Codigo) REFERENCES Disciplina(Codigo), CONSTRAINT FK2_Requisito FOREIGN KEY(CodigoRequisito) REFERENCES Disciplina(Codigo)) CREATE TABLE Matricula(CodigoDisc int, RA int, MediaFinal real, FrequenciaTotal int, CONSTRAINT PK_Matricula PRIMARY KEY(CodigoDisc, RA), CONSTRAINT FK1_Matricula FOREIGN KEY(CodigoDisc) REFERENCES Disciplina(Codigo), CONSTRAINT FK2_Matricula FOREIGN KEY(RA) REFERENCES Aluno(RA)) 2. Inserção dos registros: INSERT INTO Aluno VALUES (1, 'Marcos Silva', '12341234123', 'R. das Rosas, 123', '2345-9078'), (2,'Helena Oliveira','98760987654','R. dos Cravos, 567', '8907-8765'), (3,'Paulo Pereira', '56785678987', 'Al. dos Lirios, 456', '3218-5645'), (4, 'Paola das Neves', '34560987123', 'Al. das Acácias, 34', '7896-8976'), (5, 'Maria Inês de Sza','54378654987','R. das Flores, 459','5643-8976'), (6,'Tânia Rodrigues','34251623457','R. das Margaridas, 879','3218-4536'), (7,'Mônica Rocha','78453409876','R. das Goiabeiras, 654','3219-7890'), (8,'Jean Venturini','45328907654','Al. das Mangueiras, 54','3219-7695'), (9,'Yeda Santos','78678767564','Al. das Laranjeiras, 78','3218-6754'), (10,'Luciano Pirille','56432178976','Av. São Paulo, 327','3219-6759') INSERT INTO Professor VALUES (1, 'Marcia Simas', 'R. dos Trevos, 321','3214-9078'), (2, 'Haroldo da Silva', 'R. da Glória, 789', '3219-8765'), (3, 'Pedro Custódio', 'Al. Lorena, 27', '3217-5645'), (4, 'Pamela Martins', 'Al. Franca, 98', '7887-8976'), (5, 'Marta de Melo', 'R. dos Pinheiros, 45', '8522-8976'), (6, 'Péricles Arruda', 'R. dos Moinhos, 528','8761-8567') INSERT INTO Disciplina VALUES (1,'Cálculo I',40, 1), (2,'Cálculo II', 40, 3), (3,'Física I', 40, 4), (4,'Física II', 40, 2),(5,'Estatística', 20, 5) INSERT INTO Requisito VALUES (2,1),(3,1),(4,3),(4,2) INSERT INTO Matricula VALUES
(1,6,8.5,95),(1,7,6.5,87),(1,8,4.0,90),(1,9,5.5,50),(1,10,7.0,60),(3,6,9.0,90),(3,7,7.5,80),(3,8,5.0,85),(3,10,7.5,76), (2,1,3.5,60),(2,2,5.5,70),(2,3,6.0,76),(2,4,5.5,80),(2,5,7.5,90),(4,1,4.0,60),(4,2,7.0,80),(4,3,8.5,85),(4,4,6.5,50), (4,5,7.0,78),(5,1,6.5,70),(5,3,7.5,87),(5,4,9.5,95) 1. SELECT * FROM Aluno ORDER BY Nome 2. SELECT Disciplina.Nome, Disciplina.CargaHoraria, Professor.Nome FROM Disciplina, Professor WHERE Disciplina.CodProf = Professor.Codigo SELECT Disciplina.Nome, Disciplina.CargaHoraria, Professor.Nome FROM Disciplina INNER JOIN Professor ON Disciplina.CodProf = Professor.Codigo 3. SELECT Professor.Nome, Disciplina.Nome FROM Disciplina RIGHT JOIN Professor ON Disciplina.CodProf = Professor.Codigo ORDER BY Professor.Nome 4. SELECT D1.Nome, D2.Nome FROM Disciplina AS D1, Requisito, Disciplina AS D2 WHERE D1.Codigo = Requisito.Codigo AND D2.Codigo = Requisito.CodigoRequisito SELECT D1.Nome, D2.Nome
FROM Disciplina AS D1 INNER JOIN Requisito ON D1.Codigo = Requisito.Codigo INNER JOIN Disciplina AS D2 ON D2.Codigo = Requisito.CodigoRequisito 5. SELECT Disciplina.Nome, Aluno.Nome FROM Disciplina, Matricula, Aluno WHERE Disciplina.Codigo = Matricula.CodigoDisc AND Aluno.RA = Matricula.RA AND Matricula.MediaFinal >= 6 AND FrequenciaTotal >= 75 SELECT Disciplina.Nome, Aluno.Nome FROM Disciplina INNER JOIN Matricula ON Disciplina.Codigo = Matricula.CodigoDisc INNER JOIN Aluno WHERE Matricula.MediaFinal >= 6 AND FrequenciaTotal >= 75 6., Disciplina WHERE Disciplina.Codigo = Matricula.CodigoDisc AND Matricula.RA = Aluno.RA AND Disciplina.Nome = 'Cálculo I' AND MediaFinal BETWEEN 6 AND 8 ON Matricula.RA = Aluno.RA INNER JOIN Disciplina ON Disciplina.Codigo = Matricula.CodigoDisc WHERE Disciplina.Nome = 'Cálculo I' AND MediaFinal BETWEEN 6 AND 8
7. SELECT Matricula.CodigoDisc, COUNT(*) AS 'Número de alunos matriculados' GROUP BY Matricula.CodigoDisc 8., COUNT(*) AS 'Número de disciplinas nas quais está matriculado', COUNT(*) AS 'Número de disciplinas nas quais está matriculado' 9., AVG(MediaFinal) AS 'Media Geral das Notas', AVG(MediaFinal) AS 'Media Geral das Notas'
10. SELECT Professor.Nome, Professor.Telefone FROM Professor WHERE Professor.Codigo NOT IN (SELECT Disciplina.CodProf FROM Disciplina) 11., Matricula.MediaFinal AND Matricula.CodigoDisc IN (SELECT Disciplina.Codigo FROM Disciplina WHERE Disciplina.Nome = 'Física II'), Matricula.MediaFinal WHERE Matricula.CodigoDisc IN (SELECT Disciplina.Codigo FROM Disciplina WHERE Disciplina.Nome = 'Física II') 12. WHERE Matricula.MediaFinal >= ANY
AND Matricula.MediaFinal >= ANY 13. AND Matricula.MediaFinal >ALL WHERE Matricula.MediaFinal > ALL 14. SELECT * FROM Professor WHERE Nome LIKE 'P%' 15. SELECT * FROM Aluno WHERE Endereco NOT LIKE 'R%'