Résumé :dans ce tutoriel, vous apprendrez à utiliser SQLite CROSS JOIN
pour combiner deux ensembles de résultats ou plus à partir de plusieurs tables.
Introduction à SQLite CROSS JOIN
clause
Si vous utilisez un LEFT JOIN
, INNER JOIN
, ou CROSS JOIN
sans le ON
ou USING
clause, SQLite produit le produit cartésien des tables impliquées. Le nombre de lignes dans le produit cartésien est le produit du nombre de lignes dans chaque table impliquée.
Supposons que nous ayons deux tables A et B. Les instructions suivantes effectuent la jointure croisée et produisent un produit cartésien des lignes des tables A et 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)
Supposons que la table A ait N lignes et que la table B ait M lignes, le CROSS JOIN
de ces deux tables produira un jeu de résultats contenant NxM
lignes.
Imaginez que si vous avez la troisième table C avec K
lignes, le résultat du CROSS JOIN
clause de ces trois tables contiendra NxMxK
rangées, qui peuvent être très grandes. Par conséquent, vous devez être très prudent lorsque vous utilisez le CROSS JOIN
clause.
Vous utilisez le INNER JOIN
et LEFT JOIN
clauses plus souvent que le CROSS JOIN
clause. Cependant, vous trouverez le CROSS JOIN
clause très utile dans certains cas.
Par exemple, lorsque vous voulez avoir une matrice qui a deux dimensions remplies de données complètement comme les membres et les données de dates dans une base de données d'adhésion. Vous souhaitez vérifier les préposés des membres pour toutes les dates pertinentes. Dans ce cas, vous pouvez utiliser le CROSS JOIN
clause sous la forme de l'instruction suivante :
SELECT name,
date
FROM members
CROSS JOIN dates;
Code language: SQL (Structured Query Language) (sql)
SQLite CROSS JOIN
exemple de clause
Les instructions suivantes créent les ranks
et suits
tables qui stockent les rangs et les couleurs d'un jeu de cartes et insèrent les données complètes dans ces deux tables.
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)
L'instruction suivante utilise le CROSS JOIN
clause pour renvoyer un jeu complet de données de cartes :
SELECT rank,
suit
FROM ranks
CROSS JOIN
suits
ORDER BY suit;
Code language: SQL (Structured Query Language) (sql)
classement | costume |
---|---|
2 | Clubs |
3 | Clubs |
4 | Clubs |
5 | Clubs |
6 | Clubs |
7 | Clubs |
8 | Clubs |
9 | Clubs |
10 | Clubs |
J | Clubs |
Q | Clubs |
K | Clubs |
A | Clubs |
2 | Diamants |
3 | Diamants |
4 | Diamants |
5 | Diamants |
6 | Diamants |
7 | Diamants |
8 | Diamants |
9 | Diamants |
10 | Diamants |
J | Diamants |
Q | Diamants |
K | Diamants |
A | Diamants |
2 | Coeurs |
3 | Coeurs |
4 | Coeurs |
5 | Coeurs |
6 | Coeurs |
7 | Coeurs |
8 | Coeurs |
9 | Coeurs |
10 | Coeurs |
J | Coeurs |
Q | Coeurs |
K | Coeurs |
A | Coeurs |
2 | Pique |
3 | Pique |
4 | Pique |
5 | Pique |
6 | Pique |
7 | Pique |
8 | Pique |
9 | Pique |
10 | Pique |
J | Pique |
Q | Pique |
K | Pique |
A | Pique |
Dans ce didacticiel, vous avez appris à utiliser la clause SQLite CROSS JOIN pour produire un produit cartésien de plusieurs tables impliquées dans la jointure.