20th Jul 2022 Lectura de 5 minutos Cómo unir dos tablas por múltiples columnas en SQL Kateryna Koidan SQL aprender SQL sql joins Índice Unir dos tablas en varias columnas Ejemplo 1: SQL JOIN por dos columnas Ejemplo 2: SQL JOIN por tres columnas ¡Practiquemos Tipos de JOIN en SQL por múltiples columnas! El JOIN de SQL es una herramienta importante para combinar información de varias tablas. La mayoría de las veces, usted estará uniendo tablas basadas en una llave primaria de una tabla y una llave foránea de otra tabla. Sin embargo, también es frecuente que necesite unir tablas por dos o más columnas. En este artículo, hablaré de por qué querrías unir tablas por varias columnas y cómo hacerlo en SQL. Unir tablas por una sola columna no funciona en algunos escenarios. Por ejemplo, puedes encontrarte con casos en los que no hay una columna en la tabla que identifique de forma única las filas. O las tablas que desea unir pueden no tener una sola columna común para usar en la unión. En situaciones como éstas, es posible que tenga que utilizar varias columnas para unir las tablas, por ejemplo, el nombre y los apellidos, o el número de pedido y el año si la numeración del pedido se reinicia cada año. Veamos algunos ejemplos para entender cómo funciona esto en la práctica. Unir dos tablas en varias columnas Imaginemos que tenemos una red de guarderías. En nuestra base de datos, tenemos las siguientes tablas: studentsEn la página web de la escuela, donde tenemos información sobre cada estudiante, como el nombre, el jardín de infancia al que asistió, la clase, el año de graduación y el profesor. teachers, donde tenemos el nombre y el nivel educativo de cada profesor. classesEn la base de datos de la escuela, tenemos información sobre cada clase, como el nombre del jardín de infancia, la clase, el año de graduación y el nombre del aula. students idfirst_namelast_namekindergartengraduation_yearclassteacher_first_nameteacher_last_name 1MaryJonesSunshine2021AIsabellaLopez 2JohnSmithLove & Learn2020BMiaGonzalez 3MarkAndersonButterfly2020BSophiaStevenson 4StevenMooreButterfly2021CMariaStuart 5DianaMillerButterfly2021CMariaStuart 6AnnaDavisSunshine2021AEmmaGrey 7HellenBrownSunshine2020BOliviaTaylor 8GracyLeeLove & Learn2020ACharlotteJohnson 9SaraGarciaLove & Learn2021BJasmineHarris 10KateWilsonSunshine2019BOliviaTaylor teachers idfirst_namelast_nameeducation 101IsabellaLopezUndergraduate 102MariaStuartUndergraduate 103EmmaGreyGraduate 104OliviaTaylorGraduate 105CharlotteJohnsonGraduate 106MiaGonzalezUndergraduate 107SophiaStevensonUndergraduate 108JasmineHarrisUndergraduate classes idkindergartengraduation_yearclassclassroom 201Sunshine2019BIronman 202Butterfly2020BSun 203Love & Learn2020ALove 204Love & Learn2020BHappiness 205Sunshine2020AHulk 206Sunshine2020BSuperman 207Butterfly2021AGarden 208Butterfly2021BIsland 209Butterfly2021CSea 210Love & Learn2021ADream 211Love & Learn2021BLaugh 212Sunshine2021AIronman Puede observar que nuestra base de datos no está perfectamente organizada. Normalmente, la tabla students incluiría claves externas como el ID del profesor y el ID de la clase en lugar de información detallada sobre los profesores y las clases correspondientes. Sin embargo, incluso con los datos almacenados de este modo, podemos unir las tablas siempre que cada una de ellas tenga un conjunto de columnas que identifique de forma exclusiva cada registro. Es hora de hacer un par de consultas SQL. Ejemplo 1: SQL JOIN por dos columnas En nuestro primer ejemplo, queremos conocer el nivel educativo del profesor de cada alumno. Para ello, tenemos que combinar la información de las tablas students y teachers. Por desgracia, no tenemos la columna ID del profesor en la tabla students tabla. Sin embargo, sí tenemos el nombre y los apellidos de los profesores en ambas tablas. Mientras no tengamos profesores con nombres completos idénticos, podemos unir con seguridad estas tablas por estas dos columnas. Esta es la consulta: SELECT s.first_name, s.last_name, s.teacher_first_name, s.teacher_last_name, t.education AS teacher_education FROM students s JOIN teachers t ON s.teacher_first_name = t.first_name AND s.teacher_last_name = t.last_name; Si necesita refrescar la sintaxis de SQL JOIN, consulte esta gran hoja de trucos de SQL JOIN. Observe las dos condiciones en la cláusula ON ya que condicionamos que (1) el nombre de la tabla de profesores sea igual al nombre del profesor en la tabla de alumnos y (2) el apellido de la tabla de profesores sea igual al apellido del profesor en la tabla de alumnos. Como ve, para especificar dos condiciones, simplemente ponemos ambas en la cláusula ON utilizando la palabra clave AND entre ellas. Este es el resultado: first_namelast_nameteacher_first_nameteacher_last_nameteacher_education MaryJonesIsabellaLopezUndergraduate StevenMooreMariaStuartUndergraduate DianaMillerMariaStuartUndergraduate AnnaDavisEmmaGreyGraduate HellenBrownOliviaTaylorGraduate KateWilsonOliviaTaylorGraduate JohnSmithMiaGonzalezUndergraduate MarkAndersonSophiaStevensonUndergraduate GracyLeeCharlotteJohnsonGraduate SaraGarciaJasmineHarrisUndergraduate ¡Se ve bien! Ahora vemos el nivel educativo del profesor correspondiente a cada estudiante. Para practicar la unión de tablas en SQL, consulte este curso interactivo Tipos de JOIN en SQL interactivo. Ejemplo 2: SQL JOIN por tres columnas En el ejemplo anterior, vimos cómo unir dos tablas por dos condiciones. Podemos tener aún más condiciones si es necesario. Veamos cómo unir tablas en SQL con tres condiciones. Ahora queremos averiguar el nombre del aula donde ha jugado y estudiado cada alumno. La información del aula está disponible en la tabla classes tabla. No tenemos el ID de la clase en la tabla students tabla. Sin embargo, tenemos allí tres columnas que identifican unívocamente una clase cuando se combinan: kindergarten, graduation_year, class. Las mismas columnas están presentes en la classes tabla. Por lo tanto, vamos a combinar students y classes utilizando tres columnas: SELECT s.first_name, s.last_name, c.kindergarten, c.graduation_year, c.class, c.classroom FROM students s JOIN classes c ON s.kindergarten = c.kindergarten AND s.graduation_year = c.graduation_year AND s.class = c.class; Como puede ver, unimos las tablas usando las tres condiciones colocadas en la cláusula ON con las palabras clave AND entre ellas. Este es el resultado: first_namelast_namekindergartengraduation_yearclassclassroom MarkAndersonButterfly2020BSun JohnSmithLove & Learn2020BHappiness StevenMooreButterfly2021CSea MaryJonesSunshine2021AIronman GracyLeeLove & Learn2020ALove HellenBrownSunshine2020BSuperman DianaMillerButterfly2021CSea AnnaDavisSunshine2021AIronman SaraGarciaLove & Learn2021BIronman KateWilsonSunshine2019BLaugh ¡El JOIN ha funcionado como se esperaba! Ahora tenemos el aula correspondiente a cada alumno. Si quiere ver más ejemplos, consulte este libro de cocina sobre la unión de tablas por múltiples columnas. ¡Practiquemos Tipos de JOIN en SQL por múltiples columnas! El SQL JOIN es una de las herramientas básicas para los analistas de datos que trabajan con SQL. Las bases de datos relacionales están construidas de tal manera que los informes analíticos suelen requerir la combinación de información de varias tablas. Se unirán tablas, a veces por una columna y otras veces por dos o más columnas. Como ha visto, unir tablas por varias columnas es bastante sencillo en SQL. Pero si quieres adquirir confianza en el uso de SQL JOINs, practicar con conjuntos de datos del mundo real es un factor clave para el éxito. Recomiendo empezar con este curso interactivo de Tipos de JOIN en SQL que incluye 93 retos de codificación. Cubre los tipos más comunes de uniones como JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, y auto-uniones así como uniones no-equi. Para obtener aún más práctica con SQL JOINs y otras herramientas básicas de SQL, considere tomar la Curso completo de SQL curso. Incluye 7 cursos interactivos que cubren las funciones estándar de SQL, los informes básicos de SQL, las funciones de ventana, las expresiones comunes de tablas, las consultas recursivas y mucho más. Gracias por leer, y ¡feliz aprendizaje! Tags: SQL aprender SQL sql joins