Você está na página 1de 6

Lista de exerccios de SQL SERVER

Lista de exerccios de SQL SERVER



Usar o script abaixo para inserir dados no banco de Dados

IF DB_ID('IMIH') IS NOT NULL
BEGIN
USE Master
DROP DATABASE IMIH
END
--------------------------------------------------------------------------------------------
CREATE DATABASE IMIH
GO
--------------------------------------------------------------------------------------------
USE IMIH
--------------------------------------------------------------------------------------------
CREATE TABLE Depto (codDepto CHAR(5),
nomeDepto VARCHAR(20)
PRIMARY KEY (codDepto));

INSERT INTO Depto VALUES ('INF01', 'Informtica');
INSERT INTO Depto VALUES ('MAT01', 'Matemtica');
INSERT INTO Depto VALUES ('ELE01', 'Eletrnica');
--------------------------------------------------------------------------------------------
CREATE TABLE Disciplina (codDepto CHAR(5),
numDisc CHAR(5),
nomeDisc VARCHAR(20),
creditosDisc INTEGER,
PRIMARY KEY (codDepto, numDisc),
FOREIGN KEY (codDepto) REFERENCES Depto);

INSERT INTO Disciplina VALUES ('INF01', 'DIS01', 'Ling Formais', 4);
INSERT INTO Disciplina VALUES ('INF01', 'DIS02', 'Teoria da Comp', 4);
INSERT INTO Disciplina VALUES ('INF01', 'DIS03', 'Programacao I', 8);
INSERT INTO Disciplina VALUES ('MAT01', 'DIS04', 'Clculo 1', 4);
INSERT INTO Disciplina VALUES ('MAT01', 'DIS01', 'Clculo 2', 6);
--------------------------------------------------------------------------------------------
CREATE TABLE PreReq (codDepto CHAR(5),
numDisc CHAR(5),
codDeptoPreReq CHAR(5),
numDiscPreReq CHAR(5),
PRIMARY KEY (codDepto, numDisc, codDeptoPreReq, numDiscPreReq),
FOREIGN KEY (codDepto, numDisc) REFERENCES disciplina,
FOREIGN KEY (codDeptoPreReq, numDiscPreReq) REFERENCES disciplina);

INSERT INTO PreReq VALUES ('INF01', 'DIS02', 'INF01', 'DIS01');
INSERT INTO PreReq VALUES ('MAT01', 'DIS04', 'MAT01', 'DIS01');
INSERT INTO PreReq VALUES ('INF01', 'DIS03', 'INF01', 'DIS02');
--------------------------------------------------------------------------------------------
CREATE TABLE Turma (anoSem INTEGER,
codDepto CHAR(5),
numDisc CHAR(5),
siglaTur CHAR(5),
capacTur INTEGER,
PRIMARY KEY (anoSem, codDepto, numDisc, siglaTur),
FOREIGN KEY (codDepto, numDisc) REFERENCES Disciplina);

INSERT INTO turma VALUES (20021, 'INF01', 'DIS01', 'TUR01', 30);
INSERT INTO turma VALUES (20022, 'INF01', 'DIS01', 'TUR01', 30);
INSERT INTO turma VALUES (20021, 'INF01', 'DIS02', 'TUR02', 30);
INSERT INTO turma VALUES (20022, 'INF01', 'DIS03', 'TUR01', 200);
INSERT INTO turma VALUES (20031, 'INF01', 'DIS03', 'TUR02', 30);
INSERT INTO turma VALUES (20021, 'MAT01', 'DIS01', 'TUR01', 15);
INSERT INTO turma VALUES (20022, 'INF01', 'DIS03', 'TUR02', 25);
--------------------------------------------------------------------------------------------
CREATE TABLE Predio (codPred INTEGER,
nomePred VARCHAR(30),
PRIMARY KEY (codPred));

INSERT INTO predio VALUES (43423, 'Informtica-Aulas');
INSERT INTO predio VALUES (43421, 'Administrao');
INSERT INTO predio VALUES (43424, 'Laboratrios');
--------------------------------------------------------------------------------------------

Lista de exerccios de SQL SERVER

CREATE TABLE Sala (codPred INTEGER,
numSala INTEGER,
capacSala INTEGER,
PRIMARY KEY (codPred, numSala),
FOREIGN KEY (codPred) REFERENCES Predio);

INSERT INTO sala VALUES (43423, 101, 30);
INSERT INTO sala VALUES (43421, 102, 50);
INSERT INTO sala VALUES (43424, 215, 40);
--------------------------------------------------------------------------------------------
CREATE TABLE Horario (anoSem INTEGER,
codDepto CHAR(5),
numDisc CHAR(5),
siglaTur CHAR(5),
diaSem INTEGER,
horaInicio CHAR(5),
numHoras INTEGER,
codPredio INTEGER,
numSala INTEGER,
PRIMARY KEY (anoSem, codDepto, numDisc, siglaTur, diaSem, horaInicio),
FOREIGN KEY (anoSem, codDepto, numDisc, siglaTur) REFERENCES turma,
FOREIGN KEY (codPredio, numSala) REFERENCES sala);

INSERT INTO horario VALUES (20021, 'INF01', 'DIS01', 'TUR01', 2, '10:30', 60, 43423, 101);
INSERT INTO horario VALUES (20021, 'INF01', 'DIS02', 'TUR02', 3, '10:30', 60, 43423, 101);
INSERT INTO horario VALUES (20022, 'INF01', 'DIS03', 'TUR02', 4, '08:30', 45, 43424, 215);
INSERT INTO horario VALUES (20021, 'INF01', 'DIS01', 'TUR01', 4, '13:30', 60, 43423, 101);
--------------------------------------------------------------------------------------------
CREATE TABLE Titulacao (codTit INTEGER,
nomeTit VARCHAR(20),
PRIMARY KEY (codTit));

INSERT INTO Titulacao VALUES (1, 'Doutor');
INSERT INTO Titulacao VALUES (2, 'Mestre');
INSERT INTO Titulacao VALUES (3, 'Especialista');
INSERT INTO Titulacao VALUES (4, 'Graduado');
--------------------------------------------------------------------------------------------
CREATE TABLE Professor (codProf CHAR(5),
nomeProf VARCHAR(50),
codTit INTEGER,
codDepto CHAR(5),
PRIMARY KEY (codProf),
FOREIGN KEY (codTit) REFERENCES Titulacao,
FOREIGN KEY (codDepto) REFERENCES Depto);

INSERT INTO Professor VALUES ('Pro01', 'Antunes', 1, 'INF01');
INSERT INTO Professor VALUES ('Pro02', 'Maria dos Santos', 2, 'INF01');
INSERT INTO Professor VALUES ('Pro03', 'Paulo', 3, 'MAT01');
INSERT INTO Professor VALUES ('Pro04', 'Gabriel', 2, 'MAT01');
--------------------------------------------------------------------------------------------
CREATE TABLE ProfTurma (anoSem INTEGER,
codDepto CHAR(5),
numDisc CHAR(5),
siglaTur CHAR(5),
codProf CHAR(5),
PRIMARY KEY (anoSem, codDepto, numDisc, siglaTur, codProf),
FOREIGN KEY (anoSem, codDepto, numDisc, siglaTur) REFERENCES Turma,
FOREIGN KEY (codProf) REFERENCES Professor);

INSERT INTO ProfTurma VALUES (20021, 'INF01', 'DIS01', 'TUR01', 'Pro01');
INSERT INTO ProfTurma VALUES (20022, 'INF01', 'DIS01', 'TUR01', 'Pro01');
INSERT INTO ProfTurma VALUES (20021, 'INF01', 'DIS02', 'TUR02', 'Pro02');
INSERT INTO ProfTurma VALUES (20021, 'MAT01', 'DIS01', 'TUR01', 'Pro03');
INSERT INTO ProfTurma VALUES (20021, 'MAT01', 'DIS01', 'TUR01', 'Pro02');

Lista de exerccios de SQL SERVER


1) Obter todos os dados dos professores.

2) Obter o cdigo e o nome dos professores.

3) Obter a capacidade das turmas.

4) Obter os diferentes valores de capacidades de turmas.

5) Obter o nome das disciplinas do depto INF01, desde que tenham mais de 5 crditos.

6) Obter o cdigo do prdio chamado Laboratrios.

7) Obter o nmero da sala e o cdigo do prdio, desde que a sala tenha capacidade superior
a 35 lugares.

8) Obter o nome dos professores que tm titulao 1 e que trabalham no depto INF01.

9) Obter o nome dos professores que tm titulao 2 ou que trabalham no depto INF01.

10) Retorne o cdigo e o nome dos professores que possuem Santos no final.

11) Sabendo que cada crdito de disciplina corresponde s 15h aula, retorne o nome da
disciplina e o seu nmero de horas-aula.

12) Obtenha os nomes das disciplinas seguidas do nome de seu departamento.

13) Obtenha os nomes dos professores que possuem titulao de Doutor.

14) Obtenha os nomes dos professores que ministraram aulas em 2002/2.

15) Obtenha os nmeros das salas do prdio de nome Laboratrios cuja capacidade seja
maior que 30.

16) Obtenha os nomes das disciplinas que foram oferecidas em 2002/1.

17) Obtenha os nmeros das salas do prdio "Laboratrios".

18) Obtenha os nomes dos professores seguidos do nome de seu departamento.

19) Obtenha os cdigos dos professores que no possuem turma em 1999/2.


Lista de exerccios de SQL SERVER

20) Nomes dos departamentos que possuem disciplinas que no apresentam pr-requisito.

21) Obtenha os cdigos dos professores que ministraram aulas em 1999/2 e 2002/2.

22) Obtenha os nomes dos departamentos em que h pelo menos uma disciplina com mais de
cinco crditos.

23) Obter os cdigos dos diferentes departamentos que tem turmas no ano-semestre 2002/1

24) Obter os cdigos dos professores que so do departamento de cdigo 'INF01' e que
ministraram ao menos uma turma em 20021.

25) Obter os horrios de aula (dia da semana, horainicial e nmero de horas ministradas) do
professor "Antunes" em 2002/1.

26) Obter os nomes dos departamentos que tm turmas que, em 2002/1, tm aulas na sala
101 do prdio denominado 'Informtica-Aulas'.

27) Obter os cdigos dos professores com ttulo denominado 'Doutor' que no ministraram
aulas em 2001/1.

28) Obter os identificadores das salas (cdigo do prdio e nmero da sala) que, em 2002/1:
nas segundas-feiras (dia da semana = 2), tiveram ao menos uma turma do departamento
'Informtica'

29) Nas quartas-feiras (dia da semana = 4), tiveram ao menos uma turma ministrada pelo
professor denominado 'Antunes' .

30) Obter o dia da semana, a hora de incio e o nmero de horas de cada horrio de cada
turma ministrada por um professor de nome 'Antunes', em 2002/1, na sala nmero 101
do prdio de cdigo 43423.

31) Para cada disciplina que possui pr-requisito, obter o nome da disciplina seguido do nome
da disciplina que seu pr-requisito.

32) Obter os nomes das disciplinas que no so pr-requisito.

33) Obter os nomes docentes cuja titulao tem cdigo diferente de 3.

34) Obter os nomes dos depar tamentos que tm turmas que, em 2002/1, tm aulas na sala
101 do prdio denominado ' Informtica-Aulas'.

35) Obter o nome de cada departamento seguido do nome de cada uma de suas disciplinas
que possui mais que trs crditos (caso o departamento no tenha disciplinas ou caso o
departamento no tenha disciplinas com mais que trs crditos, seu nome deve aparecer
seguido de vazio).

36) Obter os nomes dos professores que so do departamento denominado 'Informtica',
sejam doutores, e que, em 2002/2, ministraram alguma turma de disciplina do
departamento 'Informtica' que tenha mais que trs crditos.

37) Obter o nmero de disciplinas do departamento denominado Informtica.
Lista de exerccios de SQL SERVER


38) Obter os nomes das disciplinas do departamento denominado Informtica que tm o
maior nmero de crditos dentre as disciplinas deste departamento.

39) Para cada departamento, obter seu nome e o seu nmero de disciplinas. Obter o
resultado em ordem descendente de nmero de disciplinas