Saltar al contenido
Bases de datos con SQL
Todos los cursos

Ejercicio: Relaciones y JOIN

  • ⏱ 35 minutos
  • 📶 Nivel: principiante

Objetivo

Consultar datos repartidos en varias tablas con JOIN, encontrar filas sin relación y comprobar que las claves foráneas protegen los datos.

Cómo se trabaja

Si usas SQLite en tu equipo, escribe primero PRAGMA foreign_keys = ON; y carga las tablas y datos de esta lección (cópialos de los bloques de código). También puedes resolverlo en papel y comparar con la solución.

Pasos

Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.

💡 Pista 1: las condiciones

La condición del ON une las tablas; el WHERE filtra (por ejemplo el nombre del cliente).

💡 Pista 2: el paso 4

Necesitas las cuatro tablas: clientes → pedidos → lineas_pedido → productos. DISTINCT evita que un cliente salga varias veces.

✅ Ver una solución posible

Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.

Paso 1
SELECT p.id AS pedido, p.fecha
FROM pedidos p
JOIN clientes c ON c.id = p.cliente_id
WHERE c.nombre = 'Ana Torres';

Resultado esperado

pedidofecha
12026-09-01
22026-09-15
Paso 2
SELECT c.nombre
FROM clientes c
LEFT JOIN pedidos p ON p.cliente_id = c.id
WHERE p.id IS NULL;

Resultado esperado

nombre
Diego Soto
Paso 3
SELECT pr.nombre AS producto, l.cantidad, pr.precio
FROM lineas_pedido l
JOIN productos pr ON pr.id = l.producto_id
WHERE l.pedido_id = 3;

Resultado esperado

productocantidadprecio
Monitor 4K1899.00
Cable HDMI215.00
Paso 4
SELECT DISTINCT c.nombre
FROM clientes c
JOIN pedidos p       ON p.cliente_id = c.id
JOIN lineas_pedido l ON l.pedido_id  = p.id
JOIN productos pr    ON pr.id        = l.producto_id
WHERE pr.categoria = 'Periféricos';

Resultado esperado

nombre
Ana Torres
Marta Ruiz
Paso 5
INSERT INTO lineas_pedido (pedido_id, producto_id, cantidad)
VALUES (1, 99, 1);

Resultado esperado (error real de SQLite):

Error: FOREIGN KEY constraint failed

💡 🏁 Reto extra (opcional)

Muestra cada pedido con el nombre del cliente y el total de unidades que contiene. Pista: necesitarás SUM(l.cantidad) y GROUP BY p.id, que verás en la lección siguiente.