Exercicios de revisado
1. Criar tabela
CREATE TABLE usuarios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
email TEXT,
idade INTEGER,
ativo INTEGER DEFAULT 1,
dtcad TEXT DEFAULT CURRENT_TIMESTAMP
);
No SQLite, os tipos mais usados são:
INTEGER
TEXT
REAL
BLOB
NUMERIC
2. Inserir dados
INSERT INTO usuarios (nome, email, idade)
VALUES ('Marcelo', 'marcelo@email.com', 45);
Inserir vários registros:
INSERT INTO usuarios (nome, email, idade)
VALUES
('João', 'joao@email.com', 30),
('Maria', 'maria@email.com', 25);
3. Consultar dados
SELECT * FROM usuarios;
Selecionar campos específicos:
SELECT id, nome, email
FROM usuarios;
Com filtro:
SELECT *
FROM usuarios
WHERE ativo = 1;
Com ordenação:
SELECT *
FROM usuarios
ORDER BY nome ASC;
Limitar resultados:
SELECT *
FROM usuarios
LIMIT 10;
4. Atualizar dados
UPDATE usuarios
SET nome = 'Marcelo Maurin',
email = 'novo@email.com'
WHERE id = 1;
Sempre use WHERE, senão atualiza todos os registros.
5. Excluir dados
DELETE FROM usuarios
WHERE id = 1;
Excluir todos os registros:
DELETE FROM usuarios;
6. Criar índice
CREATE INDEX idx_usuarios_nome
ON usuarios (nome);
Índice único:
CREATE UNIQUE INDEX idx_usuarios_email
ON usuarios (email);
7. Alterar tabela
Adicionar coluna:
ALTER TABLE usuarios
ADD COLUMN telefone TEXT;
Renomear tabela:
ALTER TABLE usuarios
RENAME TO pessoas;
Renomear coluna:
ALTER TABLE pessoas
RENAME COLUMN telefone TO celular;
8. Apagar tabela
DROP TABLE usuarios;
Apagar somente se existir:
DROP TABLE IF EXISTS usuarios;
9. Verificar tabelas existentes
SELECT name
FROM sqlite_master
WHERE type = 'table';
Ver estrutura da tabela:
PRAGMA table_info(usuarios);
10. Chave estrangeira
CREATE TABLE ordens_servico (
id INTEGER PRIMARY KEY AUTOINCREMENT,
id_usuario INTEGER NOT NULL,
descricao TEXT,
dtcad TEXT DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (id_usuario) REFERENCES usuarios(id)
);
Ativar suporte a chave estrangeira:
PRAGMA foreign_keys = ON;
11. JOIN entre tabelas
SELECT
os.id,
os.descricao,
u.nome AS usuario
FROM ordens_servico os
LEFT JOIN usuarios u ON u.id = os.id_usuario;
12. Funções úteis
Contar registros:
SELECT COUNT(*) FROM usuarios;
Maior valor:
SELECT MAX(id) FROM usuarios;
Menor valor:
SELECT MIN(id) FROM usuarios;
Média:
SELECT AVG(idade) FROM usuarios;
Soma:
SELECT SUM(idade) FROM usuarios;
13. Agrupamento
SELECT ativo, COUNT(*) AS total
FROM usuarios
GROUP BY ativo;
Com filtro no agrupamento:
SELECT ativo, COUNT(*) AS total
FROM usuarios
GROUP BY ativo
HAVING COUNT(*) > 5;
14. Busca com LIKE
SELECT *
FROM usuarios
WHERE nome LIKE '%Marcelo%';
Começa com:
SELECT *
FROM usuarios
WHERE nome LIKE 'Mar%';
Termina com:
SELECT *
FROM usuarios
WHERE nome LIKE '%lo';
15. Datas no SQLite
Data atual:
SELECT date('now');
Data e hora atual:
SELECT datetime('now');
Data/hora local:
SELECT datetime('now', 'localtime');
Usando em tabela:
INSERT INTO usuarios (nome, dtcad)
VALUES ('Marcelo', datetime('now', 'localtime'));
16. Transação
BEGIN TRANSACTION;INSERT INTO usuarios (nome) VALUES ('Teste 1');
INSERT INTO usuarios (nome) VALUES ('Teste 2');COMMIT;
Cancelar:
ROLLBACK;
17. UPSERT
Insere ou atualiza se já existir:
INSERT INTO usuarios (id, nome, email)
VALUES (1, 'Marcelo', 'marcelo@email.com')
ON CONFLICT(id) DO UPDATE SET
nome = excluded.nome,
email = excluded.email;
18. Apagar dados e reiniciar AUTOINCREMENT
DELETE FROM usuarios;DELETE FROM sqlite_sequence
WHERE name = 'usuarios';
19. Ver SQL usado para criar tabela
SELECT sql
FROM sqlite_master
WHERE type = 'table'
AND name = 'usuarios';
20. Modelo básico para seus sistemas
CREATE TABLE exemplo (
id INTEGER PRIMARY KEY AUTOINCREMENT,
descricao TEXT NOT NULL,
ativo INTEGER DEFAULT 1,
dtcad TEXT DEFAULT CURRENT_TIMESTAMP,
dtalt TEXT
);
Para alterar:
UPDATE exemplo
SET descricao = 'Nova descrição',
dtalt = datetime('now', 'localtime')
WHERE id = 1;
Esse é o conjunto principal que você mais vai usar no SQLite com Lazarus, PHP ou Python.
