SQLite
 sql >> Database >  >> RDS >> SQLite

SQLite CROSS JOIN con un esempio pratico

Riepilogo :in questo tutorial imparerai come usare SQLite CROSS JOIN per combinare due o più set di risultati da più tabelle.

Introduzione a SQLite CROSS JOIN clausola

Se utilizzi un LEFT JOIN , INNER JOIN o CROSS JOIN senza il ON o USING clausola, SQLite produce il prodotto cartesiano delle tabelle coinvolte. Il numero di righe nel prodotto cartesiano è il prodotto del numero di righe in ciascuna tabella coinvolta.

Supponiamo di avere due tabelle A e B. Le seguenti istruzioni eseguono il cross join e producono un prodotto cartesiano delle righe delle tabelle A e 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)

Supponiamo che la tabella A abbia N righe e la tabella B abbia M righe, il CROSS JOIN di queste due tabelle produrrà un set di risultati che contiene NxM righe.

Immagina di avere la terza tabella C con K righe, il risultato del CROSS JOIN clausola di queste tre tabelle conterrà NxMxK righe, che possono essere molto grandi. Pertanto, dovresti stare molto attento quando usi il CROSS JOIN clausola.

Usi il INNER JOIN e LEFT JOIN clausole più spesso di CROSS JOIN clausola. Tuttavia, troverai il CROSS JOIN clausola molto utile in alcuni casi.

Ad esempio, quando si desidera avere una matrice con due dimensioni riempite con dati completamente simili ai membri e ai dati delle date in un database di appartenenza. Vuoi controllare gli assistenti dei membri per tutte le date rilevanti. In questo caso, puoi utilizzare il CROSS JOIN clausola come la seguente affermazione:

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

SQLite CROSS JOIN esempio di clausola

Le seguenti istruzioni creano i ranks e suits tabelle che memorizzano i gradi e i semi di un mazzo di carte e inseriscono i dati completi in queste due tabelle.

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 seguente istruzione usa il CROSS JOIN clausola per restituire un mazzo di carte completo:

SELECT rank,
       suit
  FROM ranks
       CROSS JOIN
       suits
ORDER BY suit;Code language: SQL (Structured Query Language) (sql)
rank seme
2 Club
3 Club
4 Club
5 Club
6 Club
7 Club
8 Club
9 Club
10 Club
J Club
D Club
K Club
A Club
2 Diamanti
3 Diamanti
4 Diamanti
5 Diamanti
6 Diamanti
7 Diamanti
8 Diamanti
9 Diamanti
10 Diamanti
J Diamanti
D Diamanti
K Diamanti
A Diamanti
2 Cuori
3 Cuori
4 Cuori
5 Cuori
6 Cuori
7 Cuori
8 Cuori
9 Cuori
10 Cuori
J Cuori
D Cuori
K Cuori
A Cuori
2 Picche
3 Picche
4 Picche
5 Picche
6 Picche
7 Picche
8 Picche
9 Picche
10 Picche
J Picche
D Picche
K Picche
A Picche

In questo tutorial, hai imparato come utilizzare la clausola SQLite CROSS JOIN per produrre un prodotto cartesiano di più tabelle coinvolte nel join.