DevPath · Aprende a programar ESPTEN

Capstone: diseña y consulta una base de datos

Plan de consultas: unir, agregar, comparar

Recorrer relaciones con JOIN

Para mostrar datos de varias tablas a la vez se usa JOIN, emparejando filas por sus claves: la foránea de una tabla con el id de la otra.

SELECT clientes.nombre, pedidos.fecha
FROM clientes
JOIN pedidos ON pedidos.cliente_id = clientes.id;

Para conocer qué productos lleva cada pedido encadenamos varios JOIN, pasando por la tabla puente detalles:

SELECT clientes.nombre, productos.nombre, detalles.cantidad
FROM clientes
JOIN pedidos   ON pedidos.cliente_id    = clientes.id
JOIN detalles  ON detalles.pedido_id    = pedidos.id
JOIN productos ON productos.id          = detalles.producto_id;

Resumir con GROUP BY

El importe de cada línea es cantidad * precio. Para el total gastado por cliente sumamos todas sus líneas y agrupamos por cliente:

SELECT clientes.nombre, SUM(detalles.cantidad * productos.precio) AS total
FROM clientes
JOIN pedidos   ON pedidos.cliente_id = clientes.id
JOIN detalles  ON detalles.pedido_id = pedidos.id
JOIN productos ON productos.id       = detalles.producto_id
GROUP BY clientes.id
ORDER BY total DESC;

Comparar con subconsultas

Una subconsulta es un SELECT dentro de otro. Sirve, por ejemplo, para comparar cada fila con un valor calculado (como una media):

SELECT nombre FROM productos
WHERE precio > (SELECT AVG(precio) FROM productos);

Orden determinista. sql.js compara el resultado fila a fila, así que siempre cerramos con un ORDER BY que no deje empates ambiguos (añadiendo el id o el nombre como desempate cuando haga falta).

Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
← El modelo de datos de la tiendaVer el módulo →