🗄️ BASES DE DADOS

SQL & Bases de Dados

Consultas SQL, modelação de dados, administração de bases de dados e segurança em SQL.

← Voltar ao início

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 dados
  • INSERT - inserir registos
  • UPDATE - atualizar
  • DELETE - eliminar
  • WHERE - filtrar

Filtros & Ordenação

  • ORDER BY - ordenar
  • LIMIT - limitar resultados
  • DISTINCT - valores únicos
  • BETWEEN - intervalo
  • IN - lista de valores

Agregação

  • COUNT() - contar
  • SUM() - somar
  • AVG() - média
  • MIN()/MAX() - mínimo/máximo
  • GROUP BY - agrupar

Joins & Relações

Tipos de JOIN

  • INNER JOIN - interseção
  • LEFT JOIN - todo o lado esquerdo
  • RIGHT JOIN - todo o lado direito
  • FULL JOIN - ambos
  • SELF JOIN - auto junção

Subqueries

  • Consultas dentro de consultas
  • WHERE id IN (SELECT...)
  • EXISTS - existência
  • ANY/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;