Problema:
Desea obtener todas las combinaciones de filas de dos tablas en SQL.
Ejemplo:
Aquí hay dos tablas:una contiene letras (letters
), y el otro contiene números (numbers
):
carta |
---|
X |
Y |
número |
---|
0 |
1 |
2 |
Solución 1:
Para combinar cada fila de las letters
tabla con cada fila de los numbers
tabla, usaremos el CROSS JOIN
:
SELECT * FROM letters CROSS JOIN numbers;
El resultado de la consulta se ve así:
carta | número |
---|---|
X | 0 |
Y | 0 |
X | 1 |
Y | 1 |
X | 2 |
Y | 2 |
Solución 2:
Otra forma de realizar CROSS JOIN es la siguiente:
SELECT * FROM letters, numbers;
Esto obtendrá exactamente el mismo resultado producido por la consulta anterior.
Discusión:
Como regla general, un CROSS JOIN
produce un conjunto de resultados en el que cada fila de una tabla se une a cada fila de otra tabla. En otras palabras, si la primera tabla almacena n filas y la segunda tabla almacena m filas, luego un CROSS JOIN
dará como resultado un producto cartesiano de n × m filas Es por eso que hay seis filas devueltas por la consulta en el ejemplo anterior.
Porque un CROSS JOIN
produce todas las combinaciones posibles de las filas entre las tablas que se unen, no es necesario especificar una relación. Entonces, a diferencia de otros JOINs
, no hay ON
cláusula en un CROSS JOIN
.