sql >> Base de Datos >  >> RDS >> Mysql

SQL Inner Join – Cómo unir 3 tablas en SQL y MySQL

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.