🎯 ATIVIDADE 06 — MOBILIANDO A CASA

📖 Fundamentação Teórica

Para realizar este laboratório com sucesso, certifique-se de ter compreendido os conceitos apresentados no:
👉 CAPÍTULO 06: ANATOMIA DE ATRIBUTOS, DOMÍNIOS E TIPOS

Bem-vindo à sexta semana (4 aulas) do curso de Banco de Dados. Sua estrutura teórica já está pronta. Agora, vamos "mobiliar" o sistema — inserir dados reais e aprender a fazer as perguntas certas ao banco de dados usando a DML (Data Manipulation Language). 🛡️🧩


🎯 Objetivos de Aprendizagem do Laboratório

Ao final deste laboratório prático (estimativa: 4 horas presenciais / autoguiadas), você será capaz de:

  • Inserir registros usando o comando INSERT INTO.
  • Consultar dados de forma seletiva com SELECT e WHERE.
  • Utilizar Operadores Lógicos (e / ou) para filtrar resultados com precisão.
  • Ordenar informações com ORDER BY.

🏢 O Cenário Prático (Seu Desafio)

A TecProExpress iniciou suas operações! Você recebeu uma lista de clientes iniciais e produtos. Seu desafio é popular o banco e gerar os primeiros relatórios para a gerência.

Importante

A Regra de Ouro: Você não pode colocar móveis em uma casa que ainda não tem paredes. No banco de dados, primeiro CRIAMOS a tabela (DDL) e depois INSERIMOS os dados (DML).

---

🧠 Fundamentos: A Teoria Traduzida

Consultar o banco é como usar o filtro de pesquisa do Instagram ou da Amazon.

O Fluxo da Pergunta (SELECT)

Veja como o banco processa sua solicitação:

flowchart LR
    A[1. Tabela Criada] --> B[2. Dados Inseridos]
    B --> C{"3. WHERE: Filtro"}
    C -- Atende --> D[Exibir Linha]
    C -- Não Atende --> E[Descartar]
    D --> F["4. ORDER BY: Ordenação"]
    
    style A fill:#e8f5e9
    style B fill:#fffde7

📖 Exemplo Guiado: O Passo a Passo Completo

Para quem está começando, este é o fluxo obrigatório para qualquer banco de dados.

1. Criando o "Espaço" (DDL)

-- Primeiro, criamos a tabela para receber os produtos
CREATE TABLE produto (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nome VARCHAR(100),
    preco DECIMAL(10,2)
);

2. Inserindo a "Mobília" (DML)

-- Agora que a tabela existe, inserimos os dados
INSERT INTO produto (nome, preco) VALUES 
('Smartphone X', 2500.00),
('Cabo USB', 25.00),
('Monitor 4K', 1800.00);

3. Fazendo a Pergunta (Query)

-- Selecionamos apenas o que nos interessa
SELECT nome, preco FROM produto WHERE preco > 100 AND preco < 2000;

🔍 Detalhamento do Código:

  • CREATE TABLE: Prepara o terreno. Sem isso, o comando INSERT dá erro de "Table doesn't exist".
  • INSERT INTO: "Empurra" os dados para dentro das colunas nome e preco.
  • AND: O operador e exige que as duas condições sejam verdadeiras ao mesmo tempo.

🛠️ Prática Obrigatória 1: Populando a TecProExpress

Cenário: Carga inicial de teste.

  1. Crie a tabela cliente com as colunas id, nome e cidade.
  2. Insira 5 Clientes (use cidades como 'São Paulo', 'Curitiba' e 'Santos').

🚀 Script de Seed Completo (SQL)

Dica

Copie e cole este bloco no seu SGBD para garantir que o ambiente esteja pronto:

```sql -- PASSO 1: Criar a tabela CREATE TABLE cliente ( id INT PRIMARY KEY AUTO_INCREMENT, nome VARCHAR(100), cidade VARCHAR(50) );

-- PASSO 2: Inserir os dados INSERT INTO cliente (nome, cidade) VALUES ('Marcos Silva', 'São Paulo'), ('Julia Costa', 'Curitiba'), ('Roberto Dias', 'Santos'), ('Ana Paula', 'São Paulo'), ('Lucas Melo', 'Santos');


---

## 💻 Execução DML & Resultado Esperado no Terminal

Para executar o script de inserção e a consulta com filtros no terminal do SGBD:

```sql
-- Executando a consulta com operador OR e ORDER BY
SELECT nome, cidade FROM cliente WHERE cidade = 'São Paulo' OR cidade = 'Santos' ORDER BY nome ASC;

🖥️ Saída Esperada no Terminal:

     nome      |   cidade   
---------------+------------
 Ana Paula     | São Paulo
 Lucas Melo    | Santos
 Marcos Silva  | São Paulo
 Roberto Dias  | Santos
(4 rows)

🌐 Requisição cURL e Payload JSON para Inserção em Lote (Swagger /docs)

curl -X POST "http://127.0.0.1:8000/api/v1/clientes/bulk" \
     -H "Content-Type: application/json" \
     -d '[
       {"nome": "Marcos Silva", "cidade": "São Paulo"},
       {"nome": "Julia Costa", "cidade": "Curitiba"},
       {"nome": "Roberto Dias", "cidade": "Santos"}
     ]'

🔹 Resposta JSON:

{
  "mensagem": "3 clientes inseridos com sucesso!",
  "status_code": 201
}

🛠️ Prática Obrigatória 2: Relatórios de Operação

Cenário: O Gerente solicitou dados específicos.

  1. Filtro Flexível (ou): Liste os clientes que moram em 'São Paulo' ou 'Santos'.
  2. Ordenação: Liste todos os produtos do mais caro para o mais barato (DESC).

📤 Instruções de Entrega (Microsoft Teams)

Após validar seus códigos SQL locais:

  1. Certifique-se de que os seus comandos INSERT INTO e SELECT estão em conformidade com o padrão ANSI SQL.
  2. Salve os comandos em um único arquivo de script com a extensão .sql (Ex: Atividade_06_SeuNome.sql).
  3. Certifique-se de incluir comentários no código explicando o papel dos filtros lógicos AND (operador e para restringir linhas) e OR (operador ou para ampliar critérios) nas consultas.
  4. Envie o arquivo .sql correspondente no Microsoft Teams para avaliação técnica.

💡 Checkpoint de Lógica

Importante

Dica para Iniciantes: Sempre que você fechar seu banco de dados e abrir de novo, verifique se a tabela ainda existe. Se você estiver usando um banco em memória ou temporário, precisará rodar o CREATE TABLE novamente antes de inserir dados. 🧠🛡️

---

🔥 Desafio de Fixação (Opcional)

Nível: Analista Sênior 🏆

Use o operador LIKE para encontrar todos os clientes cujo nome comece com a letra "A". Como o WHERE se comporta nesse caso?


🔑 Gabarito de Código/Fórmulas Completo

Consultas da Prática 2:

-- 1. Filtro Flexível (OU)
SELECT * FROM cliente 
WHERE cidade = 'São Paulo' OR cidade = 'Santos';

-- 2. Ordenação Decrescente (Z-A / Maior-Menor)
SELECT * FROM produto 
ORDER BY preco DESC;

🔍 Explicação do Gabarito:

  • OR: Traz registros que atendam a QUALQUER uma das condições.
  • DESC: Inverte a ordem natural. No preço, coloca o mais caro primeiro.

📊 Rubrica Formativa de Avaliação

Critério de Avaliação Insuficiente (0% - 40%) Regular (41% - 70%) Excelente (71% - 100%)
Sintaxe SQL DML (INSERT, SELECT, ORDER BY) Erros de sintaxe em inserção ou consultas sem cláusulas de filtro (`WHERE`). Escreve as queries `INSERT` e `SELECT` mas sem demonstrar o uso de `ORDER BY DESC`. Queries SQL DML perfeitas com sementes de dados (`INSERT INTO`), filtros lógicos `AND`/`OR` e ordenação `ORDER BY`.
Comentários & Explicação Técnica Sem comentários no script SQL. Comentários superficiais nos comandos SQL. Comentários ricos explicando a diferença entre `AND` (restritivo) e `OR` (ampliativo) no resultado das linhas.
Entrega do Script SQL Entrega script com erros de execução. Script entregue mas fora do padrão de extensão `.sql`. Submete `Atividade_06_SeuNome.sql` limpo, formatado e testado no SGBD.