Exercício 2 - Missão SQL - O Detetive de Dados

Sua Missão:** Usar seus novos superpoderes de SQL para interrogar um banco de dados e extrair informações cruciais (e também fazer umas alterações controladas)!

Vamos trabalhar com um cenário de uma pequena agência de heróis (ou vilões? 🤔).

O Banco de Dados da Agência:

Imagine que temos duas tabelas no nosso QG Supabase:

Tabela agentes:

id (PK, uuid)
nome_codigo (text, UNIQUE)
nivel_habilidade (int)
cidade_base (text)
ativo (boolean, DEFAULT true)

uuid-001

Sombra

8

Gotham

true

uuid-002

Faísca

7

Metropolis

true

uuid-003

Titã

9

Central City

false

uuid-004

Oráculo

10

Gotham

true

Tabela missoes:

id (PK, uuid)
nome_missao (text)
status (text)
agente_id (FK -> agentes.id)
data_inicio (date)

uuid-101

Roubo do Museu

Concluída

uuid-001 (Sombra)

2024-10-20

uuid-102

Salvar o Gato da Árvore

Em Andamento

uuid-002 (Faísca)

2025-05-15

uuid-103

Infiltrar na Torre Stark

Planejamento

uuid-004 (Oráculo)

2025-06-01

uuid-104

Deter o Pinguim

Concluída

uuid-001 (Sombra)

2025-01-30

Suas Tarefas de Detetive (Use o SQL Editor do Supabase ou SQLiteOnline):

  1. Interrogatório Geral (SELECT):

    • Mostre todos os dados da tabela agentes.

    • Mostre apenas o nome_codigo e a cidade_base de todos os agentes.

  2. Investigação Específica (SELECT com WHERE):

    • Encontre o nome_codigo do agente com nivel_habilidade maior que 8.

    • Liste todas as informações dos agentes que estão baseados em 'Gotham'.

    • Mostre o nome_missao das missões que não estão com status 'Concluída'.

  3. Organizando Arquivos (SELECT com ORDER BY):

    • Liste os nome_codigo dos agentes em ordem alfabética.

    • Mostre as missões (nome_missao e data_inicio) ordenadas pela data_inicio, da mais recente para a mais antiga.

  4. Novo Recruta (INSERT):

    • Adicione um novo agente à tabela agentes: nome_codigo = 'Noturno', nivel_habilidade = 6, cidade_base = 'Metropolis'. (O id e ativo devem usar o padrão ou ser gerados).

  5. Atualização de Status (UPDATE):

    • A missão 'Salvar o Gato da Árvore' (id = uuid-102) foi concluída! Atualize o status dela para 'Concluída'. (Cuidado com o WHERE!)

    • O agente 'Faísca' (id = uuid-002) treinou muito e subiu seu nivel_habilidade para 8. Atualize o registro dele. (Use o ID no WHERE!)

  6. Arquivo Confidencial (DELETE):

    • (Hipotético - Pense bem antes de rodar!) Se precisássemos remover o agente 'Titã' (id = uuid-003) que está inativo, qual seria o comando? (Use o ID no WHERE!) Não precisa rodar este se não quiser apagar dados de verdade.

  7. Conectando os Pontos (INNER JOIN):

    • Mostre o nome_missao e o nome_codigo do agente responsável por cada missão. Use um INNER JOIN entre as tabelas missoes e agentes.

    • Liste o nome_missao, o status da missão e o nome_codigo do agente, mas apenas para as missões que estão 'Em Andamento' ou em 'Planejamento'. (Combine JOIN com WHERE!).

Como Fazer:

  • Opção 1 (Ideal): No seu projeto Supabase, crie essas duas tabelas (agentes, missoes) no Table Editor. Insira os dados de exemplo manualmente ou usando INSERT. Depois, vá ao SQL Editor (</>) e rode cada uma das queries das tarefas.

  • Opção 2 (Alternativa): Use um site como SQLite Online. Copie e cole os comandos CREATE TABLE (você terá que escrevê-los baseado na estrutura acima!) e os INSERTs para criar os dados de exemplo. Depois, rode as queries das tarefas.

Objetivo: Praticar os comandos SQL básicos (CRUD + JOIN) em um cenário concreto. É como aprender as frases essenciais para conversar com o banco de dados!

Last updated