🏗️ Conceitos Fundamentais
O que é um Banco de Dados?
Um banco de dados é como um arquivo digital super organizado que armazena informações de forma estruturada. Imagine uma biblioteca gigante onde cada livro tem seu lugar específico e você pode encontrar qualquer informação rapidamente.
Analogia: Se uma planilha Excel é como uma gaveta de arquivos, um banco de dados é como um prédio inteiro de arquivos interconectados, onde você pode encontrar qualquer informação em segundos.
Por que usar Banco de Dados?
- 📊 Organização: Dados estruturados e relacionados
- 🔍 Busca rápida: Encontre informações instantaneamente
- 🔒 Segurança: Controle de acesso e backup automático
- 🤝 Compartilhamento: Múltiplos usuários simultaneamente
- 📈 Escalabilidade: Cresce conforme necessário
🏛️ Estrutura de um Banco de Dados
📋 Tabelas
Uma tabela é como uma planilha com linhas e colunas. Cada tabela armazena um tipo específico de informação.
Exemplo no jogo:
• Tabela cidadaos → Informações dos personagens
• Tabela veiculos → Informações dos veículos
Tabela "cidadaos"
┌────┬─────────────┬──────────┬───────────┐
│ id │ nome │ tipo │ cidade │
├────┼─────────────┼──────────┼───────────┤
│ 1 │ X-7 Phantom │ androide │ Neon-City │
│ 2 │ Maya Chen │ humano │ Neon-City │
└────┴─────────────┴──────────┴───────────┘
📏 Colunas (Campos)
As colunas definem que tipo de informação será armazenada. Cada coluna tem um nome e um tipo de dado.
- id: Número único para identificar cada registro
- nome: Texto com o nome do personagem
- tipo: Categoria (humano, androide, robô)
- idade: Número representando a idade
- cidade: Texto com o local de residência
📄 Linhas (Registros)
Cada linha representa um item completo. No nosso jogo, cada linha é um personagem diferente.
Linha 1: id=1, nome="X-7 Phantom", tipo="androide", cidade="Neon-City"
Linha 2: id=2, nome="Maya Chen", tipo="humano", cidade="Neon-City"
🔑 Chaves Primárias e Estrangeiras
Chave Primária: Coluna que identifica unicamente cada registro (geralmente 'id')
Chave Estrangeira: Coluna que conecta uma tabela a outra
Tabela "veiculos"
┌────┬─────────────┬─────────────────┐
│ id │ modelo │ proprietario_id │ ← Chave Estrangeira
├────┼─────────────┼─────────────────┤
│ 1 │ Cyber-Bike │ 1 │ → Conecta ao cidadão id=1
│ 2 │ Hover-Car │ 2 │ → Conecta ao cidadão id=2
└────┴─────────────┴─────────────────┘
💬 O que é SQL?
SQL (Structured Query Language) é a linguagem que usamos para "conversar" com o banco de dados. É como aprender o idioma que o banco entende.
Analogia: Se o banco de dados é uma biblioteca, SQL é como você pede ao bibliotecário: "Por favor, me traga todos os livros de ficção científica escritos em 2020."
🎯 SQL é Declarativo
Você diz O QUE quer, não COMO fazer. O banco descobre a melhor forma de buscar.
Exemplo Prático
Você quer: "Todos os androides de Neon-City"
Em SQL:
SELECT * FROM cidadaos
WHERE tipo = 'androide' AND cidade = 'Neon-City'
O banco entende: "Vou procurar na tabela cidadaos, filtrar por tipo=androide E cidade=Neon-City, e retornar todos os dados desses registros."
⚡ Comandos SQL Detalhados
🔍 SELECT - Selecionar Dados
O comando mais importante! Usado para buscar informações no banco.
SELECT coluna1, coluna2 FROM tabela
Variações:
SELECT * → Todas as colunas
SELECT nome → Apenas a coluna nome
SELECT nome, idade → Colunas nome e idade
No jogo:
SELECT * FROM cidadaos → Mostra todos os personagens
SELECT nome FROM cidadaos → Mostra apenas os nomes
📋 FROM - Especificar Tabela
Indica de onde vêm os dados. Sempre usado junto com SELECT.
SELECT * FROM nome_da_tabela
Tabelas disponíveis no jogo:
• cidadaos → Personagens da história
• veiculos → Veículos dos personagens
🎯 WHERE - Filtrar Resultados
Define condições para filtrar os dados. Como um filtro de pesquisa.
SELECT * FROM tabela WHERE condição
Operadores de Comparação:
= → Igual a
> → Maior que
< → Menor que
>= → Maior ou igual
<= → Menor ou igual
!= ou <> → Diferente de
Exemplos práticos:
WHERE idade > 30 → Personagens com mais de 30 anos
WHERE cidade = 'Neon-City' → Moradores de Neon-City
WHERE tipo = 'androide' → Apenas androides
🔗 AND, OR, NOT - Lógica Booleana
Combinam múltiplas condições para filtros mais específicos.
WHERE condição1 AND condição2
WHERE condição1 OR condição2
WHERE NOT condição
Como funcionam:
- AND: Ambas condições devem ser verdadeiras
- OR: Pelo menos uma condição deve ser verdadeira
- NOT: Inverte a condição (verdadeiro vira falso)
Exemplos:
WHERE tipo = 'humano' AND idade > 25 → Humanos com mais de 25 anos
WHERE cidade = 'Neon-City' OR cidade = 'Cyber-District' → Duas cidades
WHERE NOT tipo = 'robô' → Todos exceto robôs
🔎 LIKE - Busca por Padrões
Busca textos que contêm determinados caracteres. Útil quando não sabemos o texto exato.
WHERE coluna LIKE 'padrão'
Caracteres Especiais:
% → Representa qualquer sequência de caracteres
_ → Representa um único caractere
Exemplos:
WHERE nome LIKE 'X-%' → Nomes que começam com "X-"
WHERE nome LIKE '%Chen%' → Nomes que contêm "Chen"
WHERE nome LIKE '_-7%' → Nomes como "X-7", "A-7", etc.
🔗 INNER JOIN - Relacionar Tabelas
Combina dados de duas ou mais tabelas baseado em uma relação entre elas.
SELECT * FROM tabela1
INNER JOIN tabela2 ON tabela1.id = tabela2.chave_estrangeira
Exemplo no jogo:
SELECT cidadaos.nome, veiculos.modelo
FROM cidadaos
INNER JOIN veiculos ON cidadaos.id = veiculos.proprietario_id
Resultado: Lista de personagens e seus veículos
⬅️ LEFT JOIN - Incluir Dados Ausentes
Similar ao INNER JOIN, mas inclui todos os registros da tabela da esquerda, mesmo sem correspondência.
SELECT * FROM tabela1
LEFT JOIN tabela2 ON tabela1.id = tabela2.chave_estrangeira
Diferença:
• INNER JOIN: Só mostra personagens QUE TÊM veículos
• LEFT JOIN: Mostra TODOS os personagens, com ou sem veículos
🔢 COUNT - Contar Registros
Conta quantos registros existem. Útil para estatísticas.
SELECT COUNT(*) FROM tabela
SELECT COUNT(coluna) FROM tabela
Exemplos:
SELECT COUNT(*) FROM cidadaos → Total de personagens
SELECT COUNT(*) FROM cidadaos WHERE tipo = 'androide' → Total de androides
🎯 COUNT DISTINCT - Contar Únicos
Conta apenas valores diferentes (únicos) em uma coluna.
SELECT COUNT(DISTINCT coluna) FROM tabela
Exemplo:
SELECT COUNT(DISTINCT cidade) FROM cidadaos
→ Quantas cidades diferentes existem no banco
🎮 Dados do Jogo
Tabela: cidadaos
📊 Estrutura da Tabela
cidadaos
├── id (INTEGER) - Identificador único
├── nome (TEXT) - Nome do personagem
├── tipo (TEXT) - humano, androide, robô, pet-bot
├── idade (INTEGER) - Idade em anos
├── cidade (TEXT) - Cidade de residência
├── profissao (TEXT) - Profissão/função
└── status (TEXT) - ativo, desaparecido, suspeito
Tipos de Personagens:
- humano: Investigadores e testemunhas
- androide: Personagens principais da conspiração
- robô: Suspeitos secundários
- pet-bot: Companheiros digitais
Cidades do Universo:
- Neon-City: Metrópole principal
- Cyber-District: Distrito tecnológico
- Tech-Zone: Zona industrial
- Shadow-Sector: Área suspeita
Tabela: veiculos
🚗 Estrutura da Tabela
veiculos
├── id (INTEGER) - Identificador único
├── modelo (TEXT) - Modelo do veículo
├── cor (TEXT) - Cor do veículo
├── ano (INTEGER) - Ano de fabricação
└── proprietario_id (INTEGER) - ID do dono (chave estrangeira)
Tipos de Veículos Futuristas:
- Cyber-Bike: Motocicletas tecnológicas
- Hover-Car: Carros flutuantes
- Speed-Drone: Drones de transporte
- Patrol-Unit: Veículos de patrulha
🎨 Dicas Visuais para Aprender
🧠 Como Pensar em SQL
- Identifique o objetivo: O que você quer descobrir?
- Escolha a tabela: Onde estão esses dados?
- Selecione as colunas: Que informações precisa?
- Defina os filtros: Que condições aplicar?
- Execute e analise: Os resultados fazem sentido?
📝 Estrutura Mental de uma Consulta
SELECT [o que você quer ver]
FROM [onde estão os dados]
WHERE [que condições devem ser atendidas]
Traduzindo para português:
"SELECIONE [nome e idade]
DA TABELA [cidadaos]
ONDE [tipo é igual a 'androide']"
🔍 Estratégia de Investigação
- Explore primeiro:
SELECT * FROM tabela
- Entenda os dados: Que colunas existem?
- Filtre gradualmente: Adicione WHERE
- Refine a busca: Use AND, OR
- Relacione tabelas: Use JOIN quando necessário