Fundamentos SQL
-- Criar base de dados
CREATE DATABASE loja;
-- Criar tabela
CREATE TABLE produtos (
id INT PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
preco DECIMAL(10,2),
data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Operações Básicas
SELECT- selecionar dadosINSERT- inserir registosUPDATE- atualizarDELETE- eliminarWHERE- filtrar
Filtros & Ordenação
ORDER BY- ordenarLIMIT- limitar resultadosDISTINCT- valores únicosBETWEEN- intervaloIN- lista de valores
Agregação
COUNT()- contarSUM()- somarAVG()- médiaMIN()/MAX()- mínimo/máximoGROUP BY- agrupar
Joins & Relações
Tipos de JOIN
INNER JOIN- interseçãoLEFT JOIN- todo o lado esquerdoRIGHT JOIN- todo o lado direitoFULL JOIN- ambosSELF JOIN- auto junção
Subqueries
- Consultas dentro de consultas
WHERE id IN (SELECT...)EXISTS- existênciaANY/ALL- comparação- CTEs (WITH)
Normalização
- 1NF - atomicidade
- 2NF - chaves primárias
- 3NF - sem dependências
- BCNF - forma normal de Boyce
- Foreign Keys
SQL Injection
# Vulnerável (Python)
query = "SELECT * FROM users WHERE user='" + user_input + "'"
# Input malicioso
user_input = "' OR '1'='1"
# Resultado: SELECT * FROM users WHERE user='' OR '1'='1'
# Seguro (Python com prepared statements)
cursor.execute("SELECT * FROM users WHERE user=%s", (user_input,))
Administração & SGBDs
PostgreSQL
- psql - cliente terminal
- pg_dump - backup
- pg_restore - restaurar
- CREATE USER...
- GRANT/REVOKE
MySQL/MariaDB
- mysql - cliente
- mysqldump - backup
- CREATE USER...
- FLUSH PRIVILEGES
- SHOW PROCESSLIST
Segurança
- Password hashing
- Least privilege
- Input validation
- Prepared statements
- Audit logs
Comandos Úteis
-- PostgreSQL: Listar bases
\l
-- Listar tabelas
\dt
-- Descrever tabela
\d nome_tabela
-- Criar índice
CREATE INDEX idx_nome ON tabela(coluna);
-- Ver plano de execução
EXPLAIN ANALYZE SELECT * FROM tabela;