# 📘 Prova de SQL — 30/09 **Banco:** PostgreSQL **Imagem Docker:** `leogloriainfnet/prova30-09` As tabelas já estão carregadas no banco de dados: - `carros` - `motos` - `vendas` > **Regras:** > - Responda todas as questões usando **apenas SQL**. > - Não altere as tabelas originais (exceto quando a questão pedir criação explícita de objetos como view/materialized view/índices). > - Entregue um arquivo `.pdf` com todas as queries usadas (cada questão numerada) e execução.. > - Nomes de objetos adicionais (views, índices, materialized views) devem ser claros e consistentes. --- ## 🚀 Como rodar o ambiente (local) ```bash docker run -d --name prova-sql -e POSTGRES_PASSWORD=123456 leogloriainfnet/prova30-09 ``` ```bash docker exec -it <container_id> psql -U postgres ``` --- ## 📝 Questões **Questão 1** Liste carros da Toyota ou Honda fabricados a partir de 2018. **Questão 2** Liste carros da categoria 'SUV' com preço entre 100.000 e 250.000 e câmbio = 'Automático'. **Questão 3** Liste motos com cilindrada igual a 600, 900, 1000 ou 1200. **Questão 4** Liste carros com cor diferente de 'Preto' e diferente de 'Branco' e quilometragem menor que 50.000. **Questão 5** Liste motos cujo modelo começa com 'Ninja' ou começa com 'gsx'. **Questão 6** Liste carros de marcas BMW, Mercedes, Audi ou Volkswagen da categoria Sedan ou Esportivo com ano entre 2015 e 2025. **Questão 7** Liste carros cujo modelo contenha 'Class' ou 'Series' e preço maior que 150.000. **Questão 8** Liste motos com ano maior ou igual a 2015 e (preço menor que 20.000 ou cilindrada menor ou igual a 300). **Questão 9** Liste carros cuja marca não seja Fiat, Volkswagen ou Chevrolet e (categoria seja Esportivo ou Coupé). **Questão 10** Liste carros cuja cor começa com 'Pr' ou 'Ci', com ano entre 2010 e 2025, e preço diferente de 50000 e diferente de 100000. **Questão 11** Monte uma consulta que traga todos os veículos (carros e motos) com marca, modelo, ano, preco, tipo. Depois, justifique a escolha de UNION ou UNION ALL. **Questão 12A** Garanta que a consulta da questão 11 esteja sempre disponível e refletindo automaticamente qualquer alteração feita nas tabelas de carros ou motos. Você usaria View ou Materialized View? Justifique sua escolha. **Questão 12B** Implemente a solução escolhida, criando o objeto correspondente no banco de dados. **Questão 13** Liste todos os carros que possuem airbags maiores ou iguais a 4 usando o campo `dados`. **Questão 14** Liste todos os carros que sejam blindados verificando o conteúdo do campo `dados`. **Questão 15** Explique o que é um índice em banco de dados e crie dois índices na tabela `motos`: um para consultas por ano e outro para consultas por preço. **Questão 16** Liste todas as vendas realizadas no ano de 2023. **Questão 17** Liste todas as vendas realizadas no mês de março de 2024. **Questão 18** Mostre o total de vendas (soma do campo `total`) agrupado por ano da data da venda. **Questão 19** Mostre a quantidade de vendas agrupada por vendedor. **Questão 20** Liste os vendedores cujo valor total vendido seja maior que 500.000. **Questão 21A** Crie uma Materialized View que consolide as vendas por mês, exibindo: mês (`date_trunc` de `data_venda`), total vendido (soma de `total`) e quantidade de vendas. **Questão 21B** Insira um novo registro na tabela `vendas` com uma data dentro de um mês já existente no conjunto de dados. **Questão 21C** Execute o refresh da materialized view criada. **Questão 21D** Faça uma consulta nessa materialized view para o mês do registro inserido e demonstre que os valores refletem a nova venda. **Questão 21E** Crie um índice sobre a materialized view para acelerar consultas pelo campo do mês. **Questão 22** Liste, agrupando por vendedor e por ano/mês da data da venda, apenas os grupos que atendam simultaneamente às condições abaixo: - soma do total vendido maior que 300.000; - quantidade de vendas maior ou igual a 20; - ticket médio entre 10.000 e 25.000; - participação de carros no faturamento maior ou igual a 60%. Exiba vendedor, ano/mês, total vendido, quantidade de vendas, ticket médio e percentual de carros. Ordene do maior total vendido para o menor. --- ### DML > 110 pontos ### DL > 80 pontos ### D > 50 ### ND <= 50 Boa sorte — e mantenha a curiosidade afiada.