Treinamento de Comandos SQL
INSERT, SELECT, UPDATE, DELETE, relacionamentos e JOINs
1. Objetivo da aula
Nesta aula, o aluno vai aprender:
- como criar tabelas no SQLite
- a sintaxe dos principais comandos SQL
- como inserir dados com
INSERT - como consultar dados com
SELECT - como alterar dados com
UPDATE - como excluir dados com
DELETE - como funciona relacionamento entre tabelas
- como usar
JOIN
2. Organização da aula em 100 minutos
Parte 1 — Tabela simples
CREATE TABLEINSERTSELECTUPDATEDELETE
Parte 2 — Relacionamento 1:N
- chave estrangeira
JOIN
Parte 3 — Relacionamento N:M
- tabela intermediária
JOINcom 3 tabelas
3. Conceitos iniciais
Tabela
É a estrutura onde os dados ficam armazenados.
Campo
É a coluna da tabela.
Registro
É cada linha da tabela.
Exemplo:
| id | nome | cidade |
|---|---|---|
| 1 | Carlos | Ribeirão Preto |
PARTE 1 — TABELA SIMPLES
4. CREATE TABLE
Sintaxe
CREATE TABLE nome_tabela (
campo1 tipo restricoes,
campo2 tipo restricoes,
campo3 tipo restricoes
);
Explicação didática
O comando CREATE TABLE serve para criar a estrutura da tabela.
Nele definimos:
- o nome da tabela
- os nomes dos campos
- os tipos dos campos
- as regras de preenchimento
Exemplo
CREATE TABLE alunos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome VARCHAR(100) NOT NULL,
idade INTEGER,
cidade VARCHAR(100)
);
Explicação do exemplo
id INTEGER PRIMARY KEY AUTOINCREMENT
- campo numérico
- chave primária
- valor automático
nome VARCHAR(100) NOT NULL
- texto com até 100 caracteres
- preenchimento obrigatório
idade INTEGER
- número inteiro
cidade VARCHAR(100)
- texto
5. INSERT
Sintaxe
INSERT INTO nome_tabela (campo1, campo2, campo3)
VALUES (valor1, valor2, valor3);
Explicação didática
O comando INSERT serve para adicionar registros novos na tabela.
A lógica é:
- informar em qual tabela será feita a inserção
- informar quais campos serão preenchidos
- informar os valores correspondentes
Exemplo
INSERT INTO alunos (nome, idade, cidade)
VALUES ('Carlos Silva', 20, 'Ribeirão Preto');
O que esse comando faz
Insere um novo aluno com:
- nome = Carlos Silva
- idade = 20
- cidade = Ribeirão Preto
Mais dois registros:
INSERT INTO alunos (nome, idade, cidade)
VALUES ('Ana Souza', 18, 'Sertãozinho');INSERT INTO alunos (nome, idade, cidade)
VALUES ('Marcos Lima', 22, 'Cravinhos');
6. SELECT
Sintaxe básica
SELECT campos
FROM nome_tabela;
Sintaxe com filtro
SELECT campos
FROM nome_tabela
WHERE condicao;
Sintaxe com ordenação
SELECT campos
FROM nome_tabela
ORDER BY campo;
Explicação didática
O SELECT é usado para consultar os dados.
Ele responde perguntas como:
- quais registros existem?
- quais alunos moram em uma cidade?
- quais produtos pertencem a uma categoria?
Exemplo 1 — Todos os campos
SELECT * FROM alunos;
Explicação
*significa todos os campos
Exemplo 2 — Alguns campos
SELECT nome, cidade
FROM alunos;
Explicação
Aqui mostramos apenas:
- nome
- cidade
Exemplo 3 — Com filtro
SELECT *
FROM alunos
WHERE cidade = 'Ribeirão Preto';
Explicação
O WHERE serve para filtrar os dados.
Exemplo 4 — Ordenando
SELECT *
FROM alunos
ORDER BY nome;
Explicação
Organiza os resultados pelo nome.
7. UPDATE
Sintaxe
UPDATE nome_tabela
SET campo1 = valor1, campo2 = valor2
WHERE condicao;
Explicação didática
O UPDATE serve para alterar registros já cadastrados.
A lógica é:
- escolher a tabela
- dizer qual campo será alterado
- indicar qual registro sofrerá a alteração
Exemplo
UPDATE alunos
SET cidade = 'São Paulo'
WHERE id = 1;
O que esse comando faz
Altera a cidade do aluno com id = 1.
Atenção importante
Sem WHERE, todos os registros seriam alterados.
Exemplo perigoso:
UPDATE alunos
SET cidade = 'São Paulo';
8. DELETE
Sintaxe
DELETE FROM nome_tabela
WHERE condicao;
Explicação didática
O DELETE serve para remover registros da tabela.
A lógica é:
- indicar de qual tabela os dados serão removidos
- indicar qual registro será apagado
Exemplo
DELETE FROM alunos
WHERE id = 3;
O que esse comando faz
Exclui o aluno com id = 3.
Atenção importante
Sem WHERE, todos os registros seriam removidos.
DELETE FROM alunos;
9. Exercício rápido da primeira parte
- Criar a tabela
alunos - Inserir 3 alunos
- Consultar todos
- Consultar apenas nome e cidade
- Alterar a cidade de um aluno
- Excluir um aluno
PARTE 2 — RELACIONAMENTO 1:N
10. O que é relacionamento 1:N
Relacionamento 1:N significa:
- um registro de uma tabela pode estar ligado a vários registros de outra
Exemplo:
- uma categoria pode ter vários produtos
Vendo ao contrário:
- vários produtos pertencem a uma categoria
Isso também pode ser visto como N:1.
11. CREATE TABLE com chave estrangeira
Sintaxe
CREATE TABLE tabela_filha (
campo_id INTEGER PRIMARY KEY AUTOINCREMENT,
campo_texto VARCHAR(100),
id_tabela_pai INTEGER,
FOREIGN KEY (id_tabela_pai) REFERENCES tabela_pai(id)
);
Explicação didática
A chave estrangeira cria um vínculo entre tabelas.
Ela serve para dizer:
- este registro pertence a outro registro de outra tabela
Exemplo das tabelas
Tabela categorias
CREATE TABLE categorias (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome VARCHAR(100) NOT NULL
);
Tabela produtos
CREATE TABLE produtos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
descricao VARCHAR(100) NOT NULL,
preco NUMERIC,
id_categoria INTEGER,
FOREIGN KEY (id_categoria) REFERENCES categorias(id)
);
12. INSERT no relacionamento 1:N
Sintaxe
INSERT INTO nome_tabela (campo1, campo2)
VALUES (valor1, valor2);
Exemplo
Inserindo categorias
INSERT INTO categorias (nome)
VALUES ('Periféricos');INSERT INTO categorias (nome)
VALUES ('Informática');
Inserindo produtos
INSERT INTO produtos (descricao, preco, id_categoria)
VALUES ('Mouse USB', 45.00, 1);INSERT INTO produtos (descricao, preco, id_categoria)
VALUES ('Notebook', 3200.00, 2);
Explicação didática
No produto, o campo id_categoria aponta para a categoria correspondente.
- Mouse USB pertence à categoria 1
- Notebook pertence à categoria 2
13. JOIN
Sintaxe do INNER JOIN
SELECT campos
FROM tabela1
INNER JOIN tabela2 ON tabela2.campo = tabela1.campo_relacionado;
Explicação didática
O JOIN serve para unir tabelas relacionadas.
Sem JOIN, os dados ficam separados.
Com JOIN, conseguimos enxergar a informação completa.
Exemplo
SELECT p.descricao, p.preco, c.nome AS categoria
FROM produtos p
INNER JOIN categorias c ON c.id = p.id_categoria;
Explicação do exemplo
- começamos pela tabela
produtos - unimos com a tabela
categorias - ligamos
c.idcomp.id_categoria
Resultado esperado
| descricao | preco | categoria |
|---|---|---|
| Mouse USB | 45.00 | Periféricos |
| Notebook | 3200.00 | Informática |
Benefício do JOIN
Transforma códigos em informação legível.
Sem JOIN:
| descricao | preco | id_categoria |
|---|---|---|
| Mouse USB | 45.00 | 1 |
Com JOIN:
| descricao | preco | categoria |
|---|---|---|
| Mouse USB | 45.00 | Periféricos |
14. Exercício rápido da segunda parte
- Criar
categorias - Criar
produtos - Inserir 2 categorias
- Inserir 2 produtos
- Fazer o
JOINpara listar produto e categoria
PARTE 3 — RELACIONAMENTO N:M
15. O que é relacionamento N:M
Relacionamento N:M significa:
- muitos registros de uma tabela se ligam a muitos registros de outra
Exemplo:
- um aluno pode fazer vários cursos
- um curso pode ter vários alunos
Para isso, usamos uma tabela intermediária.
16. CREATE TABLE para N:M
Sintaxe
CREATE TABLE tabela_intermediaria (
id_tabela1 INTEGER NOT NULL,
id_tabela2 INTEGER NOT NULL,
PRIMARY KEY (id_tabela1, id_tabela2),
FOREIGN KEY (id_tabela1) REFERENCES tabela1(id),
FOREIGN KEY (id_tabela2) REFERENCES tabela2(id)
);
Explicação didática
A tabela intermediária guarda os vínculos entre as duas tabelas principais.
Exemplo
CREATE TABLE alunos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome VARCHAR(100) NOT NULL
);
CREATE TABLE cursos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome VARCHAR(100) NOT NULL
);
CREATE TABLE alunos_cursos (
id_aluno INTEGER NOT NULL,
id_curso INTEGER NOT NULL,
PRIMARY KEY (id_aluno, id_curso),
FOREIGN KEY (id_aluno) REFERENCES alunos(id),
FOREIGN KEY (id_curso) REFERENCES cursos(id)
);
17. INSERT no relacionamento N:M
Sintaxe
INSERT INTO tabela_intermediaria (campo1, campo2)
VALUES (valor1, valor2);
Exemplo
Inserindo alunos
INSERT INTO alunos (nome)
VALUES ('Carlos');
INSERT INTO alunos (nome)
VALUES ('Ana');
Inserindo cursos
INSERT INTO cursos (nome)
VALUES ('SQLite');
INSERT INTO cursos (nome)
VALUES ('Python');
Relacionando aluno e curso
INSERT INTO alunos_cursos (id_aluno, id_curso)
VALUES (1, 1);
INSERT INTO alunos_cursos (id_aluno, id_curso)
VALUES (1, 2);
INSERT INTO alunos_cursos (id_aluno, id_curso)
VALUES (2, 1);
Explicação didática
- Carlos faz SQLite
- Carlos faz Python
- Ana faz SQLite
18. JOIN no relacionamento N:M
Sintaxe
SELECT campos
FROM tabela_intermediaria
INNER JOIN tabela1 ON ...
INNER JOIN tabela2 ON ...;
Exemplo
SELECT a.nome AS aluno, c.nome AS curso
FROM alunos_cursos ac
INNER JOIN alunos a ON a.id = ac.id_aluno
INNER JOIN cursos c ON c.id = ac.id_curso;
Explicação do exemplo
A consulta:
- pega os vínculos na tabela intermediária
- busca o nome do aluno
- busca o nome do curso
Resultado esperado
| aluno | curso |
|---|---|
| Carlos | SQLite |
| Carlos | Python |
| Ana | SQLite |
19. Benefícios dos relacionamentos e JOINs
Organização
Evita repetição de dados
Menos erro
Evita escrever a mesma informação várias vezes
Melhor manutenção
Uma alteração em uma tabela reflete nas consultas
Relatórios melhores
Permite cruzar dados e enxergar melhor a informação
20. Resumo final para revisão
CREATE TABLE
CREATE TABLE nome_tabela (
campo1 tipo,
campo2 tipo
);
INSERT
INSERT INTO nome_tabela (campo1, campo2)
VALUES (valor1, valor2);
SELECT
SELECT campos
FROM nome_tabela;
UPDATE
UPDATE nome_tabela
SET campo = valor
WHERE condicao;
DELETE
DELETE FROM nome_tabela
WHERE condicao;
INNER JOIN
SELECT campos
FROM tabela1
INNER JOIN tabela2 ON tabela2.id = tabela1.id_relacionado;
