# Lista de Exercícios de Revisão SQL ## Dataset inicial ### Inserts – Produtos ```sql INSERT INTO produtos (nome, preco, categoria, estoque) VALUES ('Fone Bluetooth', 199.90, 'Eletronicos', 5), ('Notebook Slim 14"', 3499.00, 'Eletronicos', 2), ('Livro: SQL do Zero', 89.90, 'Livros', 10), ('Café Especial 500g', 34.50, 'Alimentos', 20), ('Chocolate Amargo 70%', 12.90, 'Alimentos', 50), ('Cadeira Gamer', 999.00, 'Eletronicos', 3), ('Livro: Estruturas de Dados', 120.00, 'Livros', 8), ('Azeite Extra Virgem 500ml', 39.90, 'Alimentos', 15); ``` ### Inserts – Pedidos ```sql INSERT INTO pedidos (cliente, valor, criado_em) VALUES ('Alice', 250.00, '2025-01-05'), ('Bruno', 120.00, '2025-01-12'), ('Carla', 800.00, '2025-02-03'), ('Alice', 150.00, '2025-02-15'), ('Daniel', 75.00, '2025-03-01'), ('Carla', 600.00, '2025-03-10'), ('Bruno', 90.00, '2025-03-22'), ('Eduarda', 1350.00, '2025-04-05'), ('Alice', 300.00, '2025-04-18'), ('Daniel', 220.00, '2025-05-01'); ``` ### Inserts – Cupons ```sql INSERT INTO cupons (codigo, desconto) VALUES ('DESC10', 10.00), ('FRETEGRATIS', 0.00), ('SUPER20', 20.00), ('VIP50', 50.00); ``` --- # Exercícios ## 1. DDL – Definição de Tabelas 1. Crie a tabela `produtos` com id, nome, preço, categoria e estoque. 2. Adicione a coluna `estoque` com valor default. 3. Adicione uma restrição para que a categoria só aceite: Eletronicos, Livros ou Alimentos. 4. Insira 5 produtos de categorias e preços variados. 5. Delete um produto específico da tabela. --- ## 2. Filtros e Operadores 6. Liste todos os produtos cujo preço seja maior que 100. 7. Liste os produtos cujo preço esteja entre 50 e 200. 8. Liste os produtos das categorias Eletronicos ou Livros. 9. Liste produtos cujo estoque seja diferente de zero. 10. Liste produtos cujo nome não contenha a letra “a”. --- ## 3. Trabalho com Datas 11. Insira 5 pedidos em datas diferentes. 12. Selecione os pedidos criados após 2025-01-01. 13. Selecione pedidos feitos em fevereiro de 2025. 14. Liste pedidos ordenados por data decrescente. 15. Calcule o número de dias desde cada pedido até hoje. --- ## 4. Group By e Having 16. Calcule o valor total gasto por cliente. 17. Calcule a média de pedidos por mês. 18. Mostre apenas clientes que tenham gasto mais de 500 no total. 19. Conte quantos pedidos existem por cada mês. 20. Calcule o maior e menor valor de pedido de cada cliente. --- ## 5. CTEs (WITH) 21. Crie uma CTE que calcule o total gasto de cada cliente e filtre os acima de 1000. 22. Crie uma CTE que marque pedidos como “barato” (<100) ou “caro” (>=100) e conte quantos caíram em cada categoria. 23. Crie uma CTE que adicione um ranking (`ROW_NUMBER`) por data de pedido. --- ## 6. UNION e UNION ALL 24. Crie a tabela `cupons` com código e desconto. 25. Use `UNION` para listar nomes de clientes e códigos de cupons em uma única coluna. 26. Use `UNION ALL` para repetir o exercício anterior e compare a contagem. 27. Liste produtos com preço > 200 e una com pedidos de valor > 500 em uma mesma coluna chamada valor. --- ## 7. Views e Materialized Views 28. Crie uma VIEW `resumo_clientes` que mostre cliente, total gasto e quantidade de pedidos. 29. Crie uma MATERIALIZED VIEW `resumo_mensal` que traga o valor total de pedidos por mês. 30. Atualize a materialized view (`REFRESH`) e consulte os dados. 31. Aplique um filtro diretamente na VIEW para mostrar clientes com total gasto acima de 1000. ---