21st Jun 2023 Lectura de 8 minutos Cómo Escribir Múltiples Uniones en una Consulta SQL Dominika Florczykowska SQL JOIN Índice Comencemos con un Ejemplo Cómo Funciona la Unión de Múltiples Tablas Tablas de unión Una tabla de unión con columnas adicionales Una tabla de unión de 3 vías ¡Vamos a unir algunas tablas! ¿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. 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: 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. 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? 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: Aprenda algunos consejos para practicar Tipos de JOIN en SQL. Descubra ejemplos de Tipos de JOIN en SQL con explicaciones detalladas. Comprenda cómo funciona el JOIN interno de SQL. Y para practicar un poco más, recuerde consultar nuestro Tipos de JOIN en SQL ¡ curso interactivo! Tags: SQL JOIN