Resumen: en este tutorial, aprenderás a utilizar SQLite CROSS JOIN
para combinar dos o más conjuntos de resultados de varias tablas.
Introducción a la cláusula CROSS JOIN de SQLite
Si utilizas un LEFT JOIN
INNER JOIN
, o CROSS JOIN
sin la cláusula ON
o USING
, SQLite produce el producto cartesiano de las tablas implicadas. El número de filas del producto cartesiano es el producto del número de filas de cada una de las tablas implicadas.
Supongamos que tenemos dos tablas A y B. Las siguientes sentencias realizan la unión cruzada y producen un producto cartesiano de las filas de las tablas A y B.
Code language: SQL (Structured Query Language) (sql)SELECT *FROM A JOIN B;
Code language: SQL (Structured Query Language) (sql)SELECT *FROM AINNER JOIN B;
Code language: SQL (Structured Query Language) (sql)SELECT *FROM ACROSS JOIN B;
Code language: SQL (Structured Query Language) (sql)SELECT * FROM A, B;
Supongamos, la tabla A tiene N filas y la tabla B tiene M filas, la CROSS JOIN
de estas dos tablas producirá un conjunto de resultados que contiene NxM
filas.
Imagina que si tienes la tercera tabla C con K
filas, el resultado de la cláusula CROSS JOIN
de estas tres tablas contendrá NxMxK
filas, que pueden ser muy enormes. Por lo tanto, debes tener mucho cuidado cuando utilices la cláusula CROSS JOIN
.
Las cláusulas INNER JOIN
y LEFT JOIN
las utilizas con más frecuencia que la cláusula CROSS JOIN
. Sin embargo, encontrarás la cláusula CROSS JOIN
muy útil en algunos casos.
Por ejemplo, cuando quieras tener una matriz que tenga dos dimensiones llenas de datos completamente como datos de miembros y fechas en una base de datos de miembros. Usted quiere comprobar los asistentes de los miembros para todas las fechas relevantes. En este caso, puede utilizar la cláusula CROSS JOIN
como la siguiente declaración:
Code language: SQL (Structured Query Language) (sql)SELECT name, date FROM membersCROSS JOIN dates;
Ejemplo de cláusula CROSS JOIN de SQLite
Las siguientes sentencias crean las tablas ranks
y suits
que almacenan los rangos y palos de una baraja e insertan los datos completos en estas dos tablas.
Code language: SQL (Structured Query Language) (sql)CREATE TABLE ranks ( rank TEXT NOT NULL);CREATE TABLE suits ( suit TEXT NOT NULL);INSERT INTO ranks(rank) VALUES('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('10'),('J'),('Q'),('K'),('A');INSERT INTO suits(suit) VALUES('Clubs'),('Diamonds'),('Hearts'),('Spades');
La siguiente sentencia utiliza la cláusula CROSS JOIN
para devolver los datos completos de la baraja:
Code language: SQL (Structured Query Language) (sql)SELECT rank, suit FROM ranks CROSS JOIN suitsORDER BY suit;
rango | suit | ||
---|---|---|---|
2 | Clubes | 3 | Clubes |
4 | Clubes | ||
5 | Clubes | ||
Clubes | |||
Clubes | |||
8 | Clubes | ||
9 | Clubes | 10 | Clubes |
J | Clubes | ||
Q | Clubes | ||
K | Clubes | ||
A | Clubes | ||
2 | Diamantes | 3 | Diamantes |
4 | Diamantes | ||
5 | Diamantes | 6 | Diamantes |
7 | Diamantes | ||
Diamantes | |||
9 | Diamantes | ||
10 | Diamantes | ||
J | Diamantes | ||
Q | Diamantes | ||
K | Diamantes | A | Diamantes |
2 | Corazones | ||
3 | Corazones | ||
4 | Corazones | ||
5 | Corazones | 6 | Corazones |
7 | Corazones | ||
8 | Corazones | ||
9 | Corazones | ||
10 | |||
J | Corazones | Q | Corazones |
K | Corazones | ||
A | Corazones | ||
2 | Palas | 3 | Palas | 4 | Palas |
Palas | 6 | Palas | 7 | Palas | 8 | Palas | 9 | Palas |
10 | Picas | ||
J | Picas | Q | Picas |
Picas | |||
A | Picas |
En este tutorial, has aprendido a utilizar la cláusula CROSS JOIN de SQLite para producir un producto cartesiano de múltiples tablas involucradas en la unión.
- ¿Ha sido útil este tutorial?
- SíNo