Baixe o app para aproveitar ainda mais
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.
Compartilhar