Domina los comandos fundamentales de SQL: crea tablas, inserta datos, consulta con filtros, combina tablas con JOIN y agrega resultados.
El comando CREATE TABLE forma parte de la DDL (Data Definition Language), el subconjunto de SQL responsable de definir la estructura de la base de datos. Con él creas tablas y defines columnas, tipos de datos y restricciones. Es el primer paso antes de cualquier operación con datos.
NUMERIC(10,2) = hasta 10 dígitos, 2 decimales.Al crear una tabla, defines restricciones directamente en las columnas: PRIMARY KEY identifica el registro, NOT NULL impide los valores vacíos, UNIQUE impide los duplicados, REFERENCES crea una clave foránea y DEFAULT define un valor predeterminado.
CREATE TABLE cliente (
id SERIAL PRIMARY KEY,
nome TEXT NOT NULL,
email TEXT UNIQUE
);
CREATE TABLE pedido (
id SERIAL PRIMARY KEY,
cliente_id INT REFERENCES cliente(id),
total NUMERIC(10,2) NOT NULL,
criado_em TIMESTAMP DEFAULT NOW()
);
Después de crear la estructura, necesitas llenar las tablas. El INSERT agrega nuevos registros y el UPDATE modifica registros existentes. Juntos con DELETE, forman las operaciones CRUD (Create, Read, Update, Delete): la base de cualquier aplicación.
Un UPDATE sin cláusula WHERE modifica todos los registros de la tabla. Incluye siempre WHERE para limitar el alcance. Antes de ejecutar un UPDATE, ejecuta un SELECT con el mismo WHERE para confirmar qué registros se verán afectados.
-- Inserindo um registro
INSERT INTO cliente (nome, email)
VALUES ('Ana Silva', 'ana@example.com');
-- Inserindo multiplos registros de uma vez
INSERT INTO cliente (nome, email)
VALUES ('Carlos Lima', 'carlos@example.com'),
('Maria Santos', 'maria@example.com');
-- Atualizando um registro especifico
UPDATE cliente
SET email = 'ana.silva@example.com'
WHERE id = 1;
O SELECT es el comando más usado de SQL. Lee datos de las tablas y devuelve resultados filtrados, ordenados y limitados según lo que necesitas. La cláusula WHERE filtra qué filas deben aparecer en el resultado.
* para todas (evítalo en producción).=, !=, >, <, LIKE, IS NULL, IN.ASC (predeterminado) o DESC.Combina condiciones con AND (ambas deben ser verdaderas), OR (al menos una verdadera) y NOT (invierte la condición). Usa paréntesis para controlar la precedencia cuando combines AND y OR.
-- Selecionar colunas especificas com filtro
SELECT nome, email
FROM cliente
WHERE email IS NOT NULL;
-- Filtrar, ordenar e limitar
SELECT *
FROM pedido
WHERE total > 100
ORDER BY criado_em DESC
LIMIT 10;
-- Combinando condicoes com AND e operadores
SELECT nome
FROM cliente
WHERE email LIKE '%example.com'
AND nome != 'Ana Silva';
En el modelo relacional, los datos se distribuyen en varias tablas. El JOIN combina filas de dos o más tablas según una condición de relación (generalmente clave foránea = clave primaria). Esto es lo que le da poder real a SQL.
Usa alias (nombres alternativos) para las tablas: FROM cliente c permite referenciar como c.nome en lugar de cliente.nome. Esto es especialmente útil cuando unes varias tablas y las columnas tienen nombres ambiguos.
-- INNER JOIN: clientes que TEM pedidos
SELECT c.nome, p.total, p.criado_em
FROM cliente c
INNER JOIN pedido p ON p.cliente_id = c.id
ORDER BY p.total DESC;
-- LEFT JOIN: TODOS os clientes, mesmo sem pedidos
-- COALESCE substitui NULL por 0
SELECT c.nome, COALESCE(SUM(p.total), 0) AS total_gasto
FROM cliente c
LEFT JOIN pedido p ON p.cliente_id = c.id
GROUP BY c.nome;
Las funciones de agregación transforman muchas filas en un único resultado resumido. El GROUP BY agrupa las filas que comparten un valor en común, y las funciones de agregación operan sobre cada grupo. Así es como generas informes y estadísticas directamente en SQL.
WHERE filtra filas individuales antes de la agrupación. HAVING filtra grupos después de la agregación. Ejemplo: "muestra clientes que gastaron más de R$500" usa HAVING, porque el total se calcula con SUM después de GROUP BY.
-- Resumo por cliente: contagem, soma e media
SELECT cliente_id,
COUNT(*) AS num_pedidos,
SUM(total) AS total,
AVG(total) AS media
FROM pedido
GROUP BY cliente_id
HAVING SUM(total) > 500;
O DELETE elimina registros permanentemente. Es un comando potente y peligroso: sin WHERE, borra todo de la tabla. En la práctica, muchas aplicaciones prefieren el patrón soft delete, que marca el registro como eliminado en lugar de borrarlo realmente.
DELETE FROM tabela WHERE ... Elimina permanentemente. Úsalo para datos temporales o cuando la normativa lo exija.deletado_em TIMESTAMP. En lugar de eliminar, haz un UPDATE que marque la fecha. Los datos permanecen en la base de datos para la auditoría.-- SEGURO: sempre com WHERE
DELETE FROM pedido WHERE id = 5;
-- SOFT DELETE (recomendado)
-- Passo 1: adicione a coluna de controle
ALTER TABLE cliente ADD COLUMN deletado_em TIMESTAMP;
-- Passo 2: em vez de deletar, marque a data
UPDATE cliente SET deletado_em = NOW() WHERE id = 3;
-- Nas consultas, filtre os "deletados":
-- SELECT * FROM cliente WHERE deletado_em IS NULL;