20th Jul 2022 Lectura de 7 minutos ¿Cuál es la diferencia entre tener varias tablas en FROM y usar JOIN? Kateryna Koidan SQL aprender SQL JOIN Índice Unir tablas enumerándolas en FROM Unir tablas usando la palabra clave JOIN ¿Por qué utilizar la nueva sintaxis para las uniones SQL? Las condiciones de unión están separadas de las condiciones de filtrado Es más fácil unir varias tablas Los LEFT / RIGHT/ FULL JOINs son más fáciles Se evitan los CROSS JOINs accidentales ¡Es hora de aprender la nueva sintaxis para Tipos de JOIN en SQL! ¿Cuál es su enfoque para unir tablas en SQL? En este artículo, discutimos dos enfoques y explicamos por qué muchos desarrolladores de SQL tienen una clara preferencia por JOIN. ¿Prefiere enumerar varias tablas en FROM y utilizar WHERE para establecer las condiciones de unión? ¿O utiliza la palabra clave JOIN? SQL admite ambas, pero hay diferencias significativas entre ellas. Veamos cada una en detalle y luego discutamos por qué se prefiere JOIN. Unir tablas enumerándolas en FROM Supongamos que tenemos una juguetería y dos tablas de la base de datos que queremos unir toys y sales. Juguetes idnamebrandprice 1BumblebeeTransformers14.99 2Optimus PrimeTransformers19.99 3Lightning McQueenDisney Cars23.97 4RamoneDisney Cars20.99 5Wonder WomanBarbie39.99 6Princess LeiaBarbie99.99 7Wizard of Oz: GlindaBarbie43.95 Ventas idtoy_idemployee_iddatequantity 1532020-07-011 2112020-07-011 3312020-07-021 4632020-07-031 5232020-07-031 Podemos simplemente listar ambas tablas en la cláusula FROM y establecer en la cláusula WHERE que el id de la tabla toy debe coincidir con el toy_id de la tabla sales tabla: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t, sales s WHERE t.id = s.toy_id; Obtendremos el siguiente resultado: idnamebrandpricequantitydate 1BumblebeeTransformers14.9912020-07-01 2Optimus PrimeTransformers19.9912020-07-03 3Lightning McQueenDisney Cars23.9712020-07-02 5Wonder WomanBarbie39.9912020-07-01 6Princess LeiaBarbie99.9912020-07-03 Todo ha funcionado como se esperaba: hemos unido dos tablas y hemos obtenido los resultados que esperábamos. Esta es definitivamente una solución que funciona para unir tablas en SQL. Sin embargo, utiliza una sintaxis antigua que era común antes de que el estándar SQL-92 introdujera la palabra clave JOIN. Veamos ahora como podemos obtener el mismo resultado usando un enfoque moderno para unir tablas. Unir tablas usando la palabra clave JOIN Podemos utilizar la siguiente consulta con la palabra clave JOIN para hacer lo mismo: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t JOIN sales s ON t.id = s.toy_id; Esta sintaxis se introdujo en el estándar SQL-92. En este caso, sólo tenemos una tabla en la cláusula FROM; la tabla que queremos unir aparece en la cláusula JOIN. Luego, tenemos la palabra clave ON para especificar las columnas que se utilizarán para unir estas tablas. El resultado de esta consulta es el mismo que el anterior. Sin embargo, este enfoque tiene una serie de ventajas que lo hacen más frecuente entre los profesionales de SQL. Si prefieres utilizar la sintaxis antigua para unir tablas, echa un vistazo a los siguientes argumentos. Puede que le hagan cambiar de opinión. ¿Por qué utilizar la nueva sintaxis para las uniones SQL? Empecemos por aclarar que , en cuanto al rendimiento, no hay ninguna diferencia entre las dos sintaxis. El uso de la palabra clave JOIN no sólo es un estándar formal en estos días, sino que también es una práctica común entre los usuarios de SQL. Entonces, ¿cuáles son los beneficios de usar la cláusula JOIN? Las condiciones de unión están separadas de las condiciones de filtrado Cuando se utiliza la sintaxis antigua, las condiciones de unión y las de filtrado se agrupan físicamente en la cláusula WHERE. Esto puede causar cierta confusión. Por ejemplo, digamos que queremos ver sólo las ventas del 3 de julio. Tendremos que añadir una condición más a la cláusula WHERE: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t, sales s WHERE t.id = s.toy_id AND s.date = '2020-07-03'; Ahora tenemos dos condiciones en WHERE, pero sólo una de ellas es una verdadera condición de filtrado. La otra sólo se utiliza para especificar las columnas en las que se van a unir las tablas. Con la palabra clave JOIN, las condiciones de unión se separan de las condiciones de filtrado: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t JOIN sales s ON t.id = s.toy_id WHERE s.date = '2020-07-03'; Aquí, especificamos la condición de unión en ON y utilizamos WHERE para filtrar los resultados. Ambas consultas darán el mismo resultado, pero la nueva sintaxis deja claro dónde se unen las tablas y dónde se filtran los resultados. Es más fácil unir varias tablas A menudo, necesitarás unir varias tablas con SQL. Por ejemplo, digamos que queremos unir la tabla employees a la tabla toys y sales para saber quién ha vendido cada juguete. Empleados idname 1Rob Stevens 2Jane White 3Sofia Clark Con la sintaxis antigua, tendríamos la siguiente consulta: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date, e.name AS employee FROM toys t, sales s, employees e WHERE t.id = s.toy_id AND e.id = s.employee_id; Para unir las mismas tres tablas con la sintaxis JOIN, utilizaríamos esta consulta: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date, e.name AS employee FROM toys t JOIN sales s ON t.id = s.toy_id JOIN employees e ON e.id = s.employee_id; El resultado es el mismo: idnamebrandpricequantitydateemployee 1BumblebeeTransformers14.9912020-07-01Rob Stevens 2Optimus PrimeTransformers19.9912020-07-03Sofia Clark 3Lightning McQueenDisney Cars23.9712020-07-02Rob Stevens 5Wonder WomanBarbie39.9912020-07-01Sofia Clark 6Princess LeiaBarbie99.9912020-07-03Sofia Clark La "cadena" de tablas que queremos unir es más visible en la nueva sintaxis, donde primero unimos dos tablas en columnas específicas y luego unimos la tercera tabla usando otra condición de unión. Con la sintaxis antigua, tenemos las tres tablas juntas en FROM, y luego ambas condiciones de unión especificadas (en cualquier orden) en WHERE. Qué condición corresponde a qué unión, especialmente si necesitamos unir más de tres tablas, se vuelve rápidamente confuso en esta sintaxis. Los LEFT / RIGHT/ FULL JOINs son más fáciles La sintaxis JOIN hace que todo tipo de uniones externas sean muy sencillas. Puede realizar uniones izquierdas (externas), derechas (externas) o completas (externas) simplemente utilizando las palabras clave respectivas (LEFT JOIN, RIGHT JOIN o FULL JOIN). Digamos que queremos unir las tablas toys y sales para que aparezcan todos los juguetes en el resultado, aunque no haya habido ventas de un juguete durante el periodo dado. Puede hacer esta unión fácilmente en cualquier base de datos simplemente utilizando LEFT JOIN: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t LEFT JOIN sales s ON t.id = s.toy_id; El resultado incluirá todos los juguetes y la información de ventas correspondiente, cuando sea aplicable: idnamebrandpricequantitydate 5Wonder WomanBarbie39.9912020-07-01 1BumblebeeTransformers14.9912020-07-01 3Lightning McQueenDisney Cars23.9712020-07-02 6Princess LeiaBarbie99.9912020-07-03 2Optimus PrimeTransformers19.9912020-07-03 4RamoneDisney Cars20.99NULLNULL 7Wizard of Oz: GlindaBarbie43.95NULLNULL Si no conoce las LEFT JOINs, lea esta guía completa sobre cómo unir varias tablas a la izquierda. ¿Y qué pasa con la sintaxis antigua? Eso es complicado. Algunas bases de datos pueden permitir ciertos trucos para unir tablas a la izquierda sin usar la palabra clave JOIN, pero no hay una solución consistente que funcione en todos los casos. Por ejemplo, en Oracle se puede utilizar el operador (+) para hacer una unión a la izquierda: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.day FROM toys t, sales s WHERE t.id = s.toy_id (+); Sin embargo, esta sintaxis no funciona en otras bases de datos. Se evitan los CROSS JOINs accidentales Otro problema común al unir tablas con FROM es el CROSS JOIN accidental. Si omite una condición de unión en WHERE, obtendrá todas las filas de la primera tabla combinadas con todas las filas de la segunda tabla. Así, el número de filas en el conjunto de resultados será la multiplicación del número de filas en cada tabla. Este error puede ser difícil de detectar y depurar. Al mismo tiempo, cuando se utiliza el estándar SQL-92 para unir tablas, se obtiene un error de sintaxis si se omite la condición de unión. Por supuesto, puede unir sus tablas de forma cruzada con la nueva sintaxis, pero sólo si utiliza explícitamente la palabra clave correspondiente (CROSS JOIN). ¡Es hora de aprender la nueva sintaxis para Tipos de JOIN en SQL! La mayoría de los profesionales de SQL están de acuerdo en que la nueva sintaxis es más legible una vez que te acostumbras a ella. Con suerte, usted también está convencido de que el enfoque moderno para unir tablas en SQL merece su atención. LearnSQL ofrece un curso completo sobre Tipos de JOIN en SQL que incluye 93 ejercicios interactivos. Tendrás la oportunidad de practicar las uniones internas, todo tipo de uniones externas, uniones no equis y autouniones. Además de los ejercicios, puede resultarte útil refrescar tus conocimientos de Tipos de JOIN en SQL con nuestras guías para principiantes: Cómo aprender Tipos de JOIN en SQL Cómo practicar Tipos de JOIN en SQL Aprendiendo JOINs con Ejemplos de SQL del Mundo Real ¡Feliz aprendizaje! Tags: SQL aprender SQL JOIN