El objetivo de relacionar tablas es el de obtener un resultado con campos de diferentes tablas.
Hay diferentes maneras de relacionar tablas, empezaremos con ejemplos sencillos hasta llegar a más complejos.
Para relacionarlas es imprescindible que tengan un elemento en común:
Tabla1 | Tabla2 |
id | id |
nombre | nombre |
id_tabla2 |
– Método simple separado por comas:
Después del FROM enumeramos las tablas separadas por comas y en el WHERE las relacionamos.
SELECT * FROM tabla1, tabla2 WHERE tabla1.id_tabla2=tabla2.id
Le hemos dicho en el WHERE que el id_tabla2 de la tabla 1 y el id de la tabla 2 es el elemento que tienen en común.
Para mejorar esta consulta seleccionaremos los campos que queremos y abreviaremos el nombre de la tabla.
SELECT t1.id, t1.nombre, t2.nombre as nombre2 FROM tabla1 t1, tabla2 t2 WHERE t1.id_tabla2=t2.id
Como podéis ver hemos seleccionado los campos que queremos mostrar separados por comas, después del nombre de la tabla le hemos puesto un alias para que en vez de escribir tabla1.campo podamos abreviar texto y poner t1.campo.
Las 2 tablas tienen el campo nombre que se llama igual, para diferenciarlo hemos puesto t2.nombre as nombre2 para que el campo nombre de la tabla2 aparezca como nombre2.
– Otro método es utilizar la sentencia INNER JOIN:
SELECT t1.id, t1.nombre, t2.nombre as nombre2
FROM tabla1 t1
INNER JOIN tabla2 t2 ON (t1.id_tabla2=t2.id)
En este caso en el FROM solo seleccionamos la tabla1 y con el INNER JOIN establecemos la relación. Después de indicar el nombre de la tabla con la sentencia ON indicamos los campos que los unen.
– En el caso que no siempre se de esta relación podemos utilizar LEFT JOIN:
SELECT t1.id, t1.nombre, t2.nombre as nombre2
FROM tabla1 t1
LEFT JOIN tabla2 t2 ON (t1.id_tabla2=t2.id)
En este caso mostraremos todos los registros de la tabla1 y en los casos que haya relación con la tabla2 se mostrará el nombre de la tabla2 mientras que con INNER JOIN solo se mostraran los registros que coincidan.
– Podemos relacionar las tablas que queramos y utilizar a la vez INNER y LEFT.
SELECT t1.*, t2.nombre as nombre2, t3.nombre as nombre3
FROM tabla1 t1
INNER JOIN tabla2 t2 ON (t1.id_tabla2=t2.id)
LEFT JOIN tabla3 t3 ON (t1.id_tabla3=t3.id)
En este caso al seleccionar los campos le hemos puesto un * después de t1 para indicar que queremos mostrar todos los campos de la tabla1.
– Para finalizar y para que se entienda para que sirve relacionar tablas pondremos un ejemplo más real:
Tenemos una tabla llamada fotos donde tenemos entradas todas nuestras fotos:
id | nombre | categoria | formato
1 | Un día en la playa | 1 | 2
2 | Fiesta con unos amigos | 3 | 1
Tenemos otra tabla de categorias
id | nombre
1 | vacaciones
2 | naturaleza
3 | amigos
Tenemos otra tabla de formatos
id | nombre
1 | vertical
2 | horizontal
Al relacionar la tablas obtenemos:
id | nombre | categoria | formato
1 | Un día en la playa | vacaciones | horizontal
2 | Fiesta con unos amigos | amigos | vertical
– Con esto obtenemos 2 ventajas:
- Ahorramos espacio en los registros y rapidez en las consultas, en vez de un texto estamos entrando un número.
- Nos permite hacer cambios fácilmente, podemos cambiar por ejemplo la categoría amigos por amistades solo modificando un registro en vez de modificar todos los registros de fotos.
Recomendación: para optimizar las consultas debemos aplicar INDEX en el campo de unión.
buena explicacion 🙂
Lo que buscaba gracias perfectamente explicado.