Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 7.91 KB | None | 0 0
  1. /*
  2.  * AULA 01
  3.  * CRIAÇÃO DAS TABELAS
  4.  */
  5. CREATE TABLE TITULO
  6. (
  7.     COD_TIT INT NOT NULL PRIMARY KEY,
  8.     DESCR VARCHAR(50) NOT NULL
  9. );
  10.  
  11. CREATE TABLE LIVRO
  12. (
  13.     COD_LIVRO INT NOT NULL PRIMARY KEY,
  14.     COD_TIT INT NOT NULL REFERENCES TITULO(COD_TIT),
  15.     LOCALIZ VARCHAR(10)
  16. );
  17.  
  18. CREATE TABLE LEITOR
  19. (
  20.     COD_LEITOR INT NOT NULL PRIMARY KEY,
  21.     NOME VARCHAR(30) NOT NULL,
  22.     DT_NASC DATE NOT NULL
  23. );
  24.  
  25. CREATE TABLE RESERVA
  26. (
  27.     COD_RES INT NOT NULL PRIMARY KEY,
  28.     COD_LEITOR INT NOT NULL REFERENCES LEITOR(COD_LEITOR),
  29.     COD_TIT INT NOT NULL REFERENCES TITULO(COD_TIT),
  30.     DT_RES DATE NOT NULL,
  31.     STATUS VARCHAR(1) NOT NULL
  32. );
  33.  
  34. CREATE TABLE FUNCIONARIO
  35. (
  36.     COD_FUNC INT NOT NULL PRIMARY KEY,
  37.     NOME VARCHAR(30) NOT NULL,
  38.     DT_NASC DATE NOT NULL  
  39. );
  40.  
  41. CREATE TABLE EMPRESTIMO
  42. (
  43.     COD_EMP INT NOT NULL PRIMARY KEY,
  44.     COD_LEITOR INT NOT NULL REFERENCES LEITOR(COD_LEITOR),
  45.     COD_FUNC INT NOT NULL REFERENCES FUNCIONARIO(COD_FUNC),
  46.     COD_LIVRO INT NOT NULL REFERENCES LIVRO(COD_LIVRO),
  47.     DT_EMP DATE NOT NULL,
  48.     DT_DEV DATE
  49. );
  50.  
  51. /*
  52.  *  POPULAÇÃO DO BANCO DE DADOS
  53.  */
  54.  
  55. INSERT INTO TITULO VALUES (465749, 'LIVRO DE DANTE ALIGHIERI QUE RETRATA O INFERNO');
  56. INSERT INTO TITULO VALUES (666666, 'BIBLIA');
  57. INSERT INTO TITULO VALUES (3487512, 'ENSINA COMO VENCER NA VIDA MESMO SENDO UM BOSTA');
  58.  
  59. INSERT INTO LIVRO VALUES (1, 666666, 'BBS10');
  60. INSERT INTO LIVRO VALUES (2, 465749, 'BBS11');
  61. INSERT INTO LIVRO VALUES (3, 3487512, 'EEFS60');
  62.  
  63. INSERT INTO LEITOR VALUES (40, 'ALBERTO MAURICIO SALES', '16-08-1985');
  64. INSERT INTO LEITOR VALUES (41, 'MARA FILOMENA PEREIRA', '01-01-1997');
  65. INSERT INTO LEITOR VALUES (42, 'HERCULES DA SILVA', '08-08-1966');
  66.  
  67. INSERT INTO FUNCIONARIO VALUES (90, 'TULIO ABRANTES FACUNDES', '04-12-2000');
  68. INSERT INTO FUNCIONARIO VALUES (91, 'ANDRESSA BORGES COIMBRA', '14-11-1999');
  69. INSERT INTO FUNCIONARIO VALUES (92, 'JULIA ALMEIDA PEREIRA', '20-05-1977');
  70.  
  71. INSERT INTO RESERVA VALUES (1, 40, 666666, '20-01-2017', 'E');
  72.  
  73. INSERT INTO EMPRESTIMO VALUES (1, 42, 91, 1, '05-05-2018', NULL);
  74.  
  75. -- AULA 02
  76. /*
  77.  * OBTER:
  78.  * 1 - CODIGO E NOME DOS LEITORES QUE NASCERAM EM ABRIL DE 1990
  79.  * 2 - DATA DO EMPRESTIMO REALIZADA PELO FUNCIONARIO COD_FUNC 2 OU PELOS LEITORES DE CODIGO MAIOR QUE 5
  80.  * 3 - TODAS AS INFORMAÇÕES DOS LEITORES CUJA TERCEIRA LETRA DO NOME E A LETRA 'I'
  81.  * 4 - CODIGO DOS LIVROS DE TITULO 2 OU 3 OU 4 OU 5 OU 6 OU 7 OU 8 OU 9 OU 10
  82.  * 5 - CODIGO DOS LIVROS DE TITULO 2 OU 5 OU 10 OU 22 OU 41 OU 45
  83.  */
  84.  
  85. SELECT COD_LEITOR, NOME FROM LEITOR WHERE DT_NASC BETWEEN '1990-04-01' AND '1990-04-30'; -- 1
  86. SELECT DT_EMP FROM EMPRESTIMO WHERE COD_FUNC = 2 OR COD_LEITOR > 5; -- 2
  87. SELECT * FROM LEITOR WHERE NOME ILIKE '__I%'; -- 3
  88. SELECT COD_LIVRO FROM LIVRO WHERE COD_TIT BETWEEN 2 AND 10; -- 4
  89. SELECT COD_LIVRO FROM LIVRO WHERE COD_TIT IN (2, 5, 10, 22, 41, 45); -- 5
  90.  
  91.  
  92. -- AULA 03 (SUBQUERIES)
  93.  
  94. SELECT COD_LIVRO FROM LIVRO WHERE COD_TIT = (SELECT COD_TIT FROM TITULO WHERE DESCR = 'BIBLIA');
  95. SELECT NOME FROM LEITOR WHERE COD_LEITOR IN (SELECT COD_LEITOR FROM EMPRESTIMO WHERE DT_EMP = '2018-04-04');
  96.  
  97. -- OBTER O NOME DOS FUNCIONARIOS QUE ATENDERAM O JOAO
  98. SELECT NOME FROM FUNCIONARIO WHERE COD_FUNC IN (SELECT COD_FUNC FROM EMPRESTIMO WHERE COD_LEITOR IN (SELECT COD_LEITOR FROM LEITOR WHERE NOME = 'JOAO'));
  99. -- OBTER OS NOMES DOS TITULOS QUE A MARIA TOMOU EMPRESTADO
  100. SELECT DESCR FROM TITULO WHERE COD_TIT IN (SELECT COD_TIT FROM LIVRO WHERE COD_LIVRO IN (SELECT COD_LIVRO FROM EMPRESTIMO WHERE COD_LEITOR IN (SELECT COD_LEITOR FROM LEITOR WHERE NOME = 'MARIA')));
  101. -- OBTER OS NOMES DOS TITULOS EMPRESTADOS NO ANO DE 2018 OU PELO FUNCIONARIO JOAO OU PELO LEITOR JOSE
  102. SELECT DESCR FROM TITULO WHERE COD_TIT IN (SELECT COD_TIT FROM LIVRO WHERE COD_LIVRO IN (SELECT COD_LIVRO FROM EMPRESTIMO WHERE DT_EMP BETWEEN '2018-01-01' AND '2018-12-31' OR COD_FUNC IN (SELECT COD_FUNC FROM FUNCIONARIO WHERE NOME = 'JOAO') OR COD_LEITOR IN (SELECT COD_LEITOR FROM LEITOR WHERE NOME = 'JOSE')));
  103. -- OBTER O NOME DOS FUNCIONARIOS QUE EMPRESTARAM LIVROS PARA O JOAO NO ANO DE 2018
  104. SELECT NOME FROM FUNCIONARIO WHERE COD_FUNC IN (SELECT COD_FUNC FROM EMPRESTIMO WHERE COD_LIVRO IN (SELECT COD_LIVRO FROM EMPRESTIMO WHERE COD_LEITOR IN (SELECT COD_LEITOR FROM LEITOR WHERE NOME = 'JOAO') AND DT_EMP BETWEEN '2018-01-01' AND '2018-12-31'));
  105.  
  106.  
  107. -- AULA 04 (FUNÇOES AGREGADAS / ALTERANDO A INSTÂNCIA DO BANCO DE DADOS)
  108.  
  109. /*
  110.  * MIN()          INSERT
  111.  * MAX()          DELETE
  112.  * AVG()          UPDATE
  113.  * SUM()
  114.  * COUNT()
  115.  */
  116.  
  117. /* DATA DE NASCIMENTO DO LEITOR MAIS JOVEM */
  118. SELECT MAX(DT_NASC) FROM LEITOR;
  119.  
  120. /* O NOME DO LEITOR MAIS JOVEM */
  121. SELECT NOME FROM LEITOR WHERE DT_NASC = (SELECT MAX(DT_NASC) FROM LEITOR);
  122.  
  123. /* O NOME DO LEITOR MAIS VELHO QUE NASCEU NO ANO DE XXXX */
  124. SELECT NOME FROM LEITOR WHERE DT_NASC = (SELECT MIN(DT_NASC) FROM LEITOR WHERE DT_NASC BETWEEN '1997-01-01' AND '1997-12-31');
  125.  
  126. /* OBTER O NOME DO FUNCIONARIO MAIS JOVEM QUE ATENDEU O LEITOR MAIS VELHO */
  127. /* ta errado SELECT NOME FROM FUNCIONARIO WHERE COD_FUNC IN (SELECT COD_FUNC FROM FUNCIONARIO WHERE DT_NASC IN (SELECT MAX(DT_NASC) FROM FUNCIONARIO)) AND COD_FUNC IN (SELECT COD_FUNC FROM EMPRESTIMO WHERE COD_LEITOR = (SELECT COD_LEITOR FROM LEITOR WHERE DT_NASC = (SELECT MIN(DT_NASC) FROM LEITOR)));*/
  128. SELECT NOME FROM FUNCIONARIO WHERE DT_NASC IN (SELECT MAX(DT_NASC) FROM FUNCIONARIO WHERE COD_FUNC IN (SELECT COD_FUNC FROM EMPRESTIMO WHERE COD_LEITOR IN (SELECT COD_LEITOR FROM LEITOR WHERE DT_NASC IN (SELECT MIN(DT_NASC) FROM LEITOR))));
  129.  
  130. /* OBTER A QUANTIDADE DE FUNCIONARIOS QUE NAO INFORMARAM O SEU LOCAL DE NASCIMENTO */
  131. SELECT COUNT(COD_FUNC) FROM FUNCIONARIO WHERE COD_FUNC IN (SELECT COD_FUNC FROM FUNCIONARIO WHERE LOCAL_NASC IS NULL);
  132. SELECT COUNT(*) - COUNT(LOCAL_NASC) FROM FUNCIONARIO;
  133.  
  134. ALTER TABLE FUNCIONARIO ADD COLUMN LOCAL_NASC VARCHAR(40) NULL;
  135.  
  136. SELECT * FROM FUNCIONARIO ORDER BY COD_FUNC;
  137.  
  138. UPDATE FUNCIONARIO SET LOCAL_NASC = 'GUARULHOS' WHERE COD_FUNC = 92;
  139.  
  140. -- AULA 05 (PRODUTO CARTESIANO)
  141.  
  142. /* CODIGO DOS LIVROS DE TITULO SBD */
  143. SELECT COD_LIVRO FROM LIVRO WHERE COD_TIT IN (SELECT COD_TIT FROM TITULO WHERE DESCR = 'SBD');
  144.  
  145. SELECT * FROM LIVRO L, TITULO T WHERE L.COD_TIT = T.COD_TIT;
  146.  
  147. -- OBTER O NOME DOS FUNCIONARIOS QUE ATENDERAM O JOAO USANDO PRODUTO CARTESIANO
  148. SELECT F.NOME FROM FUNCIONARIO F, EMPRESTIMO E, LEITOR L WHERE F.COD_FUNC = E.COD_FUNC AND E.COD_LEITOR = L.COD_LEITOR AND L.NOME = 'JOAO';
  149.  
  150. -- NOME DOS LEITOR QUE NASCERAM NO MESMO DIA QUE O 'JOAO'
  151. SELECT L2.NOME FROM LEITOR L1, LEITOR L2 WHERE L1.DT_NASC = L2.DT_NASC AND L1.NOME = 'JOAO' AND L2.NOME <> 'JOAO';
  152. SELECT NOME FROM LEITOR WHERE DT_NASC IN (SELECT DT_NASC FROM LEITOR WHERE NOME = 'JOAO') AND NOME <> 'JOAO';
  153.  
  154. -- OBTER O NOME DOS FUNCIONARIOS QUE ATENDERAM O JOAO
  155. SELECT F.NOME FROM FUNCIONARIO F, EMPRESTIMO E, LEITOR L WHERE F.COD_FUNC = E.COD_FUNC AND E.COD_LEITOR = L.COD_LEITOR AND L.NOME = 'JOAO';
  156. -- OBTER OS NOMES DOS TITULOS QUE A MARIA TOMOU EMPRESTADO
  157. SELECT T.DESCR FROM TITULO T, EMPRESTIMO E, LEITOR L, LIVRO LIV WHERE LIV.COD_TIT = T.COD_TIT AND E.COD_LEITOR = L.COD_LEITOR AND E.COD_LIVRO = LIV.COD_LIVRO AND L.NOME = 'MARIA';
  158. -- OBTER OS NOMES DOS TITULOS EMPRESTADOS NO ANO DE 2018 OU PELO FUNCIONARIO JOAO OU PELO LEITOR JOSE
  159. SELECT T.DESCR FROM EMPRESTIMO E, LIVRO LIV, LEITOR L, FUNCIONARIO F, TITULO T WHERE (E.COD_FUNC = F.COD_FUNC AND E.COD_LEITOR = L.COD_LEITOR AND E.COD_LIVRO = LIV.COD_LIVRO AND LIV.COD_TIT = T.COD_TIT) AND (F.NOME = 'JOAO' OR L.NOME = 'JOSE');
  160. -- OBTER O NOME DOS FUNCIONARIOS QUE EMPRESTARAM LIVROS PARA O JOAO NO ANO DE 2018
  161. SELECT F.NOME FROM EMPRESTIMO E, LEITOR L, FUNCIONARIO F WHERE (E.COD_LEITOR = L.COD_LEITOR AND F.COD_FUNC = E.COD_FUNC) AND DT_EMP BETWEEN '2018-01-01' AND '2018-12-31' AND L.NOME = 'JOAO';
  162.  
  163. SELECT COD_LIVRO FROM LIVRO L JOIN TITULO T ON L.COD_TIT = T.COD_TIT WHERE T.DESCR = 'SBD';
  164.  
  165. -- O NOME DOS FUNCIONARIOS QUE ATENDERAM AO JOAO (USANDO INNER JOIN)
  166. SELECT F.NOME FROM FUNCIONARIO F JOIN EMPRESTIMO E ON E.COD_FUNC = F.COD_FUNC JOIN LEITOR L ON E.COD_LEITOR = L.COD_LEITOR WHERE L.NOME = 'JOAO';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement