Retour à la liste des articles Articles
6 minutes de lecture

Guide illustré du CROSS JOIN SQL

Qu'est-ce qu'une instruction SQL CROSS JOIN ? Quand faut-il l'utiliser ? Quand ne devez-vous pas l'utiliser ? Ce billet vous dira ce que vous devez savoir sur le CROSS JOIN.

Vous savez déjà que vous pouvez utiliser l'instruction SQL JOIN pour joindre une ou plusieurs tables qui partagent un enregistrement correspondant. Si vous avez lu l'article de LearnSQL intitulé Learning Les jointures en SQL Using Real Life Situations, vous savez qu'il existe de nombreux types d'instructions JOIN. Le choix de l'une d'entre elles dépend de ce que vous voulez faire.

Il existe un JOIN que nous n'utilisons pas souvent mais qui a un but très spécifique : le CROSS JOIN. Dans cet article, je vais expliquer ce qu'est un CROSS JOIN et comment il fonctionne. Je vous expliquerai également quand vous devez en utiliser une, et quand vous ne devez pas.

Qu'est-ce qu'une JOIN ?

Tout d'abord, rappelons ce que fait une JOIN en SQL : elle vous permet de combiner des données (c'est-à-dire des enregistrements) provenant de plusieurs tables. Les opérateurs JOIN vous permettent de joindre des enregistrements de manière spécifique, par exemple uniquement les enregistrements qui ont une correspondance dans les deux tables.

Pour commencer à explorer CROSS JOIN, nous allons d'abord travailler avec deux tables, "color" et "tshirt".

La table "color", qui stocke les noms des couleurs de t-shirt disponibles, ressemble à ceci :

id name
1 yellow
2 green
3 pink

La table "tshirt", qui stocke les tailles des différents t-shirts, ressemble à ceci :

id size
1 S
2 M
3 L
4 XL

Les gens portent des t-shirts dans toutes les combinaisons de tailles et de couleurs. Nous allons donc joindre les données de ces tables.

Qu'est-ce qu'une jointure croisée ?

CROSS JOIN renvoie un produit cartésien, c'est-à-dire tous les enregistrements joints à tous les enregistrements de toutes les tables. Il n'y a pas de condition JOIN (c'est-à-dire pas de clause ON). Le nombre d'enregistrements obtenu est égal au nombre de lignes de la première table multiplié par le nombre de lignes de la deuxième table. CROSS JOIN est très rarement utilisé. Parce qu'elle produit toutes les combinaisons possibles d'enregistrements de toutes les tables, elle peut être une opération dangereuse pour les tables qui contiennent beaucoup d'enregistrements.

Nous avons nos deux tables, présentées ci-dessous. Utilisons un CROSS JOIN sur elles et voyons ce qui se passe :

tshirt
id size
1 S
2 M
3 L
4 XL
color
id name
1 yellow
2 green
3 pink

SELECT *  FROM  tshirt
CROSS JOIN  color;

Remarquez qu'une table est listée après la clause FROM; l'autre nom de table suit CROSS JOIN. Peu importe quelle table est listée après la clause from et quelle table est listée après la clause CROSS JOIN. Les résultats seront les mêmes : toutes les combinaisons possibles d'enregistrements de toutes les tables.

Voici le résultat de cette opération :

id size id name
1 S 1 yellow
2 M 1 yellow
3 L 1 yellow
4 XL 1 yellow
1 S 2 green
2 M 2 green
3 L 2 green
4 XL 2 green
1 S 3 pink
2 M 3 pink
3 L 3 pink
4 XL 3 pink

Nous avons sélectionné tous les enregistrements de la table "tshirtNous avons sélectionné tous les enregistrements de la table " " et joint chaque enregistrement à tous les enregistrements de la table "color". En d'autres termes, nous avons la combinaison de chaque T-shirt dans chaque taille avec chaque couleur. Le graphique ci-dessous l'explique visuellement :

CROSS JOIN

Autres façons d'obtenir des produits cartésiens

Il existe un autre moyen d'obtenir une requête qui renvoie un produit cartésien sans utiliser CROSS JOIN:

SELECT *  FROM  tshirt, color ;

Dans ce cas, les tables que vous souhaitez joindre doivent être énumérées après la clause FROM . Notez qu'en utilisant *, vous sélectionnez tous les enregistrements des deux tables. Le jeu de résultats sera le même que dans l'exemple CROSS JOIN ci-dessus.

Utilisation de la CROSS JOIN dans la multiplication

Nous pouvons également utiliser CROSS JOIN pour effectuer une multiplication. Utilisons deux tables qui stockent des nombres de base pour voir comment cela fonctionne. Tout d'abord, regardez les tables :

"t1"

n
11
12
13

"t2"

n
11
12
13

Les deux tables stockent les mêmes nombres : 11, 12, 13. Notre objectif est de multiplier ces nombres par eux-mêmes, en créant une sorte de table de multiplication. Nous pouvons utiliser le CROSS JOIN pour y parvenir. Regardez la requête ci-dessous :

SELECT t1.n, t2.n, t1.n*t2.n AS result  FROM  t1
CROSS JOIN  t2 ;

Le site SELECT contient trois colonnes : les nombres de la première table (t1.n), les nombres de la deuxième table (t2.n), et la multiplication stockée dans la colonne de résultat (t1.n*t2.n AS result). Le tableau ci-dessous montre le résultat :

t1.n t2.n result
11 11 121
11 12 132
11 13 143
12 11 132
12 12 144
12 13 156
13 11 143
13 12 156
13 13 169

Utilisation de CROSS JOIN avec plusieurs tables

Il est possible d'utiliser plus de deux tables dans un fichier CROSS JOIN. Imaginons qu'une entreprise produise des t-shirts en trois tailles (S, M, L) et dans deux tissus (coton et lin). Chaque t-shirt est disponible en deux couleurs : rose ou bleu. Jetez un coup d'œil aux tables suivantes :

"couleur"

id name
1 blue
3 pink

"tshirt

id size
1 S
2 M
3 L

"tissu

id name
1 cotton
2 linen

Supposons maintenant que vous vouliez voir tous les t-shirts possibles : chaque combinaison de taille, de couleur et de tissu. La requête ci-dessous récupère ces informations en utilisant un CROSS JOIN sur trois tables :

SELECT tshirt.size as size, color.name AS color, fabric.name as fabric
FROM  tshirt 
CROSS JOIN  fabric
CROSS JOIN  color ;

Voici le résultat :

size color fabric
S blue cotton
M blue cotton
L blue cotton
S pink cotton
M pink cotton
L pink cotton
S blue linen
M blue linen
L blue linen
S pink linen
M pink linen
L pink linen

Il y a douze t-shirts possibles. Les deux couleurs multipliées par trois tailles et à nouveau par deux tissus donnent un résultat de 12.

En savoir plus

Il y a plus à savoir sur l'utilisation de CROSS JOIN que ce que nous avons couvert dans cette introduction illustrée. Si vous souhaitez en savoir plus sur JOIN, consultez le cours SQL pour les débutants de LearnSQL.