# 📘 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.