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.