Aprende SQL · lección gratuita
INSERT agrega filas nuevas a una tabla. Es la primera operación del DML (Data Manipulation Language) que crea datos. En este curso trabajamos siempre sobre tablas temporales para no mutar la semilla, pero la sintaxis es idéntica sobre cualquier tabla.
INSERT INTO t (col1, col2) VALUES (v1, v2) — nombra las columnas y da un valor por cada una en el mismo orden. Es la forma recomendada: no se rompe si cambia el orden físico de columnas.INSERT INTO t VALUES (...) exige un valor para todas las columnas, en el orden exacto de la definición. Frágil; evítalo en producción.VALUES (...), (...), (...). Es más rápido y atómico que muchos INSERT sueltos.INSERT ... SELECT: inserta el resultado de una consulta. Sirve para copiar/transformar datos de otra tabla: INSERT INTO destino (a, b) SELECT x, y FROM origen WHERE ....DEFAULT (o NULL si lo permiten). Una INTEGER PRIMARY KEY en SQLite se autoincrementa si la omites o pasas NULL.El orden de los valores debe coincidir posicionalmente con la lista de columnas, no con la definición de la tabla. Por eso INSERT INTO empleados (nombre, salario) VALUES ('Ana', 5000) funciona aunque salario esté antes o después en la tabla.
Errores comunes:
table X has N columns but M values were supplied.NOT NULL sin DEFAULT → NOT NULL constraint failed.UNIQUE constraint failed.INSERT ... SELECT no lleva la palabra VALUES. El número y tipo de columnas del SELECT debe casar con la lista de destino. Es la herramienta clave para materializar subconjuntos o agregaciones en tablas nuevas.
SELECT id, empresa, pais, segmento FROM clientes ORDER BY id DESC LIMIT 5
-- Tabla de trabajo idempotente (NO toca la semilla)
DROP TABLE IF EXISTS clientes_vip;
CREATE TABLE clientes_vip (
id INTEGER PRIMARY KEY,
empresa TEXT NOT NULL,
pais TEXT NOT NULL
);
-- INSERT con columnas explícitas, multi-fila
INSERT INTO clientes_vip (id, empresa, pais) VALUES
(1, 'TechNova', 'Perú'),
(2, 'DataSphere', 'Colombia'),
(3, 'BancoDigital', 'México');
-- INSERT ... SELECT: copiar clientes Enterprise reales de la semilla
INSERT INTO clientes_vip (id, empresa, pais)
SELECT id, empresa, pais FROM clientes
WHERE segmento = 'Enterprise' AND id > 10;
SELECT * FROM clientes_vip ORDER BY id;
💡 Siempre nombra las columnas enINSERT. UnINSERT INTO t VALUES (...)sin lista se rompe en silencio el día que alguien añade una columna a la tabla. Para insertar muchas filas, una sola sentencia multi-fila es más rápida que N sentencias.
| Forma | Qué hace |
|---|---|
INSERT INTO t (a,b) VALUES (1,2); | Inserta una fila con columnas explícitas |
INSERT INTO t (a,b) VALUES (1,2),(3,4); | Inserta varias filas en una sentencia |
INSERT INTO t VALUES (...); | Inserta valores para TODAS las columnas (frágil) |
INSERT INTO t (a,b) SELECT x,y FROM o; | Inserta el resultado de una consulta |
INSERT INTO t DEFAULT VALUES; | Inserta una fila con todos los defaults |
---
← Distribución: NTILE y percentilesActualizar datos: UPDATE →