Volver a la lista de artículos Artículos
Lectura de 8 minutos

Cómo Escribir Múltiples Uniones en una Consulta SQL

¿Te has preguntado alguna vez cómo funcionan las uniones múltiples? ¿Quieres saber cómo unir varias tablas en una consulta? Lee este artículo y descúbrelo.

Si acabas de iniciarte en SQL, puede que te haya resultado difícil entender el concepto de SQL JOINs, especialmente si tienes que unir más de dos tablas en una consulta. No te preocupes. En este artículo, exploraremos el funcionamiento de JOIN y resolveremos todos sus misterios.

La mejor forma de aprender SQL es practicando. Si quieres dominar la unión de tablas en SQL, echa un vistazo a nuestro curso interactivo Tipos de JOIN en SQL interactivo. Ofrece más de 90 ejercicios prácticos que le ayudarán a escribir diferentes tipos de JOINs.

Comencemos con un Ejemplo

Imagine que tiene las siguientes tres tablas player, teamy coach.

Cómo escribir varias uniones en una consulta SQL

Hagamos una consulta que muestre los nombres de todos los jugadores, el nombre de su equipo y el nombre de su entrenador. Puede obtener toda esta información mediante la siguiente consulta:

SELECT 
  player.name, 
  team.name, 
  coach.name
FROM player
JOIN team
ON player.team_id = team.id
JOIN coach
ON team.coach_id = coach.id;

Aquí tenemos dos operaciones diferentes JOIN. Las tablas player y team y, a continuación, la tabla coach.

Para crear una condición de unión, necesitamos que ambas tablas unidas tengan una columna que contenga la misma información. La columna team_id de la tabla player contiene team_id; es el mismo valor que la columna id de la tabla team de la tabla. Por lo tanto, la primera condición de unión es ON player.team_id = team.id

Del mismo modo, la unión entre la tabla team y la tabla coach es ON team.coach_id = coach.id.

Si tiene problemas para recordar la sintaxis exacta de Tipos de JOIN en SQL, asegúrese de marcar nuestra increíble hoja de trucos SQL JOIN.

Cómo Funciona la Unión de Múltiples Tablas

Digamos que tenemos los siguientes datos en nuestras tablas:

coach
idname
1Mark Swanson
2Alice Wright
team
idnamecoach_id
1Ambitious Raptors2
2Fire Pandas1
3Steel Cats2
player
idnameteam_id
1John Rodger1
2Paul Smith1
3David McDonald2
4Sarah Grey3
5Sophie Brown3

Ahora, ejecutemos la consulta que listará los nombres de todos los jugadores, el nombre de su equipo y el nombre de su entrenador:

SELECT player.name, team.name, coach.name
FROM player
JOIN team
ON player.team_id = team.id
JOIN coach
ON team.coach_id = coach.id;

Obtendremos la siguiente tabla como resultado:

player.nameteam.namecoach.name
John RodgerAmbitious RaptorsAlice Wright
Paul SmithAmbitious RaptorsAlice Wright
David McDonaldFire PandasMark Swanson
Sarah GreySteel CatsAlice Wright
Sophie BrownSteel CatsAlice Wright

Bien, pero ¿qué ocurre realmente "bajo el capó" cuando se unen dos tablas? Veamos nuestro ejemplo con más detalle.

En primer lugar, la dirección JOIN de las tablas player y team forman una "tabla virtual". Su aspecto es el siguiente

player.idplayer.nameplayer.team_idteam.idteam.nameteam.coach_id
1John Rodger11Ambitious Raptors2
2Paul Smith11Ambitious Raptors2
3David McDonald22Fire Pandas1
4Sarah Grey33Steel Cats2
5Sophie Brown33Steel Cats2

Como puede ver, esta "tabla virtual" contiene todas las columnas de las tablas player y team tablas.

Oye, ¡hemos unido 3 tablas en esta consulta de ejemplo! ¿Qué ha pasado con la tabla coach tabla? Muy fácil. Ya tenemos una "tabla virtual" formada por las tablas player y team así que parece que volvemos a tener que unir dos tablas, sólo que esta vez uniremos la tabla coach a la "tabla virtual". Así, la tabla unida final tendrá este aspecto:

player.idplayer.nameplayer.team_idteam.idteam.nameteam.coach_idcoach.idcoach.name
1John Rodger11Ambitious Raptors22Alice Wright
2Paul Smith11Ambitious Raptors22Alice Wright
3David McDonald22Fire Pandas11Mark Swanson
4Sarah Grey33Steel Cats22Alice Wright
5Sophie Brown33Steel Cats22Alice Wright

Las columnas que pertenecen a la "tabla virtual" (la unión de las tablas player y team) se muestran en naranja; las columnas de la tabla coach aparecen en azul.

Importante: Cuando unimos otra tabla, la condición de unión debe incluir una columna que coincida con una columna de una de las tablas previamente unidas. En nuestro ejemplo, la tabla coach se une a la tabla virtual utilizando el ID del entrenador, que está presente en la tabla coach y en la tabla team tabla. Por lo tanto, estaba presente en la "tabla virtual". Puede imaginarse que las tablas unidas están "vinculadas" entre sí mediante condiciones de unión:

Cómo escribir varias uniones en una consulta SQL

Por supuesto, no necesitamos mostrar todas las columnas de la tabla unida. En las consultas JOIN, normalmente especificamos qué columnas queremos ver. Observe que así lo hicimos en el ejemplo de consulta anterior: sólo se mostraron el nombre del jugador, el nombre del equipo y el nombre del entrenador.

Tablas de unión

Una tabla de unión es una tabla que enlaza dos o más tablas. Muchas uniones de varias tablas implican el uso de una tabla de unión. ¿Le suena vago? Veámoslo en acción.

Imagine que tiene las tablas author y book. Un autor puede haber escrito muchos libros y un libro puede tener muchos autores. Para modelar una relación de este tipo (la llamamos relación de muchos a muchos), necesitamos una tercera tabla: author_book. El único propósito de esta tabla es conectar las tablas author y book entre sí. La tabla author_book es un ejemplo de tabla de unión.

Cómo escribir varias uniones en una consulta SQL

Supongamos que tenemos los siguientes datos en nuestras tablas:

author
idname
1Sarah Green
2Martin Davis
3Steve Johnson
book
idname
1The Translucent Door
2Whisper of Dawn
3To Catch a Dream
author_book
author_idbook_id
11
21
12
32
23

Si queremos unir las tablas author y book deberá utilizar también la tabla de unión author_book. Por ejemplo, para listar todos los autores y sus libros, puede escribir una consulta como ésta:

SELECT 
  author.name, 
  book.name
FROM author
JOIN author_book
ON author.id = author_book.author_id
JOIN book
ON book.id = author_book.book_id
ORDER BY author.name;

En primer lugar, la tabla author_book se une a la tabla author para formar una "tabla virtual". A continuación, la book a la "tabla virtual".

Al unir tablas enlazadas por una tabla de unión, asegúrese de unir las tablas no unidas a la tabla de unión. En nuestro ejemplo author se une con author_book. A continuación, book también se une. Si tiene una tabla de unión en su base de datos, las uniones que implican estas tablas normalmente implicarán tres o más tablas.

El resultado de la consulta tendrá este aspecto. No vemos ninguna de las columnas de la tabla de unión en el resultado, pero unirla es esencial para que la consulta funcione correctamente:

author.namebook.name
Sarah GreenThe Translucent Door
Martin DavisThe Translucent Door
Sarah GreenWhisper of Dawn
Steve JohnsonWhisper of Dawn
Martin DavisTo Catch a Dream

Una tabla de unión con columnas adicionales

En el ejemplo anterior, las únicas columnas presentes en la tabla de unión eran las columnas que hacían referencia a otras tablas. Sin embargo, no tiene por qué ser así. La tabla de enlace también puede contener otros campos. Estos campos almacenan información adicional sobre la relación.

Veamos un ejemplo. Esta vez, tenemos las 3 tablas siguientes: doctor, patient y appointment. ¿Adivinas cuál es la tabla de unión?

Cómo escribir varias uniones en una consulta SQL

Has acertado. La tabla de unión es la appointment tabla. Vincula a los médicos con sus pacientes para crear citas. Sin embargo, la tabla appointment tabla también necesita columnas adicionales, como la fecha y la hora de la cita.

Supongamos que tenemos los siguientes datos en nuestras tablas:

doctor
idname
1Ann Johnson
2Marlene Smith
3John West
patient
idname
1Mary Brown
2Sally Rodgers
3Mark Jackson
appointment
iddoctor_idpatient_iddatetime
11116/04/20238:00
21316/04/20239:00
32217/04/20238:00
42117/04/20239:00
53317/04/202316:00

Ahora, vamos a crear una consulta que ayude a los médicos a gestionar su agenda: para cada médico, nos gustaría ver todas las fechas y horas de sus citas, además del nombre del paciente correspondiente. Puedes obtener toda esta información con la siguiente consulta:

SELECT 
  doctor.name, 
  appointment.date, 
  appointment.time, 
  patient.name
FROM doctor
JOIN appointment
ON doctor.id = appointment.doctor_id
JOIN patient
ON appointment.patient_id = patient.id;

En primer lugar, se une la tabla appointment se une a la tabla doctor para formar una "tabla virtual". A continuación, la tabla patient tabla se une a la "tabla virtual" haciendo referencia a la tabla de unión appointment.

El resultado de la consulta sería el siguiente:

doctor.nameappointment.dateappointment.timepatient.name
Ann Johnson16/04/20238:00Mary Brown
Ann Johnson16/04/20239:00Mark Jackson
Marlene Smith17/04/20238:00Sally Rodgers
Marlene Smith17/04/20239:00Mary Brown
John West17/04/202316:00Mark Jackson

Una tabla de unión de 3 vías

Las tablas de enlace también pueden enlazar tres o más tablas. Por ejemplo, imagine que un médico trabaja en varias clínicas. Al concertar una cita, se le asigna un médico, pero también debe elegir la clínica en la que tendrá lugar la cita. Así, nuestra appointment vincularía ahora tres tablas: doctor, patienty clinic.

En este escenario, muchas consultas requerirán unir las cuatro tablas. En algunas situaciones, las tablas de unión pueden enlazar incluso más tablas.

¡Vamos a unir algunas tablas!

¡Buen trabajo! Acaba de aprender como usar múltiples JOINs en una consulta SQL.

Resumamos lo que acabamos de aprender:

  • Un JOIN de tres tablas es un JOIN de dos tablas con otro join. El JOIN de dos tablas forma una "tabla virtual" a la cual se une la otra tabla.
  • La condición de unión suele ser una igualdad entre algunas columnas de una tabla que comparten valores con columnas de la otra tabla.
  • Cuando se unen más de dos tablas, en la mayoría de los casos hay que asegurarse de que la condición de unión "enlace" con las tablas que ya se han unido.
  • Una tabla de unión es una tabla que enlaza dos o más tablas haciendo referencia a los ID de las tablas correspondientes. Cuando se trata de una tabla de unión, es probable que tenga que utilizar una unión multi-tabla.

Si tienes curiosidad por saber más sobre Tipos de JOIN en SQL, echa un vistazo a estos artículos de nuestro blog:

Y para practicar un poco más, recuerde consultar nuestro Tipos de JOIN en SQL ¡ curso interactivo!