5th Dec 2022 Lectura de 5 minutos Guía ilustrada del CROSS JOIN de SQL Dorota Wdzięczna JOIN Cláusulas SQL consejo Índice ¿Qué es un JOIN? ¿Qué es un CROSS JOIN? Otras formas de obtener productos cartesianos Uso de CROSS JOIN en la multiplicación Uso de CROSS JOIN con muchas tablas Más información ¿Qué es una sentencia SQL CROSS JOIN? ¿Cuándo se debe usar? ¿Cuándo no debe usarla? Este artículo le dirá lo que necesita saber sobre el CROSS JOIN. Usted ya sabe que puede usar la sentencia SQL JOIN para unir una o más tablas que comparten un registro coincidente. Y si has leído el post de LearnSQL Aprendiendo Tipos de JOIN en SQL Usando Situaciones de la Vida Real, sabes que hay muchos tipos de JOINs. El que elijas dependerá de lo que quieras que haga. Hay un JOIN que no usamos muy a menudo pero que sirve para un propósito muy específico: el CROSS JOIN. En este artículo, explicaré qué hace un CROSS JOIN y cómo funciona. También explicaré cuándo debe usar uno y cuándo no. ¿Qué es un JOIN? Primero, revisemos lo que hace un JOIN en SQL: le permite combinar datos (es decir, registros) de múltiples tablas. Los operadores JOIN le permiten unir registros de maneras específicas, como por ejemplo, sólo los registros que tienen una coincidencia en ambas tablas. Cuando comencemos a explorar CROSS JOIN, trabajaremos primero con dos tablas, "color" y "tshirt". La tabla "color", que almacena los nombres de los colores de las camisetas disponibles, tiene el siguiente aspecto: id name 1 yellow 2 green 3 pink La tabla "tshirt", que almacena las tallas de las distintas camisetas, tiene este aspecto: id size 1 S 2 M 3 L 4 XL La gente lleva camisetas de todas las combinaciones de tallas y colores. Así que vamos a unir los datos de estas tablas. ¿Qué es un CROSS JOIN? CROSS JOIN devuelve un producto cartesiano, o todos los registros unidos a todos los registros de todas las tablas. No hay ninguna condición en JOIN (es decir, no hay cláusula ON). El número de registros resultante es igual al número de filas de la primera tabla multiplicado por el número de filas de la segunda tabla. CROSS JOIN se utiliza muy raramente. Como produce todas las combinaciones posibles de registros de todas las tablas, puede ser una operación peligrosa para las tablas que contienen muchos registros. Tenemos nuestras dos tablas, que se muestran a continuación. Utilicemos CROSS JOIN en ellas y veamos qué ocurre: tshirt id size 1 S 2 M 3 L 4 XL color id name 1 yellow 2 green 3 pink SELECT * FROM tshirt CROSS JOIN color; Observe que una tabla aparece después de la cláusula FROM; el nombre de la otra tabla sigue a CROSS JOIN. No importa qué tabla aparece después de la cláusula from y cuál después de CROSS JOIN. Los resultados serán los mismos: todas las combinaciones posibles de registros de todas las tablas. Este es el resultado de esta operación: id size id name 1 S 1 yellow 2 M 1 yellow 3 L 1 yellow 4 XL 1 yellow 1 S 2 green 2 M 2 green 3 L 2 green 4 XL 2 green 1 S 3 pink 2 M 3 pink 3 L 3 pink 4 XL 3 pink Hemos seleccionado todos los registros de la tabla "tshirt" y unimos cada registro con todos los registros de la tabla "color". Es decir, tenemos la combinación de cada camiseta de cada talla con cada color. El gráfico siguiente lo explica visualmente: Otras formas de obtener productos cartesianos Hay otra forma de conseguir que una consulta devuelva un producto cartesiano sin utilizar CROSS JOIN: SELECT * FROM tshirt, color ; En este caso, las tablas que desea unir deben aparecer después de la cláusula FROM . Tenga en cuenta que al utilizar el *, está seleccionando todos los registros de ambas tablas. El conjunto de resultados será el mismo que el del ejemplo de CROSS JOIN. Uso de CROSS JOIN en la multiplicación También podemos usar CROSS JOIN para hacer una multiplicación. Vamos a utilizar dos tablas que almacenan algunos números básicos para ver cómo funciona. Primero, echa un vistazo a las tablas: "t1" n 11 12 13 "t2" n 11 12 13 Ambas tablas almacenan los mismos números: 11, 12, 13. Nuestro objetivo es multiplicar estos números por sí mismos, creando una especie de tabla de multiplicación. Para ello podemos utilizar el CROSS JOIN. Mira la consulta de abajo: SELECT t1.n, t2.n, t1.n*t2.n AS result FROM t1 CROSS JOIN t2 ; El SELECT lista tres columnas: los números de la primera tabla (t1.n), los números de la segunda tabla (t2.n), y la multiplicación que se almacena en la columna del resultado (t1.n*t2.n AS result). La tabla de abajo muestra el resultado: t1.n t2.n result 11 11 121 11 12 132 11 13 143 12 11 132 12 12 144 12 13 156 13 11 143 13 12 156 13 13 169 Uso de CROSS JOIN con muchas tablas Podemos utilizar más de dos tablas en una CROSS JOIN. Imaginemos que una empresa produce camisetas en tres tallas (S, M, L) y en dos tejidos (algodón y lino). Cada camiseta está disponible en dos colores: rosa o azul. Echa un vistazo a las siguientes tablas: "color" id name 1 blue 3 pink "camiseta" id size 1 S 2 M 3 L "tejido" id name 1 cotton 2 linen Suponga ahora que quiere ver todas las camisetas posibles: cada combinación de talla, color y tejido. La siguiente consulta recupera esta información utilizando un CROSS JOIN en tres tablas: SELECT tshirt.size as size, color.name AS color, fabric.name as fabric FROM tshirt CROSS JOIN fabric CROSS JOIN color ; Este es el resultado: size color fabric S blue cotton M blue cotton L blue cotton S pink cotton M pink cotton L pink cotton S blue linen M blue linen L blue linen S pink linen M pink linen L pink linen Hay doce camisetas posibles. Los dos colores multiplicados por tres tallas y de nuevo por dos tejidos dan como resultado un 12. Más información Hay más cosas que saber sobre el uso de CROSS JOIN que las que hemos cubierto en esta introducción ilustrada. Si quieres aprender más sobre JOINs, consulta el curso SQL para principiantes de LearnSQL. Tags: JOIN Cláusulas SQL consejo