21st Jul 2022 Lectura de 8 minutos Cómo unir tablas en SQL sin usar JOINs Tihomir Babic fact table data warehouse Índice El primer método: FROM y WHERE Sintaxis Ejemplo Consulta Resultado El segundo método: UNION/UNION ALL Sintaxis Ejemplo Consulta: UNION Resultado: UNION Consulta: UNION ALL Resultado: UNION ALL Sí, las tablas se pueden unir sin la palabra clave JOIN Aprenda todas las Formas Posibles de Unir Tablas en SQL Así es como puede combinar tablas sin la palabra clave JOIN la palabra clave JOIN. Parece que no debería ser posible: unir tablas en SQL sin usar la palabra clave JOIN. Pero usar la palabra clave JOIN no es la única manera de unir tablas en SQL. Este artículo le mostrará dos métodos adicionales para unir tablas. Ninguno de ellos requiere la palabra clave JOIN para funcionar. Estos son: Usar una coma entre los nombres de las tablas en la cláusula FROM y especificar la condición de unión en un WHERE Usando UNION/UNION ALL. Asumo que sabes cómo funciona JOIN. Si lo necesitas, aquí tienes un repaso de cómo unir tablas usando JOINs. El primer método: FROM y WHERE Sintaxis La sintaxis para este método de unir tablas sin usar JOINs es: SELECT * FROM , WHERE Puede reemplazar la palabra clave JOIN por una coma en la cláusula FROM. ¿Qué hace ahora? No hay ninguna palabra clave ON para que indique la condición de unión como lo haría al utilizar JOIN, por ejemplo, en qué dos columnas quiere unir las tablas. En este método, simplemente se utiliza una cláusula WHERE para hacerlo. Este método hace exactamente lo mismo que: SELECT * FROM <table1> JOIN <table2> ON <condition> Veamos cómo funciona en la práctica. Ejemplo En este ejemplo, necesito encontrar el nombre del artista, los álbumes que ha grabado y los años en que fueron grabados, para cada artista. Para mostrarte cómo funciona este método, utilizaré dos tablas. La primera es artist: idartist_name 1Paul Simon 2Marvin Gaye 3Bettye LaVette 4Joni Mitchell 5Sly and the Family Stone Es una tabla sencilla que contiene varios de mis músicos favoritos. La otra tabla, albumtiene el siguiente aspecto: idalbum_nameyear_recordedartist_id 1Dance to the Music19685 2Small Talk19745 3Stranger to Stranger20161 4I've Got My Own Hell to Raise20053 5Blues19714 6Court and Spark19744 7A Tribute to the Great Nat "King" Cole19652 8Graceland19861 9Still Crazy After All These Years19751 10In the Blue Light20181 11There's a Riot Goin' On19715 12The Scene of the Crime20073 13Mingus19794 14What's Going On19712 15Here, My Dear19782 Estos son los álbumes grabados por los músicos de la primera tabla. Consulta La consulta para unir estas tablas sin la palabra clave JOIN tiene el siguiente aspecto: SELECT artist_name, album_name, year_recorded FROM artist, album WHERE artist.id = album.artist_id; Primero, especifico las columnas que quiero ver en mi resultado: artist_name, album_name, y year_recorded. Provienen de artist o album. Uno estas dos tablas simplemente enumerándolas en la cláusula FROM y separándolas con una coma. La cláusula WHERE se utiliza generalmente para filtrar resultados. Puedo utilizarla para filtrar este resultado de forma que muestre todos los datos en los que la columna id de la tabla artist sea igual a la columna artist_id de la tabla album. Puede ver que la condición en WHERE en esta consulta es la misma que estaría después de la palabra clave ON cuando se utiliza JOIN: artist.id = album.artist_id. La consulta equivalente con la palabra clave JOIN es: SELECT artist_name, album_name, year_recorded FROM artist JOIN album ON artist.id = album.artist_id; Resultado Ambas consultas devuelven el mismo resultado: artist_namealbum_nameyear_recorded Paul SimonIn the Blue Light2018 Paul SimonStill Crazy After All These Years1975 Paul SimonGraceland1986 Paul SimonStranger to Stranger2016 Marvin GayeHere, My Dear1978 Marvin GayeWhat's Going On1971 Marvin GayeA Tribute to the Great Nat "King" Cole1965 Bettye LaVetteThe Scene of the Crime2007 Bettye LaVetteI've Got My Own Hell to Raise2005 Joni MitchellMingus1979 Joni MitchellCourt and Spark1974 Joni MitchellBlues1971 Sly and the Family StoneThere's a Riot Goin' On1971 Sly and the Family StoneSmall Talk1974 Sly and the Family StoneDance to the Music1968 El resultado combina los datos de las dos tablas iniciales. Ahora puedo ver, por ejemplo, que Paul Simon grabó el álbum "In the Blue Light" en 2018. Si no te fías de mi consulta, siempre puedes consultar la Wikipedia. Este método utiliza una columna común para unir tablas. Recuerda que también puedes unir tablas que no tengan una columna común. El segundo método: UNION/UNION ALL Sintaxis SELECT , , … FROM UNION / UNION ALL SELECT , , … FROM Tanto UNION como UNION ALL se utilizan para unir el resultado de la primera consulta con el de la segunda. Basta con escribir dos sentencias SELECT y escribir UNION o UNION ALL entre ellas. Pero, ¿cuál es la diferencia entre estas dos palabras clave SQL? Recordemos que UNION elimina las filas duplicadas de la consulta y las muestra sólo una vez. UNION ALL muestra todas las filas de ambas tablas, sin importar el número de duplicados. Para que tanto UNION como UNION ALL funcionen, todas las columnas de las dos sentencias SELECT deben coincidir. Esto significa que el número de columnas seleccionadas debe ser el mismo, y los tipos de datos de esas columnas deben ser los mismos. Estos dos operadores se denominan operadores de conjunto. Lee este artículo para saber más sobre estos y otros operadores de conjunto. Ejemplo En este ejemplo también tenemos dos tablas. La primera se llama customer: idfirst_namelast_name 1JimmyHellas 2FrancoisJambony 3RenataTraviata 4CarmenNaburana 5SteveInicks 6ElviraSamson 7AlpaCino 8RosaSparks 9BernardineSane 10BertRandrussell Contiene una lista de mis clientes. La segunda tabla es supplier: idfirst_namelast_name 1ArpadPolanski 2BillyVan Persie 3SteveInicks 4Jean-ClaudeZaandam 5EminaArkayeva 6BoMilosz 7JanWrangler 8HeinrichStroopwafel 9HerringoStarr 10JosephineMatijevic 11AlpaCino 12FlintWestwood 13DesPaulmond 14WilmaJackson 15KatrinVerson 16BertRandrussell 17CarmenNaburana 18JimmyTulp 19LuisWolf 20MirandaFanucci Si inspeccionas estas tablas un poco más de cerca, verás que algunas personas están en ambas tablas. Por ejemplo, fíjate en Steve Inicks: esto significa que Steve es, junto con otras personas, tanto mi cliente (compra algunos servicios a mi empresa) como mi proveedor (me presta algunos servicios). Ahora, veamos qué aspecto tiene cuando uno estas tablas con UNION o UNION ALL. Consulta: UNION Este método de combinar tablas sin utilizar la palabra clave JOIN se traduce en la siguiente consulta: SELECT first_name, last_name FROM customer UNION SELECT first_name, last_name FROM supplier; La primera sentencia SELECT selecciona las columnas first_name y last_name de la tabla customer. La segunda sentencia SELECT hace lo mismo pero desde la tabla supplier. Utilizo UNION para unir los resultados de estas dos consultas. Funciona: hay dos columnas en ambas sentencias SELECT, y son del mismo tipo de datos. Incluso tienen el mismo nombre, aunque no es necesario para que la consulta funcione. Resultado: UNION Al ejecutar la consulta se obtiene esto: first_namelast_name AlpaArpad CinoBilly JosephineMatijevic LuisWolf Jean-ClaudeZaandam SteveInicks BillyVan Persie EminaArkayeva MirandaFanucci BoMilosz JimmyHellas FrancoisJambony RosaSparks KatrinVerson JanWrangler BernardineSane HeinrichStroopwafel ElviraSamson RenataTraviata JimmyTulp WilmaJackson ArpadPolanski BertRandrussell DesPaulmond FlintWestwood CarmenNaburana HerringoStarr Como he mencionado, es una combinación de todos los datos de ambas tablas. Comprobemos si hay duplicados. He mencionado que Steve Inicks está en ambas customer y supplier tablas. En el resultado de la consulta, sólo se encuentra una vez. He marcado la fila donde está. Veamos en qué se diferencia de UNION ALL. Consulta: UNION ALL La consulta en este caso es: SELECT first_name, last_name FROM customer UNION ALL SELECT first_name, last_name FROM supplier; Como puedes ver, esto no es muy diferente. De hecho, es la misma consulta, excepto que tiene UNION ALL en lugar de UNION. Sin embargo, los resultados son diferentes. Echemos un vistazo. Resultado: UNION ALL El resultado de la consulta es: first_namelast_name JimmyHellas FrancoisJambony RenataTraviata CarmenNaburana SteveInicks ElviraSamson AlpaCino RosaSparks BernardineSane BertRandrussell ArpadPolanski BillyVan Persie SteveInicks Jean-ClaudeZaandam EminaArkayeva BoMilosz JanWrangler HeinrichStroopwafel HerringoStarr JosephineMatijevic AlpaCino FlintWestwood DesPaulmond WilmaJackson KatrinVerson BertRandrussell CarmenNaburana JimmyTulp LuisWolf MirandaFanucci Sabiendo que Steve Inicks aparece como cliente y como proveedor, comprobemos cuántas veces aparece en el resultado. Aparece dos veces, ambas marcadas en azul. También he marcado a otros tres que aparecen dos veces: Alpa Cino, Bert Randrussell y Carmen Naburana. Aquí hay otro ejemplo de uso de UNION y UNION ALL.. Sí, las tablas se pueden unir sin la palabra clave JOIN Como acaba de ver, no siempre es necesario usar la palabra clave JOIN para combinar dos tablas en SQL. Puede reemplazarla con una coma en la cláusula FROM y luego indicar su condición de unión en la cláusula WHERE. El otro método consiste en escribir dos sentencias SELECT. El resultado de cada una es una tabla, así que simplemente use UNION o UNION ALL para combinar las dos. Tenga en cuenta que esto sólo funciona si sus sentencias SELECT tienen el mismo número de columnas y los mismos tipos de datos. Utilice UNION cuando no quiera mostrar duplicados y UNION ALL cuando quiera ver duplicados. Aprenda todas las Formas Posibles de Unir Tablas en SQL Mientras más formas conozca para unir tablas en SQL, mejor. Con estos dos métodos más el JOIN, unir tablas se vuelve más fácil. Los resultados de tus consultas se acercan más a lo que necesitas, y obtienes más de SQL. Conocer una variedad de formas de unir tablas también te permite agitar un poco tu código. Puede ser aburrido escribir todo de la misma manera todo el tiempo. Pero lo más importante es que cada uno de los tres métodos es útil en diferentes situaciones. Puedes aprender todos estos métodos de unión de tablas en nuestro curso SQL para principiantes . Esto es sólo un primer paso para dominar Curso completo de SQL. También necesitas mucha práctica para dominar la unión de tablas. Tal vez, la mejor manera es elegir al menos una opción en línea de nuestra lista de diez. Tags: fact table data warehouse