Advertisement
sombriks

lista 3 de bd | 2015-04-10

Apr 10th, 2015
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 8.66 KB | None | 0 0
  1. -- carga do banco da lista 3
  2. CREATE TABLE pessoas(
  3.     cpf INTEGER(11) PRIMARY KEY,
  4.     nome VARCHAR(255),
  5.     nascimento DATE
  6. );
  7.  
  8. CREATE TABLE motoristas(
  9.     habilitacao INTEGER(11) PRIMARY KEY,
  10.     cpf INTEGER(11) NOT NULL,
  11.     data_emissao DATE,
  12.     categoria  VARCHAR(3) DEFAULT 'B',
  13.     CHECK(categoria IN ('A','AB','ACC','B','C','D','E')),
  14.     FOREIGN KEY (cpf) REFERENCES pessoas(cpf)
  15. );
  16.  
  17. CREATE TABLE infracoes(
  18.     codinfracao INTEGER(11) PRIMARY KEY,
  19.     descricao VARCHAR(255),
  20.     valor DECIMAL(10,2),
  21.     pontos INTEGER(2),
  22.     gravidade VARCHAR(10) DEFAULT 'LEVE',
  23.     CHECK (gravidade IN ('LEVE','MÉDIA','GRAVE','GRAVÍSSIMA'))
  24. );
  25.  
  26. CREATE TABLE multas(
  27.     placa VARCHAR(7),
  28.     habilitacao INTEGER(11),
  29.     data_multa datetime,
  30.     LOCAL VARCHAR(255),
  31.     codinfracao INTEGER(11),
  32.     PRIMARY KEY (placa,data_multa,codinfracao),
  33.     FOREIGN KEY (habilitacao) REFERENCES motoristas(habilitacao)
  34. );
  35.  
  36. ALTER TABLE pessoas ADD COLUMN endereco VARCHAR(255);
  37. CREATE UNIQUE INDEX motoristas_cpf ON motoristas(cpf);
  38. ALTER TABLE pessoas DROP COLUMN nascimento;
  39. ALTER TABLE motoristas CHANGE data_emissao emissao DATE;
  40.  
  41. INSERT INTO infracoes(codinfracao,pontos,gravidade) VALUES (1,3,'LEVE');
  42. INSERT INTO infracoes(codinfracao,pontos,gravidade) VALUES (2,7,'MÉDIA');
  43. INSERT INTO infracoes(codinfracao,pontos,gravidade) VALUES (3,11,'GRAVE');
  44. INSERT INTO infracoes(codinfracao,pontos,gravidade) VALUES (4,20,'GRAVÍSSIMA');
  45.  
  46. INSERT INTO pessoas(cpf,nome) VALUES (1,'Rui');
  47. INSERT INTO pessoas(cpf,nome) VALUES (2,'Rô');
  48. INSERT INTO pessoas(cpf,nome) VALUES (3,'Seu Silva');
  49. INSERT INTO pessoas(cpf,nome) VALUES (4,'Lia');
  50. INSERT INTO pessoas(cpf,nome) VALUES (4,'João');
  51. INSERT INTO pessoas(cpf,nome) VALUES (5,'Maria');
  52. INSERT INTO pessoas(cpf,nome) VALUES (6,'Leo');
  53. INSERT INTO pessoas(cpf,nome) VALUES (7,'Brena');
  54. INSERT INTO pessoas(cpf,nome) VALUES (8,'Xico');
  55. INSERT INTO pessoas(cpf,nome) VALUES (9,'Carlos');
  56. INSERT INTO pessoas(cpf,nome) VALUES (10,'Carol');
  57. INSERT INTO pessoas(cpf,nome) VALUES (11,'Juca');
  58.  
  59. INSERT INTO motoristas (habilitacao,cpf,categoria) VALUES (1,1,'B');
  60. INSERT INTO motoristas (habilitacao,cpf,categoria) VALUES (2,2,'C');
  61. INSERT INTO motoristas (habilitacao,cpf,categoria) VALUES (3,3,'D');
  62. INSERT INTO motoristas (habilitacao,cpf,categoria) VALUES (4,4,'E');
  63. INSERT INTO motoristas (habilitacao,cpf,categoria) VALUES (5,5,'AB');
  64. INSERT INTO motoristas (habilitacao,cpf,categoria) VALUES (6,6,'A');
  65. INSERT INTO motoristas (habilitacao,cpf,categoria) VALUES (7,7,'ACC');
  66. INSERT INTO motoristas (habilitacao,cpf,categoria) VALUES (9,9,'B');
  67. INSERT INTO motoristas (habilitacao,cpf,categoria) VALUES (10,10,'C');
  68. INSERT INTO motoristas (habilitacao,cpf,categoria) VALUES (11,11,'B');
  69.  
  70. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (2,1,'AAA0001','2013-02-02 12:12:12');
  71. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (3,1,'AAA0001','2014-02-02 12:12:12');
  72. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (4,1,'AAA0001','2015-02-02 12:12:12');
  73. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,2,'AAA0002','2012-02-02 12:12:12');
  74. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (3,2,'AAA0002','2014-02-02 12:12:12');
  75. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (4,2,'AAA0002','2015-02-02 12:12:12');
  76. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,3,'AAA0003','2012-02-02 12:12:12');
  77. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (2,3,'AAA0003','2013-02-02 12:12:12');
  78. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (3,3,'AAA0003','2014-02-02 12:12:12');
  79. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (4,3,'AAA0003','2015-02-02 12:12:12');
  80. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,4,'AAA0004','2012-02-02 12:12:12');
  81. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (2,4,'AAA0004','2013-02-02 12:12:12');
  82. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (3,4,'AAA0004','2014-02-02 12:12:12');
  83. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (4,4,'AAA0004','2015-02-02 12:12:12');
  84. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,5,'AAA0005','2012-02-02 12:12:12');
  85.  
  86. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (2,5,'AAA0005','2012-02-02 12:12:12');
  87.  
  88. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (3,5,'AAA0005','2014-02-02 12:12:12');
  89. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (4,5,'AAA0005','2015-02-02 12:12:12');
  90. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,6,'AAA0006','2012-02-02 12:12:12');
  91.  
  92. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (2,6,'AAA0006','2015-02-02 12:12:12');
  93.  
  94. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (3,6,'AAA0006','2014-02-02 12:12:12');
  95. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (4,6,'AAA0006','2015-02-02 12:12:12');
  96. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,7,'AAA0007','2012-02-02 12:12:12');
  97. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (2,7,'AAA0007','2013-02-02 12:12:12');
  98. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (3,7,'AAA0007','2014-02-02 12:12:12');
  99. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (4,7,'AAA0007','2015-02-02 12:12:12');
  100. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,9,'AAA0009','2012-02-02 12:12:12');
  101. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (2,9,'AAA0009','2013-02-02 12:12:12');
  102. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (3,9,'AAA0009','2014-02-02 12:12:12');
  103. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (4,9,'AAA0009','2015-02-02 12:12:12');
  104. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,10,'AAA0010','2012-02-02 12:12:12');
  105. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (2,10,'AAA0010','2013-02-02 12:12:12');
  106.  
  107. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (4,10,'AAA0010','2015-02-02 12:12:12');
  108.  
  109. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,1,'AAA0001','2015-03-03 13:13:13');
  110. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,2,'AAA0002','2015-03-03 13:13:13');
  111. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,3,'AAA0003','2015-03-03 13:13:13');
  112. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,4,'AAA0004','2015-03-03 13:13:13');
  113. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,5,'AAA0005','2015-03-03 13:13:13');
  114. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,6,'AAA0006','2015-03-03 13:13:13');
  115. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,7,'AAA0007','2015-03-03 13:13:13');
  116. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,9,'AAA0009','2015-03-03 13:13:13');
  117. INSERT INTO multas(codinfracao,habilitacao,placa,data_multa) VALUES (1,10,'AAA0010','2015-03-03 13:13:13');
  118.  
  119.  
  120. -- 3)
  121. -- insert into pessoas (cpf,nome) values(1,'Rui');
  122. -- delete from pessoas where nome like '%R?';
  123. -- update infracoes set pontos = 1 where gravidade = 'LEVE';
  124.  
  125. -- 4.a)
  126. SELECT
  127.     nome,endereco
  128. FROM
  129.     pessoas
  130. WHERE
  131.     nome LIKE '%Silva%';
  132.  
  133. -- 4.b)
  134. SELECT
  135.     nome, cpf
  136. FROM
  137.     pessoas
  138. WHERE
  139.     cpf IN (SELECT
  140.         cpf
  141.     FROM
  142.         motoristas
  143.     WHERE
  144.         categoria = 'B')
  145. ORDER BY nome;
  146.  
  147. -- 4.c)
  148. SELECT
  149.     nome,habilitacao
  150. FROM
  151.     pessoas
  152. NATURAL JOIN
  153.     motoristas
  154. WHERE
  155.     habilitacao NOT IN (SELECT
  156.         habilitacao
  157.     FROM
  158.         multas
  159.     WHERE
  160.         data_multa BETWEEN '2013-01-01 00:00:00' AND '2013-12-31 23:59:59')
  161.  
  162. -- 4.d)
  163. SELECT DISTINCT
  164.     nome,cpf
  165. FROM
  166.     pessoas
  167. WHERE
  168.     cpf IN(SELECT
  169.         cpf
  170.     FROM
  171.         motoristas
  172.     WHERE
  173.         habilitacao IN (SELECT
  174.             habilitacao
  175.         FROM
  176.             multas
  177.         WHERE
  178.             codinfracao = 3))
  179.  
  180. -- 4.e)
  181. SELECT
  182.     p.nome, p.cpf, SUM(i.pontos)
  183. FROM
  184.     pessoas p
  185. NATURAL JOIN
  186.     motoristas
  187. NATURAL JOIN
  188.     multas
  189. NATURAL JOIN
  190.     infracoes i
  191. WHERE
  192.     data_multa BETWEEN '2013-01-01 00:00:00' AND '2013-12-31 23:59:59'
  193. GROUP BY
  194.     p.nome,p.cpf
  195.  
  196. -- 4.f)
  197. SELECT
  198.     pessoas.nome, pessoas.cpf
  199. FROM
  200.     pessoas
  201. NATURAL JOIN
  202.     motoristas
  203. WHERE
  204.     motoristas.habilitacao IN (SELECT
  205.         habilitacao
  206.     FROM
  207.         (SELECT
  208.             habilitacao, COUNT(codinfracao)
  209.         FROM
  210.             (SELECT DISTINCT
  211.                 habilitacao,codinfracao
  212.             FROM
  213.                 multas)
  214.         GROUP BY
  215.             habilitacao
  216.         HAVING
  217.             COUNT(codinfracao) = (SELECT
  218.                 COUNT(codinfracao)
  219.             FROM
  220.                 infracoes)))
  221. ORDER BY
  222.     pessoas.cpf
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement