📘 Semana 2 – CREATE, INSERT e SELECT

🛠️ Tópico 1 - Comando CREATE

O comando CREATE TABLE é utilizado para criar uma nova tabela em um banco de dados. Ele define o nome da tabela, os nomes das colunas, seus tipos de dados e as restrições de integridade. Esse comando pertence à categoria DDL – Data Definition Language, usada para definir a estrutura do banco.


📌 Exemplo básico:
CREATE TABLE alunos (
    id INTEGER PRIMARY KEY,
    nome TEXT,
    idade INTEGER,
    status TEXT DEFAULT 'ativo'
);

Esse exemplo cria uma tabela chamada alunos com quatro colunas:

  • id – identificador único do aluno.
  • nome – nome do aluno.
  • idade – idade do aluno.
  • status – situação do aluno, com valor padrão 'ativo'.

📊 Tipos de Dados mais comuns
  • INTEGER – números inteiros
  • REAL – números decimais
  • TEXT – textos e palavras
  • BLOB – dados binários (ex: imagens)
  • BOOLEAN – verdadeiro (1) ou falso (0)

🔐 Chave Primária e Autoincremento

Para gerar IDs automaticamente, usamos AUTOINCREMENT com INTEGER PRIMARY KEY:

CREATE TABLE alunos (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    nome TEXT NOT NULL,
    idade INTEGER,
    status TEXT DEFAULT 'ativo'
);

Com isso, o banco atribui um número crescente à coluna id sempre que um novo aluno é inserido.


✨ Valores Padrão com DEFAULT

Você pode definir um valor padrão para uma coluna. Se ela for omitida no INSERT, o valor padrão será usado:

CREATE TABLE produtos (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    nome TEXT NOT NULL,
    preco REAL DEFAULT 0.0
);

Agora veja esse INSERT omitindo o preco:

INSERT INTO produtos (nome) VALUES ('Caneta');
📦 Resultado da tabela produtos:
id nome preco
1 Caneta 0.0

✅ Isso evita erros quando a coluna é obrigatória mas nem sempre o dado está disponível.

⚠️ Atenção: se você tentar omitir uma coluna obrigatória (sem DEFAULT ou NULL), ocorrerá erro:

INSERT INTO produtos (preco) VALUES (2.50);
-- ERRO: a coluna 'nome' é obrigatória

✅ Boas práticas
  • Defina sempre uma PRIMARY KEY
  • Use NOT NULL para campos obrigatórios
  • Use DEFAULT para valores automáticos
  • Evite usar tipos genéricos demais
  • Use nomes curtos e sem espaços

🧪 Desafio prático

Crie a tabela livros com os seguintes campos:

  • id – INTEGER, chave primária autoincremento
  • titulo – TEXT, obrigatório
  • autor – TEXT
  • ano_publicacao – INTEGER
  • estoque – INTEGER, com valor padrão 10
CREATE TABLE livros (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    titulo TEXT NOT NULL,
    autor TEXT,
    ano_publicacao INTEGER,
    estoque INTEGER DEFAULT 10
);
📚 Exemplo após inserir apenas título e autor:
INSERT INTO livros (titulo, autor) 
VALUES ('Memórias Póstumas', 'Machado de Assis');
id titulo autor ano_publicacao estoque
1 Memórias Póstumas Machado de Assis NULL 10
➕ Tópico 2 - Comando INSERT

O comando INSERT INTO é utilizado para adicionar novos registros (linhas) a uma tabela existente. Ele pertence à categoria DML – Data Manipulation Language, que lida com a manipulação de dados no banco.


📌 Sintaxe básica:
INSERT INTO nome_da_tabela (coluna1, coluna2, ...)
VALUES (valor1, valor2, ...);

Você deve indicar os nomes das colunas e fornecer os respectivos valores.


✅ Exemplo prático:
INSERT INTO alunos (id, nome, idade, status)
VALUES (1, 'Maria', 17, 'ativo');
  • id = 1
  • nome = 'Maria'
  • idade = 17
  • status = 'ativo'
📋 Resultado da tabela alunos:
id nome idade status
1 Maria 17 ativo

📦 Inserindo múltiplos registros:
INSERT INTO alunos (nome, idade)
VALUES 
  ('João', 18),
  ('Ana', 16),
  ('Carlos', 19);
📋 Tabela alunos atualizada:
id nome idade status
2 João 18 ativo
3 Ana 16 ativo
4 Carlos 19 ativo

❌ Erros comuns ao usar INSERT:
  • Faltando valores:
    INSERT INTO alunos (nome, idade)
    VALUES ('Paulo'); 
    -- ERRO: falta valor para a coluna idade
  • Chave primária repetida:
    INSERT INTO alunos (id, nome, idade)
    VALUES (1, 'Bruna', 18); 
    -- ERRO: id 1 já existe
  • Tipo de dado incorreto:
    INSERT INTO alunos (nome, idade)
    VALUES ('Pedro', 'dezessete'); 
    -- ERRO: idade deve ser um número

💬 Reforçando: e se uma coluna tiver valor padrão (DEFAULT)?

No tópico anterior, vimos que é possível definir um valor padrão para uma coluna ao criar a tabela, como:

status TEXT DEFAULT 'ativo'

Quando uma coluna tem DEFAULT, você pode omití-la no INSERT — o valor padrão será usado automaticamente:

INSERT INTO alunos (nome, idade)
VALUES ('Lúcia', 20);
📋 Resultado da tabela (campo status preenchido automaticamente):
id nome idade status
5 Lúcia 20 ativo

❗ Atenção: se a coluna for NOT NULL e não tiver DEFAULT, o valor é obrigatório:

INSERT INTO alunos (idade)
VALUES (22); 
-- ERRO: a coluna 'nome' é obrigatória e não possui valor padrão

💡 Boas práticas com INSERT:
  • Use aspas simples para valores TEXT (ex: 'João')
  • Respeite a ordem das colunas e os tipos de dados
  • O campo id pode ser omitido se for AUTOINCREMENT
  • Evite omitir campos obrigatórios sem valor padrão
🔍 Tópico 3 - Comando SELECT

O comando SELECT é utilizado para consultar os dados armazenados em tabelas. Ele pertence à categoria DQL – Data Query Language, usada para recuperar informações de forma organizada.


📌 Sintaxe básica:
SELECT colunas
FROM nome_da_tabela;

Você pode escolher quais colunas deseja visualizar ou usar * para trazer todas.


✅ Exemplo prático – todos os registros:
SELECT * FROM alunos;

Esse comando retorna todas as colunas e todos os registros da tabela alunos:

👁️ Resultado:
id nome idade status
1 Maria 17 ativo
2 João 18 ativo
3 Ana 16 ativo
4 Carlos 19 ativo
5 Lúcia 20 ativo

🎯 Selecionando colunas específicas:

Você pode buscar apenas algumas colunas da tabela:

SELECT nome, idade FROM alunos;
📋 Resultado:
nome idade
Maria 17
João 18
Ana 16
Carlos 19
Lúcia 20

🔎 Filtrando resultados com WHERE:

Use o WHERE para buscar registros com uma condição específica:

SELECT * FROM alunos
WHERE idade >= 18;
📌 Resultado – Alunos com 18 anos ou mais:
id nome idade status
2 João 18 ativo
4 Carlos 19 ativo
5 Lúcia 20 ativo

📊 Ordenando resultados com ORDER BY:

Você pode ordenar os registros por uma ou mais colunas:

SELECT nome, idade FROM alunos
ORDER BY idade DESC;

O DESC ordena do maior para o menor. Para ordem crescente (padrão), use ASC ou simplesmente omita.

⬇️ Resultado – Alunos do mais velho ao mais novo:
nome idade
Lúcia 20
Carlos 19
João 18
Maria 17
Ana 16

💡 Dicas úteis:
  • Use * apenas quando quiser visualizar todas as colunas.
  • O WHERE pode usar operadores como =, >, <, >=, <=, != e LIKE.
    ➡️ Esses operadores serão explicados com mais detalhes na próxima aula.
  • Você pode combinar WHERE com ORDER BY para refinar ainda mais os resultados.
    ➡️ Essa combinação também será aprofundada na próxima aula.

🧪 Pratique agora:

Tente consultar:

  • Somente os nomes dos alunos com menos de 18 anos
  • Todos os alunos em ordem alfabética
  • Alunos com nome começando por "C"
SELECT nome FROM alunos WHERE idade < 18;

SELECT * FROM alunos ORDER BY nome;

SELECT * FROM alunos WHERE nome LIKE 'C%';
🎲 Tópico 4 - Atividade Interativa: Banco de Dados da Galera

Agora que você aprendeu os comandos CREATE, INSERT e SELECT, que tal montar um banco de dados divertido com a sua turma?


🎯 Desafio:

O professor irá criar a tabela no ambiente de prática e compartilhar com a turma. Cada aluno deverá enviar um comando INSERT com seus dados através da plataforma Mentimeter (ou outro canal combinado).

Vamos construir juntos uma tabela chamada galera com informações curiosas (e respeitosas) dos colegas.

📦 Estrutura da tabela:
CREATE TABLE galera (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  nome TEXT NOT NULL,
  comida_favorita TEXT,
  hobby TEXT,
  idade INTEGER
);

🎉 Use sua criatividade nas respostas, o importante é participar e praticar SQL!

✅ Exemplo de comando a ser enviado:
INSERT INTO galera (nome, comida_favorita, hobby, idade)
VALUES ('Carlos', 'Lasanha', 'Jogar futebol', 16);

👀 Como vai funcionar:
  1. O professor compartilhará um link do Mentimeter (ou Google Forms, Padlet, etc.)
  2. Você irá escrever seu comando INSERT com seus dados
  3. O professor irá copiar e colar os comandos no banco de dados compartilhado e mostrar os resultados na tela

🔎 Consultando os colegas:

Depois que todos inserirem seus dados, vamos explorar juntos com consultas SQL, como:

  • SELECT * FROM galera; – Veja todos os dados da turma
  • SELECT nome, hobby FROM galera; – Descubra o hobby de cada um
  • SELECT nome FROM galera WHERE comida_favorita = 'Pizza'; – Quem ama pizza?

🏆 Bônus:

Experimente criar consultas para responder perguntas como:

  • Quem tem mais de 16 anos?
  • Quem gosta de desenhar?
  • Qual é a comida mais popular da turma?
💬 Dica: No final da atividade, cada aluno pode apresentar uma consulta SQL e explicar o que ela retorna. Vamos aprender juntos praticando!