2nd Dec 2022 6 minutes de lecture Guide illustré du CROSS JOIN SQL Dorota Wdzięczna join Clauses SQL conseil Table des matières Qu'est-ce qu'une JOIN ? Qu'est-ce qu'une jointure croisée ? Autres façons d'obtenir des produits cartésiens Utilisation de la CROSS JOIN dans la multiplication Utilisation de CROSS JOIN avec plusieurs tables En savoir plus 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 : 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. Tags: join Clauses SQL conseil