sql >> Base de Datos >  >> RDS >> Database

Cómo unir múltiples (3+) tablas en una declaración

Problema:

Le gustaría combinar datos de más de dos tablas usando solo una instrucción SELECT.

Ejemplo:

Hay cuatro tablas en nuestra base de datos:student , teacher , subject y learning .

El student la tabla contiene datos en las siguientes columnas:id , first_name y last_name .

id nombre apellido
1 Tom Molinero
2 Juan Primavera
3 Lisa Williams
4 Ellie Ladrador
5 James Moore

El teacher la tabla contiene datos en las siguientes columnas:id , first_name , last_name y subject .

id nombre apellido
1 Milán Smith
2 Carlos Davis
3 Marcar Moore

El subject la tabla contiene datos en las siguientes columnas:id y first_name .

id nombre
1 Inglés
2 Arte
3 Música

Finalmente, el learning la tabla contiene datos en las siguientes columnas:id , mark , subject_id , student_id y teacher_id .

id marcar subject_id student_id teacher_id
1 4 1 2 1
2 5 2 3 2
3 4 3 1 3
4 3 2 1 2
5 2 3 5 3
6 3 3 4 2

Queremos saber qué estudiantes están estudiando inglés, música y arte, así como qué profesores están impartiendo estas clases. Seleccione la materia del curso, el apellido del estudiante que toma ese curso y el apellido del maestro que imparte ese curso.

Solución:

Usar múltiples JOIN s en su consulta:

SELECT l.name AS subject_name,   
  t.last_name AS student_last_name, 
  st.last_name AS teacher_last_name 
FROM learning AS l  
JOIN subject s ON l.subject_id=s.id
JOIN student st ON l.student_id=st.id
JOIN teacher t ON l.teacher_id=t.id; 

Esta consulta devuelve registros con el nombre de la materia del curso y los apellidos de los alumnos y profesores:

nombre_sujeto s_last_name t_apellido
Música Moore Molinero
Arte Davis Molinero
Inglés Smith Primavera
Arte Davis Williams
Música Davis Ladrador
Música Moore Moore

Estos datos provienen de tres tablas, por lo que tenemos que unir todas esas tablas para obtener la información que buscamos.

Discusión:

Si desea combinar datos almacenados en varias (más de dos) tablas, debe usar JOIN operador varias veces. Primero, une dos tablas como lo harías normalmente (usando JOIN , LEFT JOIN , RIGHT JOIN , o FULL JOIN , según sea apropiado). El JOIN La operación crea una "tabla virtual" que almacena datos combinados de las dos tablas. En nuestro ejemplo, la tabla de resultados es una combinación del learning y subject mesas.

El siguiente paso es unir esta tabla de resultados a la tercera tabla (en nuestro ejemplo, student ). Esto es como un JOIN regular :te unes a la “mesa virtual” y la tercera mesa con una condición apropiada. Esta condición generalmente debe incluir una o más columnas de la tabla adicional (student ) y una o más columnas de la “tabla virtual”. En nuestro ejemplo, hacemos referencia al student tabla en la segunda condición JOIN.

En este punto, tenemos una nueva tabla virtual con datos de tres tablas. El último paso es agregar datos de la cuarta tabla (en nuestro ejemplo, teacher ). y únase usando la clave de estas tablas (en nuestro ejemplo, id del teacher tabla y teacher_id del learning tabla).

Si tiene que unirse a otra mesa, puede usar otro JOIN operador con una condición apropiada en la cláusula ON. En teoría, puedes unirte a tantas mesas como quieras.