Buscar

BD5_SQL

Prévia do material em texto

1
�������������	�
�������������	�
�������������	�
�������������	�
	��	��	��	��
������������ �������������
	��	��	��	��	��	��	��	��
• 	������������� ��!"��"�
• #�!�����$%������!���������&�'�'���
����'��������!��'
• (����'�')
* ����������������!'����
* +���!�����!������,!����'
* ��!'���$%�����-�'.�'
* 	�"���!$�
* ��!������������'����!/�
• ���''����&�!����������')
* ��&��!����!������-�������!'����'
* ��&�������� ���!"��"�!'�/�'�������'
	���	���	���	���	���	���	���	���00000000 1�'�2����1�'�2����1�'�2����1�'�2����1�'�2����1�'�2����1�'�2����1�'�2����
• �!,������'�34) 
�#�* 	�'�����(�� 	��5��
• ��	
�6�
	��� 	��078
• 	��079
* �/�-�'�����:���';��/�-�'��'���!"����';�-�����'�!���';����
• 	��09<�=	��<>
* ��&���'�������:���';�?�!$.�'��@���!�'���!������;�����'�';�
-�����'�A!���';����
� ���"���!����������!����
• 	��0B999
* �����'�'������;��!���������������������-�'�=����>;�'�����
���������';�����!��'���&�����';����
• 	��0<44C
* �����$%�����&�"';�!�-�'����'��������';�'��0@��;���
+����'��������!��'�	��+����'��������!��'�	��+����'��������!��'�	��+����'��������!��'�	��+����'��������!��'�	��+����'��������!��'�	��+����'��������!��'�	��+����'��������!��'�	��
• Linguagem de Definição de Dados (DDL): 
comandos para definir, alterar e remover 
tabelas e índices;
• Linguagem de Manipulação de Dados 
(DML): comandos para inserir, remover, 
atualizar e consultar os dados armazenados 
nas tabelas;
• Linguagem de Controle de Dados (DCL): 
comandos para se trabalhar em ambiente 
multi-usuário, permitindo estabelecer níveis 
de segurança e manipular transações.
D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����
CodC NomeC DuracaoC MensC
C1 Enfermagem 4 400
C2 Eng Mecânica 5 600
C3 Inf Biomédica 4 450
C4 Eng Elétrica 4 600
C5 Turismo 3 350
Curso
D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����
Disciplina
CodD NomeD CargaD AreaD PreReqD
D1 TLP1 2 Computação D2
D2 Cálculo1 4 Matemática null
D3 Inglês 2 Humanas null
D4 Ed Física 3 Saúde null
D5 G Analítica 5 Matemática D2
D6 Projeto Final 6 null D1
2
D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����
CodP NomeP CidadeP TituloP
P1 Renato Rib Preto Mestre
P2 Paulo Batatais Espec
P3 André Rib Preto Doutor
P4 Gil S Carlos Doutor
P5 Juliana S Carlos Pós Doc
Professor
D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����
CodC CodD CodP Sala
C1 D6 P1 305
C2 D2 P2 305
C3 D2 P2 305
C4 D1 P5 201
C4 D3 P3 204
C5 D4 P3 204
C5 D4 P4 207
Grade
������������������������
=��!"��"�� ��������!�$%���������'>=��!"��"�� ��������!�$%���������'>=��!"��"�� ��������!�$%���������'>=��!"��"�� ��������!�$%���������'>=��!"��"�� ��������!�$%���������'>=��!"��"�� ��������!�$%���������'>=��!"��"�� ��������!�$%���������'>=��!"��"�� ��������!�$%���������'>
• Tipos de dados mais usuais:
– - CHAR(n) ou CHARACTER(n): cadeia de caracteres de tamanho fixo, 
com o tamanho n definido pelo usuário;
– - VARCHAR(n): cadeia de caracteres de tamanho variável, com o 
tamanho máximo n definido pelo usuário;
– - INT ou INTEGER: número inteiro, geralmente de -32768 a 32767;
– - SMALLINT: número inteiro pequeno, geralmente de 0 a 65535;
– - NUMERIC(t,d): número de ponto decimal fixo, que consiste de t dígitos 
totais e d dígitos à direita do ponto decimal, com t e d definidos pelo 
usuário;
– - REAL: número de ponto flutuante, geralmente de 1.17E-38 a 3.4E+38;
– - DOUBLE PRECISION: número de ponto flutuante de dupla precisão 
(15 dígitos de precisão), geralmente de 2.2E-308 a 1.7E+308;
– - FLOAT(n): número de ponto flutuante com a precisão n definida pelo 
usuário, sem n: precisão de 7 dígitos;
– - DATE: formato de data, contendo dia, mês e ano;
– - TIME: formato de horário, contendo horas, minutos e segundos.
����$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&���
Sintaxe:
CREATE TABLE nome_tabela
(nome_coluna tipo [NOT NULL] [SET DEFAULT valor], 
.... ,
PRIMARY KEY (nome_colunas),
[UNIQUE (nome_coluna)],
[FOREIGN KEY (nome_coluna)
REFERENCES nome_tabela (nome_coluna)
ON DELETE CASCADE/SET NULL/SET DEFAULT
ON UPDATE CASCADE/SET NULL/SET DEFAULT ]
[CHECK condição])
����$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&���
• �@������B�)��@������B�)��@������B�)��@������B�)� ����$%�������&������'�����!�
CREATE TABLE Disciplina
( CodD CHAR(5),
NomeD VARCHAR(20) NOT NULL,
CargaD INTEGER NOT NULL,
AreaD VARCHAR(20),
PreReqD CHAR(5),
UNIQUE (NomeD),
PRIMARY KEY (CodD) 
CHECK CargaD > 0 AND CargaD <= 6)
����$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&�������$%�����B���&���
– �@������<)��@������<)��@������<)��@������<)� ����$%�������&����+����
CREATE TABLE Grade
( CodC CHAR(5),
CodD CHAR(5),
CodP CHAR(5),
Sala INTEGER, 
PRIMARY KEY (CodC, CodD, CodP),
FOREIGN KEY (CodC) REFERENCES Curso (CodC)
ON DELETE CASCADE,
FOREIGN KEY (CodD) REFERENCES Disciplina (CodD)
ON DELETE CASCADE,
FOREIGN KEY (CodP) REFERENCES Professor (CodP)
ON DELETE SET NULL)
OOOPS !!!
3
������$%�����B���&���������$%�����B���&���������$%�����B���&���������$%�����B���&���������$%�����B���&���������$%�����B���&���������$%�����B���&���������$%�����B���&���
Sintaxe:
ALTER TABLE nome_tabela
[ADD nome_coluna tipo [NOT NULL] ]
[DROP nome_coluna [CASCADE/RESTRICT] ]
[ADD CONSTRAINT nome_restrição restrição]
�@������@������@������@����� )�)�)�)� ���$%���������!��#�!'� E ��&����
���'�
ALTER TABLE Curso
ADD MensC NUMERIC(6,2);
(���$%�����B���&���(���$%�����B���&���(���$%�����B���&���(���$%�����B���&���(���$%�����B���&���(���$%�����B���&���(���$%�����B���&���(���$%�����B���&���
Sintaxe:
DROP TABLE nome_tabela CASCADE/RESTRICT ;
����$%�����$%�����$%�����$%�����$%�����$%�����$%�����$%� ������$%�����F!����'������$%�����F!����'������$%�����F!����'������$%�����F!����'������$%�����F!����'������$%�����F!����'������$%�����F!����'������$%�����F!����'
Sintaxe para criação:
CREATE INDEX nome_índice
ON nome_tabela ( nome_coluna [ASC|DESC],...);
�@������)��@������)��@������)��@������)� ����$%����,!�����'�&���������!��
������
�����&����
����''��
CREATE INDEX Xcidadeprof
ON Professor (CidadeP ASC);
Sintaxe para remoção:
DROP INDEX nome_índice
Linguagem de ManipulaLinguagem de Manipulaçção de Dados (DML)ão de Dados (DML)
• 
!���'%����������'
• ������$%����������'
• (���$%����������'
• ��!'����'����&�!��
!���'%�����
!���'%�����
!���'%�����
!���'%�����
!���'%�����
!���'%�����
!���'%�����
!���'%����������'�����'�����'�����'�����'�����'�����'�����'�� �B���&����� �B���&����� �B���&����� �B���&����� �B���&����� �B���&����� �B���&����� �B���&���
Sintaxe:
INSERT
INTO nome_tabela ( nome_coluna, .....)
VALUES (valor, ...)
�@�����)��@�����)��@�����)��@�����)� 
!'���������!/��B������&����
����''��
INSERT
INTO Professor (CodP, NomeP, CidadeP, TituloP)
VALUES (‘P3', ‘Andre', 'Rib Preto', ‘Doutor')
��������$%����'�����'����B���&�����������$%����'�����'����B���&�����������$%����'�����'����B���&�����������$%����'�����'����B���&�����������$%����'�����'����B���&�����������$%����'�����'����B���&�����������$%����'�����'����B���&�����������$%����'�����'����B���&���
Sintaxe:
UPDATE nome_tabela
SET nome_coluna = valor, .....
WHERE (condição de localização)
�@������)��@������)��@������)��@������)� ����������-����������!'�����������
���'�����
!���� :���������G���������8H4;44
UPDATE CursoSET MensC = 650
WHERE (NomeC = ‘Inf Biomédica’)
(���$%���������'����B���&���(���$%���������'����B���&���(���$%���������'����B���&���(���$%���������'����B���&���(���$%���������'����B���&���(���$%���������'����B���&���(���$%���������'����B���&���(���$%���������'����B���&���
	�!��@�)
DELETE FROM nome_tabela
WHERE (condição de localização)
�@������B�)��@������B�)��@������B�)��@������B�)� (���-��������&����
����''�������'�
�'������''���'������I� ��,��������������
DELETE FROM Professor
WHERE (TituloP = ‘Doutor’)
4
�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'
• ��!'���������'��������������'�)
��!���!���!���!�=���J��!�;�!���;����J!�'�;�'��:���;�
!��J�������;����J'����-��>
�������������������� =!��J�����;�!���;����J"����>
��?���
��?���
��?���
��?��� =���J���?;�!���;�����$%�;�
!��J�������>
��������
��������
��������
��������=���J���?��;����J��!���;�/���'J���&>
�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'
B� ����������&������!���!���!���!��
<� ������!���������!������$%��E���&����
��?���
��?���
��?���
��?����
C� (���-�������&����
��?���
��?���
��?���
��?����
K� ������,!������������������&�������J!�'����J!�'����J!�'����J!�'������&����
��!���!���!���!��
H� 
!'�����-�����'�!����&�������������������������
8� L�����������$%���������'��'����?���'����������
H�
3� (���-�������'��'����������$.�'��� ����?���'����
��!���!:����C�
����!���	����D����!���	����D����!���	����D����!���	����D����!���	����D����!���	����D����!���	����D����!���	����D
Sintaxe:
SELECT [DISTINCT | ALL] nome_coluna,....
FROM nome_tabela, ....
[WHERE (condições) [ sub-select] ]
[GROUP BY nome_coluna, ....]
[HAVING (condições)]
[{INTERSECT | MINUS | UNION} comando_select]
[ORDER BY nome_coluna {ASC | DESC}, ....]
����!���	����D����!���	����D����!���	����D����!���	����D����!���	����D����!���	����D����!���	����D����!���	����D
SELECT � atributos desejados
DISTINCT � apenas valores distintos dos atributos
ALL � todos os valores dos atributos
FROM � de onde vem as informações
WHERE � de quais tuplas vêm as informações
GROUP BY � forma grupo de tuplas
HAVING � de quais grupos vêm as informações
INTERSECT � interseção de resultados
UNION � união de resultados
MINUS � diferença entre resultados
ORDER BY � ordenação do resultado
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 ���������'���������'���������'���������'���������'���������'���������'���������'
Aritméticos + - * /
Lógicos AND OR NOT
Relacionais = <>!= < <= > >= LIKE BETWEEN…AND
Conjunturais IN IS NULL ANY ALL (NOT) EXISTS
Conjuntos UNION INTERSECT MINUS
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** ��"���'���!$.�'��"���'���!$.�'��"���'���!$.�'��"���'���!$.�'��"���'���!$.�'��"���'���!$.�'��"���'���!$.�'��"���'���!$.�'
Grupo Função Descrição
Agregação
AVG (col) média dos valores da coluna
SUM (col) soma de valores da coluna
MAX (col) valor máximo da coluna
MIN (col) valor mínimo da coluna
COUNT total de tuplas
Caracter
UPPER (col) converte caracteres minúsculos em maiúsculos
LOWER (col) converte caracteres maiúsculos em minúsculos
SUBSTR (col, pos, n) substring da coluna, iniciando em pos, com n 
caracteres
Números ROUND (col/const, n) arredondamento em n da coluna (ou da constante
TRUNC (col/const, n) truncamento em n da coluna (ou da constante)
ABS (col/const) valor absoluto da coluna ou da constante
Data/Hora MONTH (data) mês da data
YEAR (data) ano da data
MINUTE (hora) minuto da hora
Conversões
TO_CHAR(num/data) número (ou data) para caracter
TO_NUMBER (char) caracter para número
TO_DATE (char) caracter para data
5
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** ��!'�����	�����'��!'�����	�����'��!'�����	�����'��!'�����	�����'��!'�����	�����'��!'�����	�����'��!'�����	�����'��!'�����	�����'
• Nomes das disciplinas)
SELECT NomeD
FROM Disciplina
NomeD
TLP1
Cálculo1
Inglês
Ed Física
G Analítica
Projeto Final
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** ��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'
• Salas onde as aulas serão ministradas:
SELECT Sala
FROM Grade
Sala 
305
305
305
201
204
204
207
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** ��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'
• Salas onde as aulas serão ministradas, sem 
repetição)
SELECT DISTINCT Sala
FROM Grade Sala 305
201
204
207
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** ��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'
• Nome e código dos professores de Ribeirão 
Preto:
SELECT NomeP, CodP
FROM Professor
WHERE CidadeP = 'Rib Preto'
NomeP CodP
Renato P1
André P3
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** ��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'��!'����'�	�����'
• Todas as colunas da grade do curso C4)
SELECT *
FROM Grade
WHERE CodC = 'C4'
CodC CodD CodP Sala 
C4 D1 P5 201
C4 D3 P3 204
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** 5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'
• Nome e duração em meses de cada curso)
SELECT NomeC, (DuracaoC * 12)
FROM Curso
NomeC DuracaoC * 12
Enfermagem 48
Eng Mecânica 60
Inf Biomédica 48
Eng Elétrica 48
Turismo 36
6
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** 5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'
• Nomes dos cursos cuja mensalidade é inferior 
a 500 reais)
SELECT NomeC
FROM Curso
WHERE MensC < 500 NomeC
Enfermagem
Inf Biomédica
Turismo
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** 5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'
• Código e carga horária das disciplinas da 
área de Matemática, com carga horária 
maior ou igual a 5)
SELECT CodD, CargaD
FROM Disciplina
WHERE AreaD = 'Matemática' AND
CargaD >= 5
CodD CargaD
D5 5
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** 5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'
• O código e o nome de todos os cursos de 
engenharia)
SELECT CodC, NomeC
FROM Curso
WHERE NomeC LIKE 'Eng%'
CodC NomeC
C2 Eng Mecânica
C4 Eng Elétrica
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** 5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'
• As salas do segundo andar (nro fica na casa 
dos 200) onde serão ministradas aulas)
SELECT DISTINCT Sala
FROM Grade
WHERE TO_CHAR(Sala) LIKE '2_ _' Sala 
201
204
207
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** 5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'
• Código dos cursos cuja mensalidade está
entre 400 e 550 reais (inclusive))
SELECT CodC
FROM Curso
WHERE MensC BETWEEN 400 AND 550
CodC 
C1
C3
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** 5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'
• Nome das disciplinasque são da área de 
Computação ou de Humanas ou de Saúde)
SELECT NomeD
FROM Disciplina
WHERE AreaD IN ('Computação', 
'Humanas', 'Saúde')
NomeD
TLP1
Inglês
Ed Física
7
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** 5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'5'��������������'
• Nome das disciplinas que não pertencem a 
nenhuma área específica)
SELECT NomeD
FROM Disciplina
WHERE AreaD IS NULL
NomeD
Projeto Final
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** 5'���������'5'���������'5'���������'5'���������'5'���������'5'���������'5'���������'5'���������'
• Nome e duração em meses de cada curso)
SELECT NomeC AS Curso, 
(DuracaoC * 12) AS Duração_Meses
FROM Curso
Curso Duracao_Meses
Enfermagem 48
Eng Mecânica 60
Inf Bimédica 48
Eng Elétrica 48
Turismo 36
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** ��!����!�$%����������'��!����!�$%����������'��!����!�$%����������'��!����!�$%����������'��!����!�$%����������'��!����!�$%����������'��!����!�$%����������'��!����!�$%����������'
• Códigos dos cursos com seu nome e 
mensalidade concatenados)
SELECT CodC, 
NomeC || MensC || ' reais' AS Info_Curso
FROM Curso
CodC Info_Curso
C1 Enfermagem 400 reais
C2 Eng Mecânica 600 reais
C3 Inf Biomédica 450 reais
C4 Eng Elétrica 600 reais
C5 Turismo 350 reais
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** ����!�$%�������'����������!�$%�������'����������!�$%�������'����������!�$%�������'����������!�$%�������'����������!�$%�������'����������!�$%�������'����������!�$%�������'������
• Nomes dos cursos ordenados de forma 
ascendente)
SELECT NomeC
FROM Curso
ORDER BY NomeC ASC NomeC
Enfermagem
Eng Elétrica
Eng Mecânica
Inf Biomédica
Turismo
�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'
• ��!'���������'��������������'�)
��!���!���!���!�=���J��!�;�!���;����J!�'�;�'��:���;�
!��J�������;����J'����-��>
�������������������� =!��J�����;�!���;����J"����>
��?���
��?���
��?���
��?��� =���J���?;�!���;�����$%�;�!��J�������>
��������
��������
��������
��������=���J���?��;����J��!���;�/���'J���&>
�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'
B� �������'��:������'���!���!:���'�������������!���H
<� �������'��:������'���!���!:���'�������������!���
H;���� �'��:����!�����@���!����B444���<444
C� D���'��'��!�����$.�'�'�&������?���'����
���������!���H
K� 	��:�����,������=7HM����'��:����&����>���'�
��!���!:���'�'����-�'��!���'��������!���!:����<
H� �2��"����'���!���!:���'�����'%��'����-�'���'
8� �2��"����'���!���!:���'�����!%���I� �'����-�'���'
3� �������������;��� ������ �����&G����;���'�
��!���!:���'������I� �N������O�!��!���
7� ����;�����$%������������'����?���'�N	/����!"BO;�
N����,����D���&�O;�N���������:����O���N�!���P�:���O
8
D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����
CodC NomeC DuracaoC MensC
C1 Enfermagem 4 400
C2 Eng Mecânica 5 600
C3 Inf Biomédica 4 450
C4 Eng Elétrica 4 600
C5 Turismo 3 350
Curso
D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����
Disciplina
CodD NomeD CargaD AreaD PreReqD
D1 TLP1 2 Computação D2
D2 Cálculo1 4 Matemática null
D3 Inglês 2 Humanas null
D4 Ed Física 3 Saúde null
D5 G Analítica 5 Matemática D2
D6 Projeto Final 6 null D1
D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����
CodP NomeP CidadeP TituloP
P1 Renato Rib Preto Mestre
P2 Paulo Batatais Espec
P3 André Rib Preto Doutor
P4 Gil S Carlos Doutor
P5 Juliana S Carlos Pós Doc
Professor
D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����D�&���'��@�����
CodC CodD CodP Sala
C1 D6 P1 305
C2 D2 P2 305
C3 D2 P2 305
C4 D1 P5 201
C4 D3 P3 204
C5 D4 P3 204
C5 D4 P4 207
Grade
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** ��!$.�'��!$.�'��!$.�'��!$.�'��!$.�'��!$.�'��!$.�'��!$.�'
• Valor mínimo, máximo e médio das mensalidades 
dos cursos cuja duração é de 4 anos)
SELECT MIN(MensC), MAX(MensC), AVG(MensC)
FROM Curso
WHERE DuracaoC = 4
MIN(MensC) MAX(MensC) AVG(MensC)
400 600 483
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 �"������!��'�"������!��'�"������!��'�"������!��'�"������!��'�"������!��'�"������!��'�"������!��'
• Carga horária total de cada área)
SELECT AreaD, SUM(CargaD)
FROM Disciplina
GROUP BY AreaD
AreaD SUM(CargaD)
Computação 2
Matemática 9
Humanas 2
Saúde 3
Null 6
9
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 �"������!��'�"������!��'�"������!��'�"������!��'�"������!��'�"������!��'�"������!��'�"������!��'
• Salas que são utilizadas para mais de uma 
aula e as respectivas quantidades de aulas)
SELECT Sala, COUNT(*)
FROM Grade
GROUP BY Sala
HAVING COUNT(*) > 1 Sala COUNT(*)
305 3
204 2
�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'
• ��!'���������'��������������'�)
��!���!���!���!�=���J��!�;�!���;����J!�'�;�'��:���;�!��J�������;����J'����-��>
�������������������� =!��J�����;�!���;����J"����>
��?���
��?���
��?���
��?��� =���J���?;�!���;�����$%�;�!��J�������>
��������
��������
��������
��������=���J���?��;����J��!���;�/���'J���&>
B� ��������������!���'��:������������'�
<� ��������������!���'��:�����������������
C� ��������������!���'��:������'������'���?��� G����'��������
G�����������"������<444
K� D��������/���'����&��/���'������������?���
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 ��!$%���!$%���!$%���!$%���!$%���!$%���!$%���!$%�
• Todas as informações sobre a grade e as 
disciplinas do curso C4)
SELECT *
FROM Grade, Disciplina
WHERE Disciplina.CodD = Grade.CodD
AND CodC = 'C4' 
CodC CodD CodP Sala CodD NomeD CargaD AreaD
C4 D1 P5 201 D1 TLP1 2 Computação
C4 D3 P3 204 D3 Inglês 2 Humanas
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 ��!$%���!$%���!$%���!$%���!$%���!$%���!$%���!$%�
• Todas as informações sobre a grade e as 
disciplinas do curso C4)��=�5D(��	
�D�Q�>
SELECT *
FROM Grade INNER JOIN Disciplina
ON Disciplina.CodD = Grade.CodD
WHERE CodC = 'C4'
CodC CodD CodP Sala CodD NomeD CargaD AreaD
C4 D1 P5 201 D1 TLP1 2 Computação
C4 D3 P3 204 D3 Inglês 2 Humanas
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** ��!$%�����������!$%�����������!$%�����������!$%�����������!$%�����������!$%�����������!$%�����������!$%���������
• Todas as informações sobre a grade e as 
disciplinas do curso C4, sem repetição de 
colunas)
SELECT *
FROM Grade NATURAL JOIN Disciplina
ON Grade.CodD = Disciplina.CodD
WHERE CodC = 'C4'
CodC CodD CodP Sala NomeD CargaD AreaD
C4 D1 P5 201 TLP1 2 Computação
C4 D3 P3 204 Inglês 2 Humanas
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 ��!$%���!$%���!$%���!$%���!$%���!$%���!$%���!$%�
• Código, nome, carga horária, sala e curso das 
disciplinas)
SELECT Grade.CodD, NomeD, CargaD, Sala, CodC
FROM Disciplina, Grade
WHERE Disciplina.CodD = Grade.CodD
CodD NomeD CargaD Sala CodC
D1 TLP1 2 201 C4
D2 Cálculo1 4 305 C2
D2 Cálculo1 4 305 C3
D3 Inglês 2 204 C4
D4 Ed Física 3 204 C5
D4 Ed Física 3 207 C5
D6 Projeto Final 6 305 C1
disciplinas 
que estão 
na grade
10
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** ��!$%���@���!���!$%���@���!���!$%���@���!���!$%���@���!���!$%���@���!���!$%���@���!���!$%���@���!���!$%���@���!�
• Código, nome, carga horária, sala e curso de todas as 
disciplinas)SELECT Grade.CodD, NomeD, CargaD, Sala, CodC
FROM Disciplina LEFT OUTER JOIN Grade
ON Disciplina.CodD = Grade.CodD
CodD NomeD CargaD Sala CodC
D1 TLP1 2 201 C4
D2 Cálculo1 4 305 C2
D2 Cálculo1 4 305 C3
D3 Inglês 2 204 C4
D4 Ed Física 3 204 C5
D4 Ed Física 3 207 C5
D5 G Analítica 5 NULL NULL
D6 Projeto Final 6 305 C1
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 ��!$%���!$%���!$%���!$%���!$%���!$%���!$%���!$%�
• Nome das disciplinas e dos respectivos 
professores do curso C4)
SELECT NomeD, NomeP
FROM Disciplina, Grade, Professor
WHERE CodC = 'C4' AND
Disciplina.CodD = Grade.CodD AND
Grade.CoP = Professor.CodP
NomeD NomeP
TLP1 Juliana
Inglês André
	����D��	����D��	����D��	����D��	����D��	����D��	����D��	����D��******** ��������������������������������00000000��!$%���!$%���!$%���!$%���!$%���!$%���!$%���!$%�
• Nomes das disciplinas cujo pré-requisito é “Cálculo1”)
SELECT Disc1.NomeD
FROM Disciplina AS Disc1, Disciplina AS Disc2
WHERE Disc2.CodD = Disc1.PreReqD AND
Disc2.NomeD = “Cálculo1”
Disc1.NomeD
TLP1 
G Analítica
	����D��	����D��	����D��	����D��	����D��	����D��	����D��	����D��******** ��������������������������������00000000��!$%���!$%���!$%���!$%���!$%���!$%���!$%���!$%�
• Pares de professores que são da mesma cidade)
SELECT X.NomeP, Y.NomeP
FROM Professor AS X, Professor AS Y
WHERE X.CidadeP = Y.CidadeP AND
X.CodP <> Y.CodP
X.NomeP Y.NomeP
Renato André
André Renato
Gil Juliana
Juliana Gil
�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'
• ��!'���������'��������������'�)
��!���!���!���!�=���J��!�;�!���;����J!�'�;�'��:���;�
!��J�������;����J'����-��>
�������������������� =!��J�����;�!���;����J"����>
��?���
��?���
��?���
��?��� =���J���?;�!���;�����$%�;�!��J�������>
��������
��������
��������
��������=���J���?��;����J��!���;�/���'J���&>
�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'
B� ����'���'������'���!���'���'���'�����-�'�"���!��'
<� ����'���'���!���!:���'����������������� �������?���'�
����'�����-�'��2��"�'���'����?���'���/���'�
���&��/���';�'���!�����'����������$.�'�����
�@������� �B4/
C� ����'���'���!���!:���'����������������� �������?���'�
����'�����-�'������'����/���'����&��/���'
K� ����'��������'��'���!���!:���'�����'�����-�'������'�
���/���'����&��/���'
H� ����'���'���!���!:���'����������������� �������?���'�
��!���'���'���'�����-�'����?���'
8� ����'���'���!���!:���'���!���'���'���'�����-�'�
'����-�'���'
3� 
���'���������'�������''��� �����'���"���!��
11
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 	�&��!'����	�&��!'����	�&��!'����	�&��!'����	�&��!'����	�&��!'����	�&��!'����	�&��!'����
• Nome e área das disciplinas do curso C4)
SELECT NomeD, AreaD
FROM Disciplina
WHERE CodD IN 
(SELECT CodD
FROM Grade
WHERE CodC = 'C4')
CodD 
D1
D3
NomeD AreaD
TLP1 Computação
Inglês Humanas
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 	�&��!'����	�&��!'����	�&��!'����	�&��!'����	�&��!'����	�&��!'����	�&��!'����	�&��!'����
• Nome das disciplinas que são ministradas 
simultaneamente pelos professores P3 e P4:
SELECT NomeD
FROM Disciplina
WHERE CodD IN
(SELECT CodD
FROM Grade
WHERE CodP = 'P3')
AND CodD IN
(SELECT CodD
FROM Grade
WHERE CodP = 'P4')
NomeD
Ed Física
CodD 
D3
D4
CodD 
D4
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 �@�'�'�@�'�'�@�'�'�@�'�'�@�'�'�@�'�'�@�'�'�@�'�'
• Nomes dos professores que ministram 
alguma disciplina)
SELECT NomeP
FROM Professor
WHERE EXISTS
(SELECT *
FROM Grade
WHERE Grade.CodP = Professor.CodP)
NomeP 
Renato
Paulo
André
Gil
Juliana
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 �@�'�'�@�'�'�@�'�'�@�'�'�@�'�'�@�'�'�@�'�'�@�'�'
• Nomes das disciplinas que não fazem parte 
da grade)
SELECT NomeD
FROM Disciplina
WHERE NOT EXISTS
(SELECT *
FROM Grade
WHERE Grade.CodD = Disciplina.CodD)
NomeD 
G Analítica
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 ������������������������
• Nomes dos cursos que possuam duração 
maior que todos os cursos de mensalidade 
inferior a 500 reais)
SELECT NomeC
FROM Curso
WHERE DuracaoC > ALL
(SELECT DuracaoC
FROM Curso
WHERE MensC < 500)
Nomec
Eng Mecânica
DuracaoC
4
4
3
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 ��R��R��R��R��R��R��R��R
• Nomes dos cursos que possuam duração 
maior que qualquer um dos cursos de 
mensalidade inferior a 500 reais)
SELECT NomeC
FROM Curso
WHERE DuracaoC > ANY
(SELECT DuracaoC
FROM Curso
WHERE MensC < 500)
Nomec
Enfermagem
Eng Mecânica
Inf Biomédica
Eng Elétrica
DuracaoC
4
4
3
12
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 5!��!5!��!5!��!5!��!5!��!5!��!5!��!5!��!
• Nome dos professores que são de Ribeirão 
Preto ou que são doutores)
SELECT NomeP
FROM Professor
WHERE CidadeP LIKE 'Rib%Preto'
UNION
SELECT NomeP
FROM Professor
WHERE TituloP = 'Doutor'
NomeP 
Renato
André
Gil
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�******** 
!���'���
!���'���
!���'���
!���'���
!���'���
!���'���
!���'���
!���'���
• Nome dos professores que são de Ribeirão 
Preto e que são doutores)
SELECT NomeP
FROM Professor
WHERE CidadeP LIKE 'Rib%Preto'
INTERSECT
SELECT NomeP
FROM Professor
WHERE TituloP = 'Doutor'
NomeP 
André
	����D�	����D�	����D�	����D�	����D�	����D�	����D�	����D�00000000 #�!�'#�!�'#�!�'#�!�'#�!�'#�!�'#�!�'#�!�'
• Nome dos professores que são de Ribeirão 
Preto e que não são doutores)
SELECT NomeP
FROM Professor
WHERE CidadeP LIKE 'Rib%Preto'
MINUS
SELECT NomeP
FROM Professor
WHERE TituloP = 'Doutor'
NomeP 
Renato
�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'
• ��!'���������'��������������'�)
��!���!���!���!�=���J��!�;�!���;����J!�'�;�'��:���;�
!��J�������;����J'����-��>
�������������������� =!��J�����;�!���;����J"����>
��?���
��?���
��?���
��?��� =���J���?;�!���;�����$%�;�!��J�������>
��������
��������
��������
��������=���J���?��;����J��!���;�/���'J���&>
�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'�@���,���'
B� ��'������ �!������'��:������'���!���?��
'��:����G�������������� G����'�����������
�����'��
<� �2��"�'���'����?���'��!������&��/���� �
?�!��'��'���!�H;�8���BC�
C� ����'���'���!�����!%��'%��"���!��'�
K� �2��"�'���'����?���'���?������$%������
��!�������������$%���������'��'�
���?���'����������H�
H� �2��"�'���'���!�����'%��'����-�'���'���
'%��"���!��'����������
��!"��"�� ������!�������������'�=���>��!"��"�� ������!�������������'�=���>��!"��"�� ������!�������������'�=���>��!"��"�� ������!�������������'�=���>��!"��"�� ������!�������������'�=���>��!"��"�� ������!�������������'�=���>��!"��"�� ������!�������������'�=���>��!"��"�� ������!�������������'�=���>
• ����!��'��������!�'���$%��������''�)
* +��!�
* (�-�S�
• 
��-��G"��'������������'�:���;�������''��
���� �&�!����������';�����!���'������
������!��'������$.�'�'�&�������'��)�
* 	����D
* 
�	�(D
* 5
��D�
* ��D�(
* ���
13
+(��D+(��D+(��D+(��D+(��D+(��D+(��D+(��D
• Sintaxe:
GRANT privilégio(s)
ON objeto
TO usuário(s)
• �@�����)� Liberar o acesso ao usuário Joao para 
realizar consultas à tabela Disciplina)
GRANT SELECT
ON Disciplina
TO Joao
+(��D+(��D+(��D+(��D+(��D+(��D+(��D+(��D
• 
�������� �� ����'� �'� �'�:���'� ��������� ��������$.�'� ��'�
����!�'�������
��D�����
�����&����
����''��)
GRANT UPDATE (CidadeP, TituloP)
ON Professor
TO PUBLIC
• 
�������� ����'� �'� ���-��G"��'� !�� ��&���� +����� ��� �'�:����
����;��������!������&G� ���������'�����''����&������''�'�
���-��G"��'��������'��'�:���')• GRANT ALL
ON Grade
TO Joao
WITH GRANT OPTION
(�P�T�(�P�T�(�P�T�(�P�T�(�P�T�(�P�T�(�P�T�(�P�T�
• Sintaxe:
REVOKE privilégio(s)
ON tabela ou visão
FROM usuário(s)
• �@�����)�@�����)�@�����)�@�����) (�����������'��'����-��G"��'�!����&����
+�����������'��'�:���'�������
����)
REVOKE ALL
ON Grade
FROM Joao, Paulo
P
	U�	P
	U�	P
	U�	P
	U�	P
	U�	P
	U�	P
	U�	P
	U�	
• Uma visão é uma estrutura criada a partir de uma consulta 
sobre tabelas existentes no banco. Essa estrutura tem o 
mesmo formato de um tabela, porém ela não armazena 
dados de forma persistente.
• Após a sua criação, as consultas à visão podem ser 
realizadas de forma idêntica àquelas realizadas sobre 
tabelas comuns do banco.
• As visões podem ser muito úteis em várias situações:
- substituição de consultas longas e complexas por 
outras mais simples, obtendo-se o mesmo resultado;
- utilização de funções de agregação na definição de 
condições de pesquisa;
- delimitação prática do acesso dos usuários a um 
conjunto específico dos dados contidos nas tabelas do 
banco, tornando os outros inacessíveis e invisíveis;
�(
�VW�����P
	U�	�(
�VW�����P
	U�	�(
�VW�����P
	U�	�(
�VW�����P
	U�	�(
�VW�����P
	U�	�(
�VW�����P
	U�	�(
�VW�����P
	U�	�(
�VW�����P
	U�	
• Sintaxe:
CREATE VIEW nome_visão [(nome_coluna, ...)]
AS SELECT ...
– O comando SELECT de criação da visão não pode conter 
a cláusula ORDER BY.
• �@������B�)��@������B�)��@������B�)��@������B�)�P�'%����������!�'���!'������� ��'�
����'���'����'�';�'�� ���'������'�-�����'���'�
��'�����-�'���!'�������'
CREATE VIEW Vis_Curso-_Aluno (Código, 
Curso, Duração)
AS SELECT CodC, NomeC, DuracaoC FROM 
Curso
�(
�VW�����P
	U�	�(
�VW�����P
	U�	�(
�VW�����P
	U�	�(
�VW�����P
	U�	�(
�VW�����P
	U�	�(
�VW�����P
	U�	�(
�VW�����P
	U�	�(
�VW�����P
	U�	
• �@������<�)��@������<�)��@������<�)��@������<�)� P�'%���������'�����:������!'��������
"�����������������":-�������������!��
CREATE VIEW Vis_Grade_Secr (Cod_Curso, 
Curso, Cod_Disciplina, Disciplina, Cod_Professor, 
Professor, Sala)
AS SELECT CodC, NomeC, CodD, NomeD, 
CodP, NomeP, Sala
FROM Grade, Curso, Disciplina, Professor
WHERE Grade.CodC = Curso.CodC AND
Grade.CodD = Disciplina.CodD AND
Grade.CodP = Professor.CodP
14
�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	
• Os dados do banco podem ser atualizados através da 
visão, ou seja, uma vez executado um comando INSERT, 
UPDATE ou DELETE sobre a visão, os dados da tabela 
que originou a mesma também serão atualizados. 
• Porém essas operações somente poderão ser realizadas 
se a visão atender aos seguintes requisitos:
- não possuir junções, ou seja, ter sido criada sobre uma 
única tabela;
- não possuir colunas derivadas de funções de agregação;
- não possuir a cláusula DISTINCT na sua consulta;
- não possuir as cláusulas GROUP BY ou HAVING na sua 
consulta.
�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	�D5��
L�VU�	��D(�PX	���	�P
	U�	
• Caso contrário, a visão será "read-only" e as 
atualizações deverão ser realizadas sobre as 
tabelas originais. 
• A visão do exemplo 1 poderá ser usada para 
atualizar a tabela Curso, desde que o usuário 
possua privilégios para isso. Porém, a visão do 
exemplo 2 é "read-only", pois é formada a 
partir de uma junção.
(�#�VW�����P
	U�	(�#�VW�����P
	U�	(�#�VW�����P
	U�	(�#�VW�����P
	U�	(�#�VW�����P
	U�	(�#�VW�����P
	U�	(�#�VW�����P
	U�	(�#�VW�����P
	U�	
• Sintaxe:
DROP VIEW nome_visão
• �@�����)��@�����)��@�����)��@�����)� (���-�����-�'%��
P�'J���'�J���!�
DROP VIEW Vis_Curso_Aluno
�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	
• 1) Crie a tabela Aluno, contendo dados pessoais dos alunos e 
o curso onde estão inscritos.
• 2) Crie a tabela Matricula, relacionando cada aluno com as 
disciplinas que o mesmo já cursou ou está cursando.
• 3) Armazene, altere e remova dados das tabelas criadas.
• 4) Altere a tabela Disciplina, acrescentando uma coluna para 
armazenar o código da disciplina que é pré-requisito da 
disciplina corrente (suponha que uma disciplina possui no 
máximo um pré-requisito).
• 5) Crie um índice para a coluna nome da tabela Aluno.
• 6) Crie uma visão para a consulta dos alunos ao seu histórico.
• 7) Crie privilégios para o usuário Sílvio poder consultar e inserir 
dados na tabela Matricula.
• 8) Elimine todos os privilégios do usuário Sílvio.
�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	
9) Crie as seguintes consultas:
• 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.
• b) Nome das disciplinas com carga horária menor que 5 e que 
sejam ministradas por professores doutores.
• 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 o Paulo, o Joaquim ou a Juliana.
• d) Nome dos cursos e das disciplinas oferecidas em cada 
curso.
• e) Nomes dos professores que não ministram nenhuma 
disciplina.
• f) Nomes das disciplinas e o nome dos respectivos pré-
requisitos. Considere a tabela Disciplina resultante do 
exercício 4.
�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	�Q�(�F�
�	�
(�
�	D�	
• g) Nome das disciplinas que possuam carga horária maior 
que todas as disciplinas da área de Matemática.
• h) Código de cada disciplina, com a quantidade de cursos em 
que a mesma é oferecida.
• i) Carga horária média das áreas com carga horária média 
maior ou igual a 3.
• j) Nome das disciplinas que não têm pré-requisito e que não 
são pré-requisito.
• k) Nome dos cursos que têm a mesma duração do curso de 
Engenharia Elétrica.
• l) Nome dos cursos que têm a mesma duração do curso de 
Engenharia Elétirca e que têm mensalidade maior que a sua.
• m) Nome dos cursos que têm mensalidade maior que a 
média de todos os cursos.

Continue navegando

Outros materiais