7th Jul 2022 Lectura de 11 minutos 7 Ejemplos de SQL JOIN con explicaciones detalladas Kateryna Koidan SQL aprender SQL JOIN Índice Introducción al JOIN INNER JOIN Ejemplo 1 Ejemplo 2 LEFT JOIN Ejemplo #3 Ejemplo #4 RIGHT JOIN Ejemplo 5 JOIN COMPLETO Ejemplo #6 Ejemplo 7 ¡Es hora de practicar Tipos de JOIN en SQL! ¿Necesita unir varias tablas para obtener el conjunto de resultados necesario? El SQL JOIN es una herramienta básica pero importante que utilizan los analistas de datos que trabajan con bases de datos relacionales. Y comprendo que puede ser difícil elegir entre los miles de guías de introducción a los joins. En este artículo, me centraré en ejemplos del mundo real con explicaciones detalladas. Introducción al JOIN Con las bases de datos relacionales, la información que desea está a menudo almacenada en varias tablas. En tales escenarios, necesitarás unir estas tablas. Aquí es donde entra en juego el JOIN de SQL. La cláusula JOIN en SQL se utiliza para combinar filas de varias tablas basándose en una columna relacionada entre estas tablas. Puede obtener una visión general de la herramienta SQL JOIN en este artículo introductorio. En esta guía, quiero cubrir los tipos básicos de Tipos de JOIN en SQL pasando por varios ejemplos. Discutiré en detalle la sintaxis de cada consulta, cómo funciona, cómo construir una condición y cómo interpretar los resultados. Para los ejemplos, utilizaremos información sobre una editorial que publica libros originales y traducidos. Nuestra base de datos contiene cuatro tablas: books, authors, editors, y translators. books idtitletypeauthor_ideditor_idtranslator_id 1Time to Grow Up!original1121 2Your Triptranslated152232 3Lovely Loveoriginal1424 4Dream Your Lifeoriginal1124 5Orangestranslated122531 6Your Happy Lifetranslated152233 7Applied AItranslated132334 8My Last Bookoriginal1128 authors idfirst_namelast_name 11EllenWriter 12OlgaSavelieva 13JackSmart 14DonaldBrain 15YaoDou editors idfirst_namelast_name 21DanielBrown 22MarkJohnson 23MariaEvans 24CathrineRoberts 25SebastianWright 26BarbaraJones 27MatthewSmith translators idfirst_namelast_name 31IraDavies 32LingWeng 33KristianGreen 34RomanEdwards Si quieres practicar la unión de tablas en SQL con muchos ejemplos, te recomiendo tomar el Tipos de JOIN en SQL curso. ¡Incluye 93 desafíos de codificación! INNER JOIN Comenzaremos con un INNER JOIN básico, o simplemente, JOIN. Este tipo de join se utiliza cuando queremos mostrar registros coincidentes de dos tablas. Ejemplo 1 Digamos que queremos mostrar los títulos de los libros junto con sus autores (es decir, el nombre y el apellido del autor). Los títulos de los libros se almacenan en la tabla books y los nombres de los autores en la tabla authors tabla. En nuestra consulta SQL, uniremos estas dos tablas haciendo coincidir la columna author_id de la tabla books y la columna id de la tabla authors: SELECT b.id, b.title, a.first_name, a.last_name FROM books b INNER JOIN authors a ON b.author_id = a.id ORDER BY b.id; En la sentencia SELECT, enumeramos las columnas que se mostrarán: id del libro, título del libro, nombre y apellido del autor. En la cláusula FROM, especificamos la primera tabla a unir (también denominada tabla izquierda). En la cláusula INNER JOIN, especificamos la segunda tabla a unir (también denominada tabla derecha). A continuación, utilizamos la palabra clave ON para indicar a la base de datos qué columnas deben utilizarse para cotejar los registros (es decir, la columna author_id de la tabla books y la columna id de la tabla authors de la tabla). Tenga en cuenta también que estamos utilizando alias para los nombres de las tablas (es decir b para books y a para authors). Asignamos los alias en las cláusulas FROM y INNER JOIN y los utilizamos en toda la consulta. Los alias de tabla reducen la escritura y hacen que la consulta sea más legible. Este es el conjunto resultante: idtitlefirst_namelast_name 1Time to Grow Up!EllenWriter 2Your TripYaoDou 3Lovely LoveDonaldBrain 4Dream Your LifeEllenWriter 5OrangesOlgaSavelieva 6Your Happy LifeYaoDou 7Applied AIJackSmart 8My Last BookEllenWriter Para cada registro de la tabla de la izquierda (es decir, books), la consulta comprueba el author_id, y luego busca el mismo id en la primera columna de la tabla authors tabla. A continuación, extrae el nombre y el apellido correspondientes. Tenga en cuenta que el orden de las tablas no importa con el INNER JOIN, o el simple JOIN. El conjunto de resultados sería exactamente el mismo si pusiéramos la tabla authors en la cláusula FROM y la tabla books en la cláusula INNER JOIN. INNER JOIN sólo muestra los registros que están disponibles en ambas tablas. En nuestro ejemplo, todos los libros tienen un autor correspondiente y todos los autores tienen al menos un libro correspondiente. Veamos qué ocurre si algunos de los registros no coinciden. Ejemplo 2 En nuestro segundo ejemplo, mostraremos los libros junto con sus traductores (es decir, el apellido del traductor). Sólo la mitad de nuestros libros han sido traducidos y, por tanto, tienen un traductor correspondiente. Por lo tanto, ¿cuál sería el resultado de unir las etiquetas books y translators utilizando INNER JOIN? SELECT b.id, b.title, b.type, t.last_name AS translator FROM books b JOIN translators t ON b.translator_id = t.id ORDER BY b.id; idtitletypetranslator 2Your TriptranslatedWeng 5OrangestranslatedDavies 6Your Happy LifetranslatedGreen 7Applied AItranslatedEdwards La consulta da como resultado sólo los libros que han sido traducidos. He añadido la columna de tipo para que quede claro. El resto de los libros no se han podido emparejar con la tabla translators tabla y por lo tanto no se muestran. Así es como funciona INNER JOIN. Además, tenga en cuenta que en el segundo ejemplo hemos utilizado JOIN en lugar de la palabra clave INNER JOIN. No tiene ningún impacto en el resultado porque INNER JOIN es el tipo de unión por defecto en SQL. Puede aprender sobre otros tipos de JOIN en SQL en esta guía detallada. Bien. Ahora sabemos cómo unir tablas cuando necesitamos que sólo se muestren los registros coincidentes. Pero, ¿qué pasa si queremos mantener todos los libros en el conjunto resultante sin cortar la tabla sólo a los libros traducidos? ¡Es hora de aprender sobre las uniones externas! LEFT JOIN Comenzaremos nuestra visión general de las uniones OUTER con el LEFT JOIN. Debería aplicar este tipo de JOIN SQL cuando quiera mantener todos los registros de la tabla izquierda y sólo los registros coincidentes de la tabla derecha. Ejemplo #3 Por ejemplo, digamos que queremos mostrar información sobre el autor y el traductor de cada libro (es decir, sus apellidos). También queremos mantener la información básica de cada libro (es decir, id, title, y type). Para obtener todos estos datos, tendremos que unir tres tablas books para la información básica de los libros, authors para los apellidos de los autores, y translators para los apellidos de los traductores. Como hemos visto en el ejemplo anterior, el uso de INNER JOIN (o de un simple JOIN) para unir la tabla translators hace que se pierdan todos los registros de los libros originales (no traducidos). Eso no es lo que queremos ahora. Así que, para mantener todos los libros en el conjunto de resultados, uniremos el books, authorsy translators utilizando la tabla LEFT JOIN. SELECT b.id, b.title, b.type, a.last_name AS author, t.last_name AS translator FROM books b LEFT JOIN authors a ON b.author_id = a.id LEFT JOIN translators t ON b.translator_id = t.id ORDER BY b.id; Observe que empezamos con la tabla books en la cláusula FROM, convirtiéndola en la tabla de la izquierda. Esto es porque queremos mantener todos los registros de esta tabla. El orden de las otras tablas no importa. En nuestra consulta, primero LEFT JOIN la tabla authors basándonos en la columna author_id de la tabla books y la columna id de la tabla authors de la tabla. A continuación, unimos la tabla translators tabla basándonos en la columna translator_id de la tabla books y la columna id de la tabla translators tabla. Esta es la tabla resultante: idtitletypeauthortranslator 1Time to Grow Up!originalWriterNULL 2Your TriptranslatedDouWeng 3Lovely LoveoriginalBrainNULL 4Dream Your LifeoriginalWriterNULL 5OrangestranslatedSavelievaDavies 6Your Happy LifetranslatedDouGreen 7Applied AItranslatedSmartEdwards 8My Last BookoriginalWriterNULL ¡Genial! Hemos conservado todos los libros. Observe los valores de NULL en la columna translator. Estos valores de NULL corresponden a los registros que no coinciden en la tabla translators tabla. Estos registros corresponden a libros originales sin traductores. Esperamos que haya comprendido la intuición que hay detrás de las LEFT JOINs. Puede aprender más sobre este tipo de JOIN de SQL en esta guía introductoria. Bien, revisemos otro ejemplo de LEFT JOIN para consolidar el conocimiento sobre el tema. Ejemplo #4 Esta vez, queremos mostrar la información básica del libro (es decir, ID y título) junto con los apellidos de los editores correspondientes. De nuevo, queremos mantener todos los libros en el conjunto de resultados. Entonces, ¿cuál sería la consulta? SELECT b.id, b.title, e.last_name AS editor FROM books b LEFT JOIN editors e ON b.editor_id = e.id ORDER BY b.id; idtitleeditor 1Time to Grow Up!Brown 2Your TripJohnson 3Lovely LoveRoberts 4Dream Your LifeRoberts 5OrangesWright 6Your Happy LifeJohnson 7Applied AIEvans 8My Last BookNULL Bastante simple, ¿verdad? Volvemos a mantener todos los libros en el conjunto de resultados, incluido el último, que no tiene un editor correspondiente en nuestra base de datos (observe el valor NULL en la última fila). Podemos imaginar que el editor no está presente en la tabla de nuestros editores actuales simplemente porque dejó la editorial después de editar el libro. ¿Y si tenemos algunos editores en el equipo que aún no han publicado ningún libro? Comprobémoslo con el siguiente tipo de join externo RIGHT JOIN RIGHT JOIN es muy similar a LEFT JOIN. Apuesto a que ha adivinado que la única diferencia es que RIGHT JOIN mantiene todos los registros de la tabla derecha, incluso si no pueden coincidir con la tabla izquierda. Si lo hizo, ¡está en lo cierto! Ejemplo 5 Repitamos nuestro ejemplo anterior, pero esta vez, nuestra tarea será conservar todos los registros de la tabla editors tabla. Así, tendremos la misma consulta que en el ejemplo nº 4, salvo que sustituimos LEFT JOIN por RIGHT JOIN: SELECT b.id, b.title, e.last_name AS editor FROM books b RIGHT JOIN editors e ON b.editor_id = e.id ORDER BY b.id; idtitleeditor 1Time to Grow Up!Brown 2Your TripJohnson 3Lovely LoveRoberts 4Dream Your LifeRoberts 5OrangesWright 6Your Happy LifeJohnson 7Applied AIEvans NULLNULLJones NULLNULLSmith Con sólo una palabra cambiada en la consulta, el resultado es muy diferente. Podemos ver que efectivamente tenemos dos editores(Jones y Smith) que no tienen libros correspondientes en nuestra base de datos. Parece que hay nuevas contrataciones. Y ese no es el único cambio. Tampoco tenemos Mi último libro en el conjunto de resultados. Este registro de la tabla izquierda (es decir books) no se encontró en la tabla de la derecha (es decir editors) y no llegó al resultado final. Los RIGHT JOINs son raramente utilizados en la práctica porque normalmente pueden ser reemplazados por los LEFT JOINs que son mucho más comunes. Por ejemplo, en nuestro caso, podríamos tomar nuestra consulta del ejemplo 4 y simplemente intercambiar books y editors poniendo editors en la cláusula FROM, convirtiéndola en la tabla de la izquierda, y poniendo books en la cláusula LEFT JOIN, convirtiéndola en la tabla de la derecha. El resultado habría sido el mismo que el de la tabla anterior. JOIN COMPLETO Aquí llegamos al último tipo de join externo, que es FULL JOIN. Utilizamos FULL JOIN cuando queremos mantener todos los registros de todas las tablas, incluso los que no coinciden. Por lo tanto, es como LEFT JOIN y RIGHT JOIN combinados. Vayamos directamente a los ejemplos para ver cómo funciona en la práctica. Ejemplo #6 Para empezar, vamos a unir de nuevo las tablas books y editors pero esta vez mantendremos todos los registros de ambas tablas. Simplemente utilizamos FULL JOIN como palabra clave de unión, dejando el resto de la consulta sin ningún cambio: SELECT b.id, b.title, e.last_name AS editor FROM books b FULL JOIN editors e ON b.editor_id = e.id ORDER BY b.id; idtitleeditor 1Time to Grow Up!Brown 2Your TripJohnson 3Lovely LoveRoberts 4Dream Your LifeRoberts 5OrangesWright 6Your Happy LifeJohnson 7Applied AIEvans 8My Last BookNULL NULLNULLJones NULLNULLSmith Se ve muy bien. Como era de esperar, conservamos todos los libros, incluso los que no tienen un editor correspondiente. También conservamos todos los editores, incluso los que aún no tienen ningún libro correspondiente. Tenga en cuenta que el orden de las tablas no importa con FULL JOIN. El resultado sería el mismo si intercambiáramos las tablas poniendo la tabla editors en la cláusula FROM y la tabla books en la cláusula FULL JOIN. Ejemplo 7 En nuestro último ejemplo, queremos unir las cuatro tablas para obtener información sobre todos los libros, autores, editores y traductores en una sola tabla. Por lo tanto, utilizaremos FULL JOIN en toda nuestra consulta SQL: SELECT b.id, b.title, a.last_name AS author, e.last_name AS editor, t.last_name AS translator FROM books b FULL JOIN authors a ON b.author_id = a.id FULL JOIN editors e ON b.editor_id = e.id FULL JOIN translators t ON b.translator_id = t.id ORDER BY b.id; idtitleauthoreditortranslator 1Time to Grow Up!WriterBrownNULL 2Your TripDouJohnsonWeng 3Lovely LoveBrainRobertsNULL 4Dream Your LifeWriterRobertsNULL 5OrangesSavelievaWrightDavies 6Your Happy LifeDouJohnsonGreen 7Applied AISmartEvansEdwards 8My Last BookWriterNULLNULL NULLNULLNULLJonesNULL NULLNULLNULLSmithNULL Como se ha solicitado, la tabla muestra todos los libros, autores, editores y traductores. Los registros que no coinciden tienen los valores de NULL. Esto es un gran resumen de los datos almacenados en nuestra base de datos. ¡Es hora de practicar Tipos de JOIN en SQL! El dominio de Tipos de JOIN en SQL es uno de los requisitos clave para cualquier persona que trabaje con bases de datos relacionales. Para ayudarte a navegar por los diferentes tipos de JOINs SQL, LearnSQL.com ha desarrollado una hoja de trucos de JOINs SQL de dos páginas. Proporciona la sintaxis de los diferentes JOINs así como ejemplos. Sin embargo, para dominar los JOINs, necesitas mucha práctica. Recomiendo comenzar con el curso interactivo Tipos de JOIN en SQL que cubre los tipos importantes de JOINs a través de docenas de ejemplos y ejercicios. Aprenda más sobre este curso en este artículo de resumen. BONUS: Aquí están las 10 principales preguntas de la entrevista de SQL JOIN y cómo responderlas. ¡Feliz aprendizaje! Tags: SQL aprender SQL JOIN