joaopaulofcc

Junções - Gabarito

May 19th, 2021
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 7.50 KB | None | 0 0
  1. # Aula - Junções
  2.  
  3. # Cria a base de dados
  4. CREATE DATABASE ProjetoFormula1;
  5.  
  6. # Seleciona a base a ser utilizadas nos comando abaixo
  7. USE ProjetoFormula1;
  8.  
  9. # Cria a tabela Pilotos
  10. CREATE TABLE Pilotos
  11. (
  12.     codigo INT(11),
  13.     nome VARCHAR(40) NOT NULL,
  14.     pais VARCHAR(20),
  15.     idade INT(6),
  16.     equipe VARCHAR(20) NOT NULL,
  17.     motor VARCHAR(20),
  18.     pontos INT(10),
  19.     PRIMARY KEY (codigo)
  20. );
  21.  
  22.  
  23. CREATE TABLE Ranking
  24. (
  25.     codigo_piloto INT(11),
  26.     GP INT(4) NOT NULL,
  27.     classificacao1 INT(3) NOT NULL,
  28.     classificacao2 INT(3) NOT NULL,
  29.     classificacao3 INT(3) NOT NULL,
  30.     podio INT(4) NOT NULL,
  31.     numPolePosition INT(4) NOT NULL,
  32.     voltaMaisRapida INT(4) NOT NULL,
  33.     PRIMARY KEY (codigo_piloto),
  34.     FOREIGN KEY (codigo_piloto) REFERENCES Pilotos (codigo)
  35. );
  36.    
  37.    
  38. # ---------- Inserindo dados ----------
  39.  
  40. INSERT INTO Pilotos
  41.     (codigo, nome, pais, idade, equipe, motor, pontos)
  42. VALUES
  43.     (111, "Sebastian Vettel", "Alemanha", 25, "RedBull", "Renault", 256),
  44.     (112, "Fernando Alonso", "Espanha", 28, "Ferrari", "Ferrari", 252),
  45.     (113, "Mark Alan Webber", "Áustria", 26, "RedBull", "Renault", 242),
  46.     (114, "Lewis Hamilton", "Inglaterra", 22, "McLaren", "Mercedes", 240),
  47.     (115, "Jenson Button", "Inglaterra", 21, "McLaren", "Mercedes", 214),
  48.     (116, "Felipe Massa", "Brasil", 27, "Ferrari", "Ferrari", 144),
  49.     (117, "Nico Rosberg", "Alemanha", 24, "Mercedes", "Mercedes", 142),
  50.     (118, "Robert Kubica", "Polônia", 21, "Renault", "Renault", 136),
  51.     (119, "Michael Schumacher", "Alemanha", 23, "Mercedes", "Mercedes", 72),
  52.     (120, "Rubens Barrichello", "Brasil", 29, "Williams", "Cosworth", 47),
  53.     (121, "Adrian Sutil", "Alemanha", 24, "ForceIndia", "Mercedes", 47),
  54.     (122, "Kamui Kobayashi", "Japão", 23, "Sauber", "Ferrari", 32),
  55.     (123, "Vitaly Petrov", "Rússia", 22, "Renault", "Renault", 27),
  56.     (124, "Nico Hulkenberg", "Alemanha", 20, "Williams", "Cosworth", 22),
  57.     (125, "Vitantonio Liuzzi", "Itália", 25, "ForceIndia", "Mercedes", 21),
  58.     (126, "Sebastian Buemi", "Suiça", 16, "ToroRosso", "Ferrari", 8),
  59.     (127, "Pedro de la Rosa", "Espanha", 22, "Sauber", "Ferrari", 6),
  60.     (128, "Nivk Heidfeld", "Alemanha", 22, "Sauber", "Ferrari", 6),
  61.     (129, "Jaime Alguersuari", "Espanha", 27, "ToroRosso", "Ferrari", 5),
  62.     (130, "Sakon Yamamoto", "Japão", 20, "Hispania", "Cosworth", 0),
  63.     (131, "Lucas Tucci di Grassi", "Brasil", 25, "Virgin", "Cosworth", 0),
  64.     (132, "Jarno Trulli", "Itália", 18, "Lotus", "Cosworth", 0),
  65.     (133, "Heikki Kovalainen", "Finlândia", 19, "Lotus", "Cosworth", 0),
  66.     (134, "Timo Glock", "Alemanha", 24, "Virgin", "Cosworth", 0),
  67.     (135, "Christian Klien", "Austrália", 20, "Hispania", "Cosworth", 0),
  68.     (136, "Bruno Senna", "Brasil", 21, "Hispania", "Cosworth", 0),
  69.     (137, "Karun Chandhok", "Índia", 20, "Hispania", "Cosworth", 0);
  70.  
  71.  
  72. INSERT INTO Ranking
  73.     (codigo_piloto, GP, classificacao1, classificacao2, classificacao3, podio, numPolePosition, voltaMaisRapida)
  74. VALUES
  75.     (135, 49, 0, 0, 0, 0, 0, 0),
  76.     (116, 154, 11, 11, 11, 33, 15, 14),
  77.     (112, 179, 28, 26, 20, 74, 20, 19),
  78.     (133, 91, 1, 2, 1, 4, 1, 2),
  79.     (132, 252, 1, 4, 6, 11, 3, 1),
  80.     (122, 42, 0, 0, 0, 0, 0, 0),
  81.     (114, 92, 17, 16, 11, 44, 21, 11),
  82.     (113, 178, 7, 10, 13, 30, 9, 13),
  83.     (119, 289, 91, 43, 20, 154, 67, 76),
  84.     (128, 183, 0, 8, 5, 13, 1, 2),
  85.     (124, 21, 0, 0, 0, 0, 1, 0),
  86.     (117, 110, 0, 1, 4, 5, 0, 2),
  87.     (127, 87, 0, 1, 0, 1, 0, 1),
  88.     (118, 76, 1, 5, 6, 12, 1, 1),
  89.     (120, 323, 11, 29, 28, 38, 14, 17),
  90.     (111, 83, 21, 10, 6, 37, 30, 9),
  91.     (126, 55, 0, 0, 0, 0, 0, 0),
  92.     (134, 74, 0, 2, 1, 3, 0, 1),
  93.     (123, 40, 0, 0, 1, 1, 0, 1);
  94.  
  95. # ---------- Consultas ----------
  96.  
  97. # CONSULTA 1
  98. # Listar os dados dos pilotos que estão classificados no ranking.
  99.  
  100. # Usando vírgula e WHERE
  101. SELECT
  102.     *
  103. FROM
  104.     pilotos, ranking
  105. WHERE
  106.     pilotos.codigo = ranking.codigo_piloto
  107. ORDER BY
  108.     nome;
  109.    
  110. # Usando JOIN e ON (sintaxe mais limpa e de acordo com os padrões ANSI)
  111. SELECT
  112.     *
  113. FROM
  114.     pilotos JOIN ranking ON pilotos.codigo = ranking.codigo_piloto
  115. ORDER BY
  116.     nome;
  117.  
  118. # -----------
  119.  
  120. # CONSULTA 2
  121.  
  122. # Selecionar nome, equipe, pontos e pódio dos pilotos de Fórmula 1.
  123.  
  124. # Usando vírgula e WHERE
  125. SELECT
  126.     pilotos.codigo, pilotos.nome, pilotos.equipe, pilotos.pontos, ranking.GP, ranking.podio
  127. FROM
  128.     pilotos, ranking
  129. WHERE
  130.     pilotos.codigo = ranking.codigo_piloto
  131. ORDER BY
  132.     nome;
  133.    
  134. # Usando JOIN e ON (sintaxe mais limpa e de acordo com os padrões ANSI)
  135. SELECT
  136.     pilotos.codigo, pilotos.nome, pilotos.equipe, pilotos.pontos, ranking.GP, ranking.podio
  137. FROM
  138.     pilotos JOIN ranking ON pilotos.codigo = ranking.codigo_piloto
  139. ORDER BY
  140.     nome;
  141.  
  142. # -----------
  143.  
  144. # CONSULTA 3
  145.  
  146. # Listar nome dos pilotos que subiram ao pódio pelo menos uma vez.
  147.  
  148. # Usando vírgula e WHERE
  149. SELECT
  150.     p.codigo,p.nome, r.podio
  151. FROM
  152.     pilotos p, ranking r
  153. WHERE
  154.     p.codigo = r.codigo_piloto AND r.podio > 0
  155. ORDER BY
  156.     podio DESC;
  157.  
  158. # Usando JOIN e ON (sintaxe mais limpa e de acordo com os padrões ANSI)
  159. SELECT
  160.     p.codigo,p.nome, r.podio
  161. FROM
  162.     pilotos p JOIN ranking r ON p.codigo = r.codigo_piloto AND r.podio > 0
  163. ORDER BY
  164.     podio DESC;
  165.  
  166.  
  167. # -----------
  168.  
  169. # CONSULTA 4
  170.  
  171. # Listar nome dos pilotos e pole position dos que estão no ranking
  172.  
  173. # Usando vírgula e WHERE
  174. SELECT
  175.     codigo,nome, numPolePosition
  176. FROM
  177.     pilotos p, ranking r
  178. WHERE
  179.     p.codigo = r.codigo_piloto
  180. ORDER BY
  181.     numPolePosition;
  182.  
  183. # Usando JOIN e ON (sintaxe mais limpa e de acordo com os padrões ANSI)
  184. SELECT
  185.     codigo,nome, numPolePosition
  186. FROM
  187.     pilotos p JOIN ranking r on p.codigo = r.codigo_piloto
  188. ORDER BY
  189.     numPolePosition;
  190.  
  191.    
  192. # Nas consultas que trabalhamos até aqui, utilizamos várias tabelas,
  193. # mas sempre indicando o relacionamento para associá-las e obter as
  194. # informações deseja- das. A linguagem SQL nos oferece recursos para
  195. # fazer a junção das tabelas, por exemplo, o JOIN na cláusula FROM,
  196. # em que podemos indicar o tipo da junção.
  197.  
  198. # -----------
  199.  
  200. # CONSULTA 5
  201.  
  202. # Listar nome dos pilotos e pole position dos que estão no ranking
  203.  
  204. # A mesma consulta 4 é repetida, mas desta vez não vamos relacionar os
  205. # campos utilizando o sinal de igualdade na cláusula WHERE, e sim o JOIN,
  206. # recurso proposto para o mesmo relacionamento pela linguagem.
  207.  
  208. SELECT
  209.     codigo, nome, numPolePosition
  210. FROM
  211.     pilotos p JOIN ranking r ON p.codigo = r.codigo_piloto
  212. ORDER BY
  213.     numPolePosition;
  214.    
  215. # -----------
  216.  
  217. # CONSULTA 6
  218.  
  219. # Mesma consulta porém utilizando LEFT JOIN
  220.  
  221. # Nesta junção são retornadas todas as linhas da tabela esquerda em uma junção.
  222. # Todas as linhas da tabela do lado esquerdo da equação serão retornadas
  223. # independentemente de terem correspondência ou não. Se não houver correspondência,
  224. # o valor NULL será retornado.
  225.  
  226. SELECT
  227.     codigo, nome, numPolePosition
  228. FROM
  229.     pilotos p LEFT JOIN ranking r ON p.codigo = r.codigo_piloto
  230. ORDER BY
  231.     numPolePosition;
  232.    
  233. # -----------
  234.  
  235. # CONSULTA 7
  236.  
  237. # Mesma consulta porém utilizando RIGHT JOIN
  238.  
  239. # RIGHT JOIN ́é a forma inversa do LEFT JOIN: em vez de a referência ficar à esquerda, fica à direita.
  240.  
  241. SELECT
  242.     codigo, nome, numPolePosition
  243. FROM
  244.     pilotos p RIGHT JOIN ranking r ON p.codigo = r.codigo_piloto
  245. ORDER BY
  246.     numPolePosition;
  247.  
  248.  
  249. ALTER TABLE
  250.     Pilotos
  251. RENAME COLUMN
  252.     codigo
  253. TO
  254.     codigo_piloto;
  255.  
  256. SELECT
  257.     codigo_piloto, nome, numPolePosition
  258. FROM
  259.     pilotos p NATURAL JOIN ranking r
  260. ORDER BY
  261.     numPolePosition;
Add Comment
Please, Sign In to add comment