Cuando trabaja con su base de datos, es posible que necesite reunir datos de algunas tablas diferentes. Este artículo le mostrará cómo hacerlo.
Ya he escrito sobre combinaciones de SQL aquí y aquí, pero tomemos un momento para revisar primero cómo funciona una combinación, y particularmente la sintaxis específica de MySQL.
Declaración de combinación SQL
Join es una declaración que le permite juntar dos tablas, haciendo coincidir las filas que están relacionadas entre sí y conservando solo las filas que pueden coincidir, sin conservar las filas no emparejadas.
SELECT * FROM table1
INNER JOIN table2
ON table1.id = table2.id;
El SELECT ... FROM
indica cuál es la primera tabla, luego el nombre de la segunda tabla se escribe justo después de INNER JOIN
palabras clave
La forma en que se deben unir las dos tablas está escrita en ON
declaración. En este caso, las dos tablas se unen mediante la relación table1.id = table2.id
.
Es posible utilizar varias sentencias de unión juntas para unir más de una tabla al mismo tiempo.
SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id
INNER JOIN table3
ON table2.id = table3.id;
Para hacerlo, agrega un segundo INNER JOIN
declaración y un segundo ON
instrucción para indicar la tercera tabla y la segunda relación.
Hablemos un momento sobre las relaciones que puede tener entre tablas y por qué es posible que desee unir tres tablas.
Relaciones entre tablas en SQL
Cuando tiene tablas que están relacionadas entre sí, sus relaciones pueden ser de varios tipos.
uno-a-muchos
En un tipo de relación de uno a varios, una fila de la primera tabla se puede relacionar con varias filas de la segunda tabla.
En una base de datos relacional, esto se puede implementar con la segunda tabla que tiene un first_table_id
columna que dice con qué fila de la primera tabla está relacionada esa fila.
muchos a uno
En una relación de muchos a uno, una fila de la primera tabla se puede relacionar con una sola fila de la segunda tabla, y una fila de la segunda tabla se puede relacionar con varias filas de la primera tabla.
En una base de datos relacional, esto se puede implementar con la primera tabla que tiene un second_table_id
columna que dice con qué fila de la segunda tabla está relacionada esa fila.
muchos-a-muchos
En este caso, varias filas están relacionadas con varias filas.
Este tipo de relación no se puede representar tal cual con las tablas de SQL:debe agregar una tabla de acoplamiento entre las dos tablas para que solo existan relaciones de muchos a uno y de uno a muchos entre las tablas.
Cada fila de la tabla del medio representa una relación entre las filas de la tabla de la izquierda y las filas de la tabla de la derecha.
En la práctica, en MySQL, esa tabla intermedia tendrá una columna para first_table_id
y una columna para second_table_id
, siendo cada combinación única.
Unir tablas SQL en la práctica
Imaginemos que tenemos la base de datos de una organización, donde tenemos una tabla con equipos (su nombre y otra información de identificación) y una tabla con proyectos (nombre, progreso, etc.).
id | nombre_del_equipo | especialidad |
---|---|---|
1 | Lanzadores de plátanos | Plátanos |
2 | Roedores de madera | Royendo madera |
3 | Los elefantes rosas | Pisando fuerte en el suelo |
4 | Patatas esponjosas | Trabajar y dormir |
id | nombre_del_proyecto | progreso |
---|---|---|
1 | Construcción de presas | Se necesita algo más de roer madera y pisar el suelo |
2 | Pastel de plátano | Alguien se está comiendo todos los plátanos |
3 | Investigación del sueño | Demasiado sueño, poca investigación |
Como un equipo puede trabajar en varios proyectos, y varios equipos pueden trabajar en un proyecto, también hay una tercera tabla que realiza un seguimiento de las coincidencias entre el equipo y el proyecto.
id_del_proyecto | id_de_grupo |
---|---|
1 | 2 |
1 | 3 |
2 | 1 |
3 | 1 |
3 | 2 |
3 | 3 |
3 | 4 |
Podemos usar un JOIN
declaración para juntar todo cuando necesitamos ver la información de las tablas de una manera legible por humanos, como esta:
SELECT
teams.team_name AS team_name,
projects.project_name AS project_name
FROM TABLE teams
INNER JOIN matches
ON teams.id = matches.team_id
INNER JOIN matches
ON matches.project_id = projects.id
ORDER BY teams.id;
Elegimos qué columnas mostrar de cada tabla con un SELECT
declaración.
Especificamos cómo se combinarán las filas de las tablas con un ON
declaración.
Y ordenamos las filas de la forma que prefiramos con un ORDER BY
declaración.
El ON
declaraciones teams.id = matches.team_id
y matches.projects_id = projects.id
significa que las filas se combinan usando las filas de las matches
mesa. Cada fila de la tabla de salida tiene el nombre del proyecto y el nombre del equipo combinados usando los pares de id del proyecto e id del equipo en las matches
mesa.
La tabla de salida se verá como a continuación.
Nombre_del_equipo | Nombre_del_proyecto |
---|---|
Lanzadores de plátanos | Pastel de plátano |
Lanzadores de plátanos | Investigación del sueño |
Roedores de madera | Construcción de presas |
Roedores de madera | Investigación del sueño |
Los elefantes rosas | Construcción de presas |
Los elefantes rosas | Construcción de presas |
Patatas esponjosas | Investigación del sueño |
No hay ninguna columna directamente de las matches
mesa. Las matches
la tabla no se muestra en la salida, pero se usa como instrucciones sobre cómo combinar las filas de los teams
y projects
mesas.
Conclusión
El JOIN
instrucción le permite unir una o más tablas. Debe usarse junto con ON
declaración para determinar la relación entre las filas de una tabla y las filas de una tabla diferente.
En este artículo has aprendido a usar el JOIN
instrucción para unir tres tablas diferentes.