¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Unir dos tablas en una consulta

Después de esta lección: Puedo unir dos tablas para responder a una pregunta.

Lección de 45 minSin comandos

Una clienta al teléfono

Suena el teléfono en atención al cliente. Es Marta Gil y pregunta por sus pedidos.

Abres la tabla de pedidos y no aparece ningún nombre. Solo hay números de cliente.

Los nombres están en otra tabla. Para contestar a Marta, tienes que juntar las dos tablas en una sola consulta.

Al final de esta lección

Nota

Puedo unir dos tablas para responder a una pregunta.

Palabras clave

PalabraQué significaEjemplo
Clave primariala columna que identifica cada fila sin repetirsecustomers.id
Clave foráneauna columna que guarda la clave primaria de otra tablaorders.customer_id
JOINjunta las filas de dos tablas
ONdice qué filas van juntas
Combinaciónel resultado de juntar dos tablas

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una clave apunta a otra tabla

En customers, la columna id es la clave primaria. Dos clientes nunca tienen el mismo id.

En orders, la columna customer_id guarda ese mismo número. Es una clave foránea: dice de quién es el pedido.

El nombre de cada cliente se escribe una sola vez. Los pedidos solo guardan su número.

Prueba: mira las dos tablas

Código: sql
-- Mira las dos tablas, una detrás de otra.
SELECT * FROM customers;
SELECT * FROM orders;

-- Busca a Marta Gil en customers: ¿qué id tiene?
-- Después busca ese número en la columna customer_id.

JOIN y ON juntan las filas

JOIN customers añade la tabla de clientes a la consulta. ON orders.customer_id = customers.id dice cómo emparejar las filas.

Para cada pedido, la base de datos busca el cliente con ese id y pega las dos filas en una.

Las dos tablas tienen una columna id. Por eso escribes tabla.columna, para que no haya duda.

Prueba: cada pedido con su cliente

Código: sql
-- Cada pedido con el nombre de su cliente.
SELECT orders.id, customers.name, orders.amount
FROM orders
JOIN customers ON orders.customer_id = customers.id;

-- Añade customers.city a la lista de columnas y vuelve a ejecutar.

Ejemplo: el emparejamiento, pedido a pedido

Pedidocustomer_idCliente encontradoImporte
2013Marta Gil75 €
2021Lucía Romero42 €
2033Marta Gil28 €
2042Javier Ortega18 €
2054Andrés Navarro120 €
2061Lucía Romero36 €

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un error frecuente

Advertencia

Mucha gente cree que basta con poner las dos tablas en FROM. No es así. Sin ON, la base de datos empareja cada pedido con cada cliente: 6 por 5, 30 filas. Casi todas son falsas. Escribe siempre la condición que une las claves.

Después de unir, filtra como siempre

Una vez unidas las tablas, todo lo que ya sabes sigue valiendo. Puedes usar WHERE, ORDER BY y GROUP BY con columnas de las dos tablas.

Así contestas a Marta: unes las tablas y filtras por su nombre.

Prueba: los pedidos de Marta Gil

Código: sql
-- Los pedidos de Marta Gil, buscando por su nombre.
SELECT orders.id, orders.amount, orders.status
FROM orders
JOIN customers ON orders.customer_id = customers.id
WHERE customers.name = 'Marta Gil';

-- Cambia el nombre por 'Lucía Romero' y vuelve a ejecutar.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.