Ejercicio: Relaciones y JOIN
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.
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
| pedido | fecha |
|---|---|
| 1 | 2026-09-01 |
| 2 | 2026-09-15 |
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 |
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
| producto | cantidad | precio |
|---|---|---|
| Monitor 4K | 1 | 899.00 |
| Cable HDMI | 2 | 15.00 |
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 |
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.