Hay un momento, casi siempre en tu primer trabajo o en tu primer proyecto con datos reales, en el que un archivo JSON o un CSV ya no dan más de sí. Necesitas guardar miles de registros, consultarlos rápido y que dos personas puedan escribir en ellos al mismo tiempo sin pisarse. Ahí aparece SQL, y la buena noticia es que su núcleo se aprende en una tarde.
SQL (Structured Query Language) no es un lenguaje de programación en el sentido de Python o JavaScript: no tiene bucles propios ni funciones que definas tú libremente. Es un lenguaje declarativo pensado para un único trabajo, hablar con bases de datos relacionales, y lo hace con un puñado de palabras clave que se combinan de formas predecibles.
Qué es una base de datos relacional
Una base de datos relacional organiza la información en tablas, muy parecidas a una hoja de cálculo. Cada tabla tiene columnas fijas (el "esquema") y cada fila es un registro concreto. Por ejemplo, una tabla usuarios podría tener las columnas id, nombre, email y fecha_registro; cada usuario real ocupa una fila.
Lo de "relacional" viene de que las tablas se relacionan entre sí mediante identificadores. Una tabla pedidos puede tener una columna usuario_id que apunta al id de la tabla usuarios, en lugar de repetir el nombre y el email del cliente en cada pedido. Esto evita datos duplicados e inconsistentes: si un usuario cambia su email, lo cambias en un único sitio.
Motores como PostgreSQL, MySQL o SQLite implementan este modelo y entienden SQL como lenguaje de consulta. Cambia el motor, pero el SQL básico que vas a ver aquí funciona prácticamente igual en los tres.
Los cuatro comandos que necesitas dominar primero
Casi todo lo que harás con una base de datos se reduce a cuatro operaciones, conocidas por el acrónimo CRUD (Create, Read, Update, Delete). En SQL se traducen en INSERT, SELECT, UPDATE y DELETE. Prueba cada uno sobre una tabla de ejemplo productos con columnas id, nombre, precio y stock.
-- Leer datos de la tabla productos
SELECT nombre, precio
FROM productos
WHERE precio < 50
ORDER BY precio ASC;
-- Crear un nuevo registro
INSERT INTO productos (nombre, precio, stock)
VALUES ('Teclado mecánico', 79.90, 25);
-- Actualizar un registro existente
UPDATE productos
SET stock = stock - 1
WHERE id = 14;
-- Eliminar un registro
DELETE FROM productos
WHERE stock = 0 AND nombre = 'Descatalogado';
Fíjate en un detalle que se le escapa a mucha gente al empezar: en UPDATE y DELETE la cláusula WHERE no es opcional en la práctica. Si la olvidas, UPDATE productos SET stock = 0; pone el stock a cero en todos los productos de la tabla, no solo en el que querías tocar. Es uno de los errores más caros que se pueden cometer con una base de datos, y todo el mundo lo comete al menos una vez.
WHERE y ORDER BY: filtrar y ordenar resultados
WHERE filtra qué filas se ven afectadas por la consulta, ya sea un SELECT, un UPDATE o un DELETE. Admite comparaciones (=, >, <), combinaciones con AND/OR, y operadores como LIKE para búsquedas de texto parciales:
SELECT nombre, precio, stock
FROM productos
WHERE stock > 0
AND (nombre LIKE '%teclado%' OR nombre LIKE '%ratón%')
ORDER BY precio DESC
LIMIT 10;
ORDER BY ordena los resultados por una o varias columnas (ASC ascendente, DESC descendente, siendo ASC el valor por defecto si no se indica nada). LIMIT corta el número de filas devueltas, algo esencial cuando trabajas con tablas de millones de registros y no quieres traerte todo de golpe.
Combinar tablas con JOIN
La potencia real de una base de datos relacional aparece cuando cruzas información de varias tablas. Retomando el ejemplo de usuarios y pedidos, un JOIN te permite listar pedidos junto con el nombre del cliente que los hizo, sin duplicar esa información en cada fila de pedidos:
SELECT pedidos.id, usuarios.nombre, pedidos.total
FROM pedidos
JOIN usuarios ON pedidos.usuario_id = usuarios.id
WHERE pedidos.total > 100;
No hace falta dominar todos los tipos de JOIN (INNER, LEFT, RIGHT) el primer día. Con entender que un JOIN une filas de dos tablas cuando una columna de una coincide con una columna de la otra, ya puedes leer y escribir el 80% de las consultas que verás en un proyecto normal.
¿Cuándo usar SQL y cuándo NoSQL?
SQL no es la única opción para persistir datos, y últimamente se habla mucho de bases de datos NoSQL como MongoDB o Redis. La diferencia práctica es esta: si tus datos tienen una estructura clara y relaciones entre entidades (usuarios que hacen pedidos, pedidos con productos), una base de datos relacional con SQL te da integridad y consultas potentes de fábrica. Si tus datos son más sueltos, cambian de forma con frecuencia, o necesitas velocidad bruta de lectura/escritura por encima de relaciones complejas, NoSQL puede encajar mejor.
Para la mayoría de proyectos que vas a montar como principiante, incluido el típico backend con Node.js y Express, una base de datos relacional con SQL es la opción más segura y la que más vas a encontrar en el mercado laboral. Aprende SQL bien antes de preocuparte por NoSQL; el conocimiento se transfiere mucho mejor en esa dirección que al revés.
Cómo practicar sin instalar nada
No necesitas montar un servidor de base de datos para empezar. SQLite guarda una base de datos entera en un único archivo y viene integrado en la librería estándar de Python, así que puedes crear tablas y ejecutar consultas con un script de pocas líneas. Cuando te sientas cómodo con lo básico, dar el salto a PostgreSQL o MySQL en un proyecto real es cuestión de cambiar la herramienta de conexión, no de reaprender el lenguaje.
Ponte a prueba
Comprueba lo que has retenido
Con estos cuatro comandos, WHERE, ORDER BY y una idea básica de JOIN puedes resolver la inmensa mayoría de consultas que te vas a encontrar en un trabajo real. El resto (subconsultas, índices, transacciones) se aprende sobre la marcha, cuando el problema concreto lo pide.