sql >> Base de Datos >  >> RDS >> SQLite

SQLite CROSS JOIN con un Ejemplo Práctico

Resumen :en este tutorial, aprenderá a usar SQLite CROSS JOIN para combinar dos o más conjuntos de resultados de varias tablas.

Introducción a SQLite CROSS JOIN cláusula

Si usa un LEFT JOIN , INNER JOIN , o CROSS JOIN sin el ON o USING cláusula, SQLite produce el producto cartesiano de las tablas involucradas. El número de filas en el producto cartesiano es el producto del número de filas en cada tabla involucrada.

Supongamos que tenemos dos tablas A y B. Las siguientes declaraciones realizan la unión cruzada y producen un producto cartesiano de las filas de las tablas A y B.

SELECT *
FROM A JOIN B;Code language: SQL (Structured Query Language) (sql)
SELECT *
FROM A
INNER JOIN B;Code language: SQL (Structured Query Language) (sql)
SELECT *
FROM A
CROSS JOIN B;Code language: SQL (Structured Query Language) (sql)
SELECT * 
FROM A, B;Code language: SQL (Structured Query Language) (sql)

Supongamos que la tabla A tiene N filas y la tabla B tiene M filas, 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 CROSS JOIN cláusula de estas tres tablas contendrá NxMxK filas, que pueden ser muy grandes. Por lo tanto, debe tener mucho cuidado al usar CROSS JOIN cláusula.

Usas el INNER JOIN y LEFT JOIN cláusulas con más frecuencia que CROSS JOIN cláusula. Sin embargo, encontrará el CROSS JOIN cláusula muy útil en algunos casos.

Por ejemplo, cuando desea tener una matriz que tenga dos dimensiones llenas de datos completamente como datos de miembros y fechas en una base de datos de miembros. Desea verificar los asistentes de los miembros para todas las fechas relevantes. En este caso, puede usar el CROSS JOIN cláusula como la siguiente declaración:

SELECT name,
       date 
FROM members
CROSS JOIN dates;Code language: SQL (Structured Query Language) (sql)

SQLite CROSS JOIN ejemplo de cláusula

Las siguientes declaraciones crean los ranks y suits tablas que almacenan los rangos y palos de una baraja de cartas e insertan los datos completos en estas dos tablas.

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');Code language: SQL (Structured Query Language) (sql)

La siguiente instrucción utiliza CROSS JOIN cláusula para devolver una baraja completa de datos de cartas:

SELECT rank,
       suit
  FROM ranks
       CROSS JOIN
       suits
ORDER BY suit;Code language: SQL (Structured Query Language) (sql)
rango traje
2 Clubes
3 Clubes
4 Clubes
5 Clubes
6 Clubes
7 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
8 Diamantes
9 Diamantes
10 Diamantes
J Diamantes
P Diamantes
K Diamantes
A Diamantes
2 Corazones
3 Corazones
4 Corazones
5 Corazones
6 Corazones
7 Corazones
8 Corazones
9 Corazones
10 Corazones
J Corazones
P Corazones
K Corazones
A Corazones
2 Picas
3 Picas
4 Picas
5 Picas
6 Picas
7 Picas
8 Picas
9 Picas
10 Picas
J Picas
P Picas
K Picas
A Picas

En este tutorial, aprendió a usar la cláusula CROSS JOIN de SQLite para producir un producto cartesiano de varias tablas involucradas en la combinación.