Advertisement
joaopaulofcc

modelo_aula_subconsultas

Jun 2nd, 2021
1,436
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 8.44 KB | None | 0 0
  1. CREATE DATABASE subconsulta;
  2.  
  3. USE subconsulta;
  4.  
  5.  
  6. #----------------------------------------------------------------------------
  7. # CRIAÇÃO DE TABELAS
  8.  
  9. CREATE TABLE profissao (
  10.     id_profissao INTEGER NOT NULL AUTO_INCREMENT,
  11.     nome VARCHAR(45) NOT NULL,
  12.     PRIMARY KEY(id_profissao)
  13. );
  14.  
  15. CREATE TABLE cep (
  16.     num_cep VARCHAR(10) NOT NULL,
  17.     cidade VARCHAR(45) NOT NULL,
  18.     estado VARCHAR(2) NOT NULL,
  19.     PRIMARY KEY(num_cep)
  20. );
  21.  
  22. CREATE TABLE estado_civil (
  23.     id_estado_civil INTEGER NOT NULL AUTO_INCREMENT,
  24.     nome VARCHAR(45) NOT NULL,
  25.     PRIMARY KEY(id_estado_civil)
  26. );
  27.  
  28. CREATE TABLE meus_contatos (
  29.     id_contato INTEGER NOT NULL AUTO_INCREMENT,
  30.     sobrenome VARCHAR(40) NOT NULL,
  31.     prenome VARCHAR(30) NOT NULL,
  32.     telefone VARCHAR(20) NOT NULL,
  33.     email VARCHAR(40),
  34.     sexo VARCHAR(1),
  35.     aniversario DATE,
  36.     id_profissao INTEGER,
  37.     num_cep VARCHAR(10),
  38.     id_estado_civil INTEGER,
  39.     PRIMARY KEY(id_contato),
  40.     FOREIGN KEY(id_profissao) REFERENCES profissao(id_profissao),
  41.     FOREIGN KEY(num_cep) REFERENCES cep(num_cep),
  42.     FOREIGN KEY(id_estado_civil) REFERENCES estado_civil(id_estado_civil)
  43. );
  44.  
  45. CREATE TABLE emprego_desejado (
  46.     id_emprego_desejado INTEGER NOT NULL AUTO_INCREMENT,
  47.     id_contato INTEGER NOT NULL,
  48.     cargo VARCHAR(40) NOT NULL,
  49.     salario_minimo FLOAT NOT NULL,
  50.     salario_maximo FLOAT,
  51.     disponibilidade VARCHAR(40),
  52.     anos_experiencia TINYINT, # 0 a 255 no maximo
  53.     PRIMARY KEY(id_emprego_desejado),
  54.     FOREIGN KEY(id_contato) REFERENCES meus_contatos(id_contato)
  55. );
  56.  
  57. CREATE TABLE emprego_atual (
  58.     id_contato INTEGER NOT NULL,
  59.     cargo VARCHAR(40) NOT NULL,
  60.     salario FLOAT NOT NULL,
  61.     data_inicio DATE,
  62.     PRIMARY KEY(id_contato),
  63.     FOREIGN KEY(id_contato) REFERENCES meus_contatos(id_contato)
  64. );
  65.  
  66. CREATE TABLE interesses (
  67.     id_interesse INTEGER NOT NULL AUTO_INCREMENT,
  68.     interesse VARCHAR(30),
  69.     PRIMARY KEY(id_interesse)
  70. );
  71.  
  72. CREATE TABLE contato_interesse (
  73.     id_contato INTEGER NOT NULL,
  74.     id_interesse INTEGER NOT NULL,
  75.     PRIMARY KEY(id_contato, id_interesse),
  76.     FOREIGN KEY(id_contato) REFERENCES meus_contatos(id_contato),
  77.     FOREIGN KEY(id_interesse) REFERENCES interesses(id_interesse)
  78. );
  79.  
  80. CREATE TABLE procura (
  81.     id_procura INTEGER NOT NULL AUTO_INCREMENT,
  82.     procura VARCHAR(30),
  83.     PRIMARY KEY(id_procura)
  84. );
  85.  
  86. CREATE TABLE contato_procura (
  87.     id_contato INTEGER NOT NULL,
  88.     id_procura INTEGER NOT NULL,
  89.     PRIMARY KEY(id_contato, id_procura),
  90.     FOREIGN KEY(id_contato) REFERENCES meus_contatos(id_contato),
  91.     FOREIGN KEY(id_procura) REFERENCES procura(id_procura)
  92. );
  93.  
  94. CREATE TABLE lista_empregos(
  95.     id_emprego INTEGER NOT NULL AUTO_INCREMENT,
  96.     cargo VARCHAR(40) NOT NULL,
  97.     salario FLOAT NOT NULL,
  98.     num_cep VARCHAR(10),
  99.     descricao TEXT,
  100.     PRIMARY KEY(id_emprego),
  101.     FOREIGN KEY(num_cep) REFERENCES cep(num_cep)
  102. );
  103.  
  104. #----------------------------------------------------------------------------
  105. # INSERÇÃO DE VALORES
  106.  
  107. INSERT INTO profissao (nome) VALUES
  108.     ("Pedreiro"),
  109.     ("Médico"),
  110.     ("Eletricista"),
  111.     ("Carpinteiro");
  112.  
  113. INSERT INTO cep VALUES
  114.     ("35570-000", "Formiga", "MG"),
  115.     ("38459-170", "Sabará", "MG"),
  116.     ("15679-562", "Cubatão", "SP"),
  117.     ("45698-125", "Santos", "SP");
  118.  
  119. INSERT INTO estado_civil (nome) VALUES
  120.     ("Solteiro"),
  121.     ("Casado"),
  122.     ("Viúvo"),
  123.     ("Divorciado");
  124.  
  125. INSERT INTO interesses (interesse) VALUES
  126.     ("Natação"),
  127.     ("Cozinhar"),
  128.     ("Ciclismo"),
  129.     ("Computadores");
  130.  
  131. INSERT INTO meus_contatos
  132. (sobrenome, prenome, telefone, email, sexo, aniversario, id_profissao, num_cep, id_estado_civil) VALUES
  133.     ("da Silva", "Carlos", "3322-1565", "carlos@gmail.com", "M", "2000-10-5", 1, "35570-000", 4),
  134.     ("Menezes", "José", "3321-8998", "jose@hotmail.com", "M", "1970-10-11", 2, "45698-125", 1),
  135.     ("dos Santos", "Maria", "3321-8998", "mariasantos@gmail.com", "F", "1993-05-20", 3, "38459-170", 2),
  136.     ("Assis", "Joana", "3321-7855", "joanaassis@gmail.com", "F", "1950-03-05", 2, "15679-562", 3),
  137.     ("Seixas", "Raul", "2115-8998", "seixas.raul@gmail.com", "M", "1960-03-15", 3, "35570-000", 3),
  138.     ("Camargo", "Marcos", "1587-8989", "carmargom@gmail.com", "M", "1975-05-20", 3, "38459-170", 3),
  139.     ("das Cruzes", "Beatriz", "1123-6565", "biacruz@gmail.com", "F", "1992-06-27", 1, "35570-000", 3),
  140.     ("Pereira", "Tatiana", "4545-8978", "tatipereira@gmail.com", "F", "1984-07-19", 1, "15679-562", 3);
  141.    
  142. INSERT INTO contato_interesse (id_contato, id_interesse) VALUES
  143.     (1, 2),
  144.     (2, 3),
  145.     (1, 4),
  146.     (3, 1),
  147.     (4, 4),
  148.     (4, 2);
  149.    
  150. INSERT INTO emprego_atual VALUES
  151. (1, "Assistente", 3500, "2010-10-05"),
  152. (2, "Plantonista", 10750, "2005-09-30"),
  153. (3, "Engenheiro", 7120, "2016-12-05"),
  154. (4, "Cirurgião", 9123, "2000-03-15"),
  155. (5, "Engenheiro", 6535, "2014-05-10"),
  156. (6, "Cirurgião", 10750, "2005-08-20");
  157.  
  158. INSERT INTO emprego_desejado (id_contato, cargo, salario_minimo, salario_maximo, disponibilidade, anos_experiencia) VALUES
  159. (1, "Assistente Senior", 5000, 8000, "Integral", 8),
  160. (2, "Cirurgião", 10000, 15000, "De 13:00 às 20:00", 13),
  161. (3, "Engenheiro Chefe", 8500, 12000, "40 horas semanais", 2),
  162. (4, "Cirurgião Chefe", 15000, 20000, "Integral", 18);
  163.  
  164. INSERT INTO lista_empregos (cargo, salario, num_cep, descricao) VALUES
  165. ("Programador", 7000, "35570-000", "Programador com experiência em Python."),
  166. ("Programador", 5500, "35570-000", "Programador com experiência em Java."),
  167. ("Cirurgião", 11000, "15679-562", "Cirurgião com especialização."),
  168. ("Engenheiro Chefe", 9000, "45698-125", "Engenheiro de minas."),
  169. ("Administrador", 15000, "45698-125", "Administrador com experiência em BD.");
  170.  
  171.  
  172. # -----------------------------------
  173.  
  174.  
  175. # Problema 1
  176.  
  177. # Procura-se Cirurgião com experiência superior a cinco anos. Salário entre R$10.500,00 e R$13.000,00
  178.  
  179.  
  180.  
  181. # -----------------------------------
  182.    
  183.    
  184. # Problema 2
  185.  
  186. # Como encontrar a melhor combinação de contatos para uma lista de diferentes empregos?
  187.  
  188. # Passo 01: selecionar todos os cargos disponíveis:
  189.  
  190.    
  191.    
  192. # Passo 02: efetuar uma consulta em emprego_desejado para verificar quais são os interessados nos cargos listados anteriormente:
  193.  
  194.  
  195.  
  196. # Como juntar as duas consultas em uma?
  197.  
  198.    
  199.    
  200. # -----------------------------------
  201.  
  202.  
  203. # Problema 3
  204.  
  205. # Selecionar os nomes e sobrenomes dos meus contatos que moram em Formiga.
  206.  
  207.    
  208.  
  209. # Poderia ser feito com JOIN também:
  210.  
  211.    
  212.  
  213. # -----------------------------------
  214.  
  215.  
  216. # Problema 4
  217.  
  218. # Obter o primeiro nome e o sobrenome do contato que possui o maior salário.
  219.  
  220. # Passo 01: selecionar quem ganha o maior salário:
  221.  
  222.  
  223.    
  224. # Passo 02: conectar as tabelas meus_contatos e emprego_atual e selecionar o maior salário manualmente.
  225.  
  226.  
  227.  
  228. # Passo 03: utilizar subconsulta para automatizar o processo.
  229.  
  230.  
  231.  
  232. # -----------------------------------
  233.  
  234.  
  235. # Subconsultas como colunas
  236.  
  237.  
  238.  
  239. # -----------------------------------
  240.  
  241.  
  242. # Problema 05
  243.  
  244. # Localizando pessoas com salario atual maior que o salário da pessoa com determinado e-mail.
  245.  
  246.  
  247.  
  248. # -----------------------------------
  249.  
  250.  
  251. # Problema 06
  252.  
  253. # Localizando pessoas com cargo atual igual à lista de empregos disponíveis para emprego:
  254.  
  255.  
  256.  
  257. # -----------------------------------
  258.  
  259.  
  260. # Problema 07:
  261.  
  262. # Localizando pessoas com cargo atual não compatível aos cargos da lista de empregos:
  263.  
  264.  
  265.  
  266. # -----------------------------------
  267.  
  268. # SUBCONSULTAS CORRELACIONADAS
  269.  
  270. # -----------------------------------
  271.  
  272.  
  273. # Problema 08
  274.  
  275. # Selecionar os contatos que possuem dois interesses:
  276.  
  277.    
  278.    
  279. # Problema 09
  280.  
  281. # Precisamos encontrar o nome, sobrenome e email de todos os contatos que não estão na tabela emprego_atual:
  282.  
  283.  
  284.  
  285. # Problema 10
  286.  
  287. # Precisamos encontrar o nome, sobrenome e email de todos os contatos que estão na tabela emprego_atual:
  288.  
  289.    
  290.    
  291. # ----------------------------------------
  292.  
  293. # TRANSFORMANDO SUBCONSULTAS EM CONEXÕES
  294.  
  295. # ----------------------------------------
  296.  
  297. # Utilizando subconsulta:
  298.  
  299.    
  300.    
  301. # ----------------------------------------
  302.  
  303. # OPERAÇÕES DE CONJUNTOS
  304.  
  305. # ----------------------------------------
  306.  
  307. # UNION
  308.  
  309. # Como obter uma lista de todos os cargos que se encontram no banco de dados?
  310.  
  311. # Solução parcial
  312.  
  313.  
  314. # Mas, como obter isso em uma lista ordenada pelo cargo?
  315.  
  316.  
  317. # UNION ALL
  318.  
  319. # Mesmo exemplo anterior (os cargos que aparecem repetidos não foram removidos)
  320.  
  321.  
  322.  
  323. # Podemos criar uma tabela a partir de qualquer comando select, por exemplo, vamos criar uma tabela com os cargos cadastrados:
  324.  
  325.  
  326.  
  327. # Intersecção e Diferença (o MySQL não dá suporte para os operadores Intersect e Except)
  328.  
  329. # Intersecção
  330.  
  331.  
  332.  
  333. # Diferença
  334.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement