Volver a la lista de artículos Artículos
Lectura de 5 minutos

Guía ilustrada del CROSS JOIN de SQL

¿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:

CROSS JOIN

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.