Tutorial de SQL para principiantes: guía completa de SQL

  1. Inicio
  2. Blog
  3. Bases de datos y SQL

Bases de datos y SQL

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.

Por Stack QuoraActualizado el 29 oct 202612 min de lectura
Tutorial de SQL para principiantes que muestra una consulta SELECT devolviendo filas de una tabla de base de datos

Ideas clave

  • 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 BY y JOIN cubren la mayor parte del trabajo diario.
  • Prueba siempre UPDATE y DELETE primero con una cláusula WHERE.

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 BY y LEFT 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

Trabaja con Stack Quora

¿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.