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 TABLE
  • INSERT
  • SELECT
  • UPDATE
  • DELETE

Parte 2 — Relacionamento 1:N

  • chave estrangeira
  • JOIN

Parte 3 — Relacionamento N:M

  • tabela intermediária
  • JOIN com 3 tabelas

3. Conceitos iniciais

Tabela

É a estrutura onde os dados ficam armazenados.

Campo

É a coluna da tabela.

Registro

É cada linha da tabela.

Exemplo:

idnomecidade
1CarlosRibeirã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

  1. Criar a tabela alunos
  2. Inserir 3 alunos
  3. Consultar todos
  4. Consultar apenas nome e cidade
  5. Alterar a cidade de um aluno
  6. 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.id com p.id_categoria

Resultado esperado

descricaoprecocategoria
Mouse USB45.00Periféricos
Notebook3200.00Informática

Benefício do JOIN

Transforma códigos em informação legível.

Sem JOIN:

descricaoprecoid_categoria
Mouse USB45.001

Com JOIN:

descricaoprecocategoria
Mouse USB45.00Periféricos

14. Exercício rápido da segunda parte

  1. Criar categorias
  2. Criar produtos
  3. Inserir 2 categorias
  4. Inserir 2 produtos
  5. Fazer o JOIN para 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

alunocurso
CarlosSQLite
CarlosPython
AnaSQLite

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;