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