Tutorial de SQL para principiantes: guía completa de SQL
SQL es la forma de hacerle preguntas a una base de datos. Aprende los comandos que usan todos los desarrolladores, testers y analistas, con un pequeño ejemplo que puedes seguir.
- SQL significa Structured Query Language. Trabaja con bases de datos relacionales.
- Cuatro tareas básicas: leer, añadir, cambiar y eliminar datos.
SELECT,WHERE,GROUP BYyJOINcubren la mayor parte del trabajo diario.- Prueba siempre
UPDATEyDELETEprimero con una cláusulaWHERE.
Casi todas las aplicaciones guardan datos: usuarios, pedidos, mensajes, resultados de pruebas. La mayoría de esos datos están en una base de datos, y SQL es el lenguaje para hablar con ella.
La buena noticia es que SQL se parece al inglés. “Selecciona los nombres de los clientes donde la ciudad sea Delhi” es casi una consulta real.
¿Qué es SQL?
SQL te permite guardar, leer, cambiar y eliminar datos en una base de datos relacional. En una base de datos así, los datos viven en tablas formadas por filas y columnas, como una hoja de cálculo. Entre los sistemas más populares están MySQL, PostgreSQL, SQL Server, Oracle y SQLite. Lo básico es igual en todos.
Prepara un lugar para practicar
Lo más fácil es SQLite o un entorno de pruebas SQL gratuito en línea, ya que no necesitas instalar nada. Si quieres una base de datos real en tu portátil, puedes ejecutar PostgreSQL en un contenedor. Nuestro tutorial de Docker te muestra cómo.
Crea tablas y añade datos
Usaremos una pequeña base de datos de una tienda con clientes y pedidos.
CREATE TABLE customers (
id INTEGER PRIMARY KEY,
name VARCHAR(100) NOT NULL,
city VARCHAR(50),
email VARCHAR(120) UNIQUE
);
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
customer_id INTEGER NOT NULL,
amount DECIMAL(10,2) NOT NULL,
status VARCHAR(20) DEFAULT 'pending',
created_at DATE,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
INSERT INTO customers (id, name, city, email) VALUES
(1, 'Asha', 'Delhi', 'asha@example.com'),
(2, 'Ravi', 'Mumbai', 'ravi@example.com'),
(3, 'Meera', 'Delhi', 'meera@example.com');
INSERT INTO orders (id, customer_id, amount, status, created_at) VALUES
(1, 1, 1200.00, 'paid', '2026-10-01'),
(2, 1, 450.50, 'paid', '2026-10-03'),
(3, 2, 980.00, 'pending', '2026-10-04'),
(4, 3, 150.00, 'failed', '2026-10-05');
Una clave primaria identifica de forma única cada fila. Una clave foránea enlaza una tabla con otra. Las restricciones como NOT NULL y UNIQUE evitan que entren datos incorrectos.
Lee datos con SELECT y WHERE
SELECT * FROM customers;
SELECT name, city FROM customers;
SELECT name FROM customers WHERE city = 'Delhi';
SELECT * FROM orders
WHERE status = 'paid' AND amount > 500;
SELECT name FROM customers WHERE name LIKE 'A%';
SELECT * FROM orders WHERE status IN ('paid', 'pending');
| Operador | Significado |
|---|---|
=, <> |
Igual, distinto |
>, <, >=, <= |
Comparaciones |
AND, OR, NOT |
Combinar condiciones |
LIKE |
Coincidir con un patrón (% significa cualquier texto) |
IN, BETWEEN |
Coincidir con una lista o un rango |
IS NULL |
Encontrar valores vacíos |
Evita SELECT * en aplicaciones reales. Pide solo las columnas que necesitas.
Ordenar y limitar
SELECT * FROM orders ORDER BY amount DESC;
SELECT * FROM orders ORDER BY created_at DESC LIMIT 2;
Algunos sistemas usan TOP (SQL Server) o FETCH FIRST en lugar de LIMIT.
Resumir con funciones y GROUP BY
SELECT COUNT(*) AS total_orders,
SUM(amount) AS revenue,
AVG(amount) AS average_order
FROM orders
WHERE status = 'paid';
SELECT customer_id, SUM(amount) AS spent
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;
GROUP BY crea una fila por grupo. WHERE filtra filas antes de agrupar. HAVING filtra grupos después. Esta diferencia es una pregunta clásica de entrevista.
Unir tablas
Los joins combinan filas de dos tablas usando una columna compartida.
SELECT c.name, o.amount, o.status
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;
SELECT c.name, o.id AS order_id
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
| Join | Devuelve |
|---|---|
INNER JOIN |
Solo las filas que coinciden en ambas tablas |
LEFT JOIN |
Todas las filas de la tabla izquierda, con las coincidencias de la derecha (o NULL) |
RIGHT JOIN |
Todas las filas de la tabla derecha, con las coincidencias de la izquierda |
FULL JOIN |
Todas las filas de ambas, emparejadas cuando es posible |
Consejo: para encontrar clientes sin pedidos, usa LEFT JOIN y luego WHERE o.id IS NULL. Para profundizar, lee nuestra guía de los JOIN de SQL explicados con ejemplos.
Subconsultas
SELECT name FROM customers
WHERE id IN (
SELECT customer_id FROM orders WHERE amount > 900
);
Una subconsulta es una consulta dentro de otra. A menudo un join hace el mismo trabajo y es más fácil de leer.
Actualizar y borrar con seguridad
UPDATE orders SET status = 'paid' WHERE id = 3;
DELETE FROM orders WHERE status = 'failed';
Si olvidas WHERE, cambias o borras todas las filas. Un buen hábito es escribir antes un SELECT con el mismo WHERE y comprobar las filas que devuelve.
Índices: haz las consultas más rápidas
CREATE INDEX idx_orders_customer ON orders(customer_id);
Un índice funciona como el índice de un libro. Ayuda a la base de datos a encontrar filas sin leer toda la tabla. Añade índices en las columnas por las que filtras o unes con frecuencia, pero no pongas demasiados, porque ralentizan las inserciones y actualizaciones. Si quieres ver cómo buscan por significado las bases de datos más nuevas, lee nuestra guía de bases de datos vectoriales.
Transacciones
BEGIN;
UPDATE accounts SET balance = balance - 500 WHERE id = 1;
UPDATE accounts SET balance = balance + 500 WHERE id = 2;
COMMIT; -- o ROLLBACK; si algo salió mal
Una transacción agrupa pasos para que todos tengan éxito o todos fallen. Esto protege datos como las transferencias de dinero.
SQL para testers
- Comprueba que una acción en la aplicación creó la fila correcta en la base de datos.
- Encuentra registros duplicados o huérfanos con
GROUP BYyLEFT JOIN. - Prepara y limpia datos de prueba.
- Compara los datos antes y después de un lanzamiento.
Combínalo con las pruebas de API: llama a la API y luego confirma el resultado en la base de datos.
Preguntas frecuentes
¿Es difícil aprender SQL?
No. Los comandos básicos son pocos y se leen como inglés. Los joins y las agrupaciones necesitan algo de práctica, pero la mayoría se siente cómoda en unas pocas semanas.
¿Cuál es la diferencia entre SQL y MySQL?
SQL es el lenguaje. MySQL es un sistema de bases de datos que lo usa. PostgreSQL, SQL Server y Oracle son otros.
¿Cuál es la diferencia entre WHERE y HAVING?
WHERE filtra filas antes de agrupar. HAVING filtra grupos después de agrupar.
¿Qué join debería usar?
Usa INNER JOIN cuando solo necesites las filas que coinciden. Usa LEFT JOIN cuando quieras todas las filas de la tabla principal, incluso sin coincidencia.
¿Necesito SQL para los trabajos de datos en 2026?
Sí. SQL sigue siendo una de las habilidades más solicitadas para analistas, ingenieros, testers y desarrolladores.
Sigue aprendiendo
¿Necesitas ayuda con testing, WordPress o SEO?
Ayudamos a los equipos a lanzar mejor software y a hacer crecer sus sitios. Cuéntanos en qué trabajas y te sugeriremos un siguiente paso claro.
Más guías sobre testing, IA y desarrollo moderno
¿Te gustó este artículo? Elige otro tutorial y sigue aprendiendo.
Tutorial de TypeScript para principiantes: guía completa de TypeScript
Aprende TypeScript desde cero. Entiende los tipos, las interfaces, las uniones, los genéricos y las clases, configura un proyecto y descubre cómo TypeScript detecta errores antes de ejecutar tu código.
Leer artículo →Desarrollo de softwareTutorial de Git para principiantes: guía completa de Git y GitHub
Aprende Git desde cero. Crea repositorios, haz commits, ramas y fusiones, corrige errores y trabaja con pull requests de GitHub, con comandos sencillos y ejemplos claros.
Leer artículo →DevOpsTutorial de Docker para principiantes: guía completa de Docker en 2026
¿Nuevo en Docker? Aprende contenedores, imágenes, Dockerfiles, volúmenes, redes y Docker Compose con comandos sencillos y un pequeño proyecto que puedes ejecutar en tu propio ordenador.
Leer artículo →