Recordatorio: datos repartidos en tablas
En el módulo anterior viste el diseño relacional: la información se reparte en
varias tablas y cada producto referencia su categoría mediante una clave
foránea (categoria_id apunta a categorias.id) en lugar de repetir el
nombre. Aquí partimos de ese diseño ya hecho y nos centramos en la pregunta que
queda pendiente: ¿cómo volvemos a juntar esas tablas para consultarlas?
| productos.id | nombre | categoria_id | categorias.id | nombre | |
|---|---|---|---|---|---|
| 1 | Teclado | 1 | 1 | Perifericos | |
| 3 | Monitor | 2 | 2 | Pantallas |
Volver a unir: INNER JOIN
Para ver el nombre de la categoría junto al del producto hay que combinar
ambas tablas. Eso es un JOIN: emparejas filas de una tabla con filas de otra
según una condición.
SELECT productos.nombre, categorias.nombre
FROM productos
INNER JOIN categorias ON productos.categoria_id = categorias.id;
FROM productos: la tabla de partida.INNER JOIN categorias: la tabla que quieres combinar.ON ...: la condición de emparejamiento, normalmenteclave_foranea = clave_primaria.
El INNER JOIN solo conserva las filas que tienen pareja en ambos lados. Un
producto con categoria_id que no existe en categorias (o NULL)
desaparece del resultado. Lo veremos con detalle en la siguiente lección.
Como dos tablas pueden tener columnas con el mismo nombre (aquí,
nombreen ambas), conviene cualificarlas con el nombre de la tabla:productos.nombre,categorias.nombre.
Ejemplos
INNER JOIN: producto y nombre de su categoría
-- Solo aparecen los productos que tienen categoría asignada.
SELECT productos.nombre, categorias.nombre AS categoria
FROM productos
INNER JOIN categorias ON productos.categoria_id = categorias.id;