Saltar a contenido

Un CROSS JOIN le permite producir un producto cartesiano de filas en dos tablas. Esto significa que el CROSS JOIN combina cada fila de la primera tabla con cada fila de la segunda tabla, dando como resultado una combinación completa de todas las filas.

A diferencia de otras cláusulas join como LEFT JOIN o INNER JOIN, la cláusula CROSS JOIN no tiene un predicado de unión.

Supongamos que tiene que realizar un CROSS JOIN de la tabla1 y la tabla2.

Si la tabla1 tiene n filas y la tabla2 tiene m filas, el CROSS JOIN devolverá un resultado con nxm filas.

Por ejemplo, si la tabla1 tiene 1.000 filas y la tabla2 tiene 1.000 filas, el resultado tendrá 1.000 x 1.000 = 1.000.000 filas.

Debido a que un CROSS JOIN puede generar un conjunto de resultados grande, debe utilizarlo con criterio para evitar problemas de rendimiento.

Esta es la sintaxis básica del CROSS JOIN:

SELECT 
  select_list 
FROM 
  table1 
CROSS JOIN table2;

La siguiente afirmación es equivalente a la anterior:

SELECT 
  select_list 
FROM 
  table1,table2;

Como alternativa, puede utilizar una cláusula INNER JOIN con una condición que siempre se evalúe como verdadera para simular la unión cruzada:

SELECT 
  select_list 
FROM 
  table1 
  INNER JOIN table2 ON true;

PostgreSQL CROSS JOIN ejemplo

Las siguientes sentencias CREATE TABLE crean las tablas T1 y T2 e insert sample data para la demostración cruzada.

DROP TABLE IF EXISTS T1;
CREATE TABLE T1 (label CHAR(1) PRIMARY KEY);

DROP TABLE IF EXISTS T2;
CREATE TABLE T2 (score INT PRIMARY KEY);

INSERT INTO T1 (label)
VALUES
    ('A'),
    ('B');

INSERT INTO T2 (score)
VALUES
    (1),
    (2),
    (3);

La siguiente sentencia utiliza el operador CROSS JOIN para unir la tabla T1 con la tabla T2.

SELECT *
FROM T1
CROSS JOIN T2;
 label | score
-------+-------
 A     |     1
 B     |     1
 A     |     2
 B     |     2
 A     |     3
 B     |     3
(6 rows)

La siguiente imagen ilustra el resultado del CROSS JOIN al unir la tabla T1 a la tabla T2:

PostgreSQL CROSS JOIN illustration

Algunos ejemplos prácticos del uso de CROSS JOIN

En la práctica, el CROSS JOIN puede resultarle útil cuando necesite combinar datos de dos tablas sin condiciones de coincidencia específicas. Por ejemplo:

Programación

Suponga que tiene una tabla de empleados y turnos, y quiere crear un horario que enumere todas las combinaciones posibles de empleados y turnos para explorar varios escenarios de dotación de personal:

SELECT *
FROM employee
CROOS JOIN shift;

Gestión de inventarios

En un sistema de gestión de inventarios, tiene tablas para almacenes y productos. Un CROSS JOIN puede ayudarle a analizar la disponibilidad de cada producto en cada almacén:

SELECT *
FROM products
CROSS JOIN warehouses;

Resumen

  • Utilice la cláusula CROSS JOIN de PostgreSQL para hacer un producto cartesiano de filas en dos tablas.