Curso de SQL completo: SELECT, JOIN, agregaciones, índices y transacciones (2026)

SQL (Structured Query Language) es el lenguaje estándar para interactuar con bases de datos relacionales. Nació en los laboratorios de IBM en 1974 con el nombre SEQUEL, se estandarizó por el ANSI en 1986 y hoy es el único lenguaje que hablan prácticamente todos los motores de bases de datos: MySQL, PostgreSQL, SQL Server, Oracle y SQLite, entre muchos otros.

Este curso cubre SQL desde cero, con ejemplos sobre un esquema real de tienda online que se mantiene a lo largo de todos los capítulos. Los conceptos son válidos para cualquier motor; cuando hay diferencias de sintaxis entre MySQL, PostgreSQL y SQLite, se indica explícitamente.

El modelo relacional

Una base de datos relacional organiza la información en tablas (también llamadas relaciones). Cada tabla tiene:

  • Columnas (campos): definen el tipo de dato de cada atributo.
  • Filas (registros): cada fila es una instancia concreta del objeto que representa la tabla.
  • Clave primaria (PRIMARY KEY): identificador único de cada fila, nunca NULL ni repetido.
  • Clave foránea (FOREIGN KEY): columna que apunta a la clave primaria de otra tabla, manteniendo la integridad referencial.

Las cuatro categorías de instrucciones SQL

Categoría

Siglas

Instrucciones principales

Lenguaje de definición de datos

DDL

CREATE, ALTER, DROP, TRUNCATE

Lenguaje de manipulación de datos

DML

SELECT, INSERT, UPDATE, DELETE

Lenguaje de control de datos

DCL

GRANT, REVOKE

Lenguaje de control de transacciones

TCL

BEGIN, COMMIT, ROLLBACK, SAVEPOINT

Breve historia del estándar

IBM publicó SEQUEL en 1974. En 1979, Oracle (entonces Relational Software) lanzó el primer motor SQL comercial. El estándar ANSI SQL-86 llegó en 1986, seguido de SQL-89, SQL-92 (la versión que más motores implementan hoy como base), SQL:1999, SQL:2003, SQL:2008, SQL:2011, SQL:2016 y SQL:2019. Cada revisión añade características como CTEs, funciones de ventana, tipos JSON o soporte para datos temporales.

El esquema de este curso: tienda online

Todos los ejemplos del curso usan el siguiente esquema, que puedes crear en MySQL o PostgreSQL:

CREATE TABLE clientes (
    id         INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    nombre     VARCHAR(100) NOT NULL,
    email      VARCHAR(150) NOT NULL UNIQUE,
    ciudad     VARCHAR(80),
    fecha_alta DATE NOT NULL
);

CREATE TABLE categorias (
    id     INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(80) NOT NULL UNIQUE
);

CREATE TABLE productos (
    id           INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    nombre       VARCHAR(200) NOT NULL,
    precio       DECIMAL(10,2) NOT NULL,
    stock        INT NOT NULL DEFAULT 0,
    id_categoria INT UNSIGNED,
    FOREIGN KEY (id_categoria) REFERENCES categorias(id)
);

CREATE TABLE pedidos (
    id         INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    id_cliente INT UNSIGNED NOT NULL,
    fecha      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    estado     ENUM('pendiente','pagado','enviado','cancelado') NOT NULL DEFAULT 'pendiente',
    total      DECIMAL(10,2),
    FOREIGN KEY (id_cliente) REFERENCES clientes(id)
);

CREATE TABLE lineas_pedido (
    id          INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    id_pedido   INT UNSIGNED NOT NULL,
    id_producto INT UNSIGNED NOT NULL,
    cantidad    INT NOT NULL,
    precio_ud   DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (id_pedido)   REFERENCES pedidos(id),
    FOREIGN KEY (id_producto) REFERENCES productos(id)
);

Con estos datos de muestra puedes probar todos los ejemplos:

INSERT INTO categorias (nombre) VALUES ('Electrónica'), ('Ropa'), ('Hogar');

INSERT INTO clientes (nombre, email, ciudad, fecha_alta) VALUES
  ('Ana García',   '[email protected]',   'Madrid',    '2023-01-15'),
  ('Luis Martín',  '[email protected]',  'Barcelona', '2023-03-22'),
  ('Marta López',  '[email protected]', 'Valencia',  '2024-02-01'),
  ('Carlos Ruiz',  '[email protected]','Sevilla',   '2024-05-10');

INSERT INTO productos (nombre, precio, stock, id_categoria) VALUES
  ('Auriculares Bluetooth', 59.99, 120, 1),
  ('Cable USB-C 2m',         8.99, 500, 1),
  ('Camiseta algodón M',    12.50,  80, 2),
  ('Lámpara de escritorio', 34.95,  45, 3);

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP