CROSS JOIN – Jointure cartésienne
Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 4 minutes
Dans le langage SQL, la commande CROSS JOIN est un type de jointure sur 2 tables SQL qui permet de retourner le produit cartésien. Autrement dit, cela permet de retourner chaque ligne d’une table avec chaque ligne d’une autre table.
Bon à savoir : Effectuer le produit cartésien d’une table A qui contient 30 enregistrements avec une table B de 40 enregistrements va produire 1200 résultats (30 × 40 = 1200). Le nombre de résultats peut rapidement devenir très élevé.
Syntaxe
Section titled “Syntaxe”Pour effectuer une jointure avec CROSS JOIN, il convient d’effectuer une requête SQL respectant la syntaxe suivante :
SELECT * FROM table1 CROSS JOIN table2;Méthode alternative
Section titled “Méthode alternative”Il existe une autre syntaxe, plus ancienne, qui retourne les mêmes résultats :
SELECT * FROM table1, table2;L’une ou l’autre de ces syntaxes permettent d’associer tous les résultats de table1 avec chacun des résultats de table2.
Recommandation : Bien que les deux syntaxes soient valides, il est préférable d’utiliser la syntaxe explicite
CROSS JOINpour une meilleure lisibilité et pour éviter les confusions avec les jointures internes de la formeSELECT * FROM table1, table2 WHERE ....
Exemple concret
Section titled “Exemple concret”Imaginons une application de recettes de cuisine qui contient 2 tables d’ingrédients : la table legume et la table fruit.
Table « legume » :
| l_id | l_nom_fr_fr | l_nom_en_gb |
|---|---|---|
| 45 | Carotte | Carrot |
| 46 | Oignon | Onion |
| 47 | Poireau | Leek |
Table « fruit » :
| f_id | f_nom_fr_fr | f_nom_en_gb |
|---|---|---|
| 87 | Banane | Banana |
| 88 | Kiwi | Kiwi |
| 89 | Poire | Pear |
Pour une raison quelconque, l’application doit associer tous les légumes avec tous les fruits. Toutes les combinaisons doivent être affichées. Pour cela, il convient d’effectuer l’une ou l’autre des requêtes suivantes :
Avec CROSS JOIN :
SELECT l_id, l_nom_fr_fr, f_id, f_nom_fr_frFROM legumeCROSS JOIN fruit;Ou avec la syntaxe alternative :
SELECT l_id, l_nom_fr_fr, f_id, f_nom_fr_frFROM legume, fruit;Résultat :
| l_id | l_nom_fr_fr | f_id | f_nom_fr_fr |
|---|---|---|---|
| 45 | Carotte | 87 | Banane |
| 45 | Carotte | 88 | Kiwi |
| 45 | Carotte | 89 | Poire |
| 46 | Oignon | 87 | Banane |
| 46 | Oignon | 88 | Kiwi |
| 46 | Oignon | 89 | Poire |
| 47 | Poireau | 87 | Banane |
| 47 | Poireau | 88 | Kiwi |
| 47 | Poireau | 89 | Poire |
Le résultat montre bien que chaque légume est associé à chaque fruit. Avec 3 fruits et 3 légumes, il y a donc 9 lignes de résultats (3 × 3 = 9).
CROSS JOIN avec condition (WHERE)
Section titled “CROSS JOIN avec condition (WHERE)”En général, la commande CROSS JOIN est combinée avec la commande WHERE pour filtrer les résultats qui respectent certaines conditions.
Par exemple, pour associer les légumes et les fruits uniquement si leur nom en français commence par la même lettre :
SELECT l_id, l_nom_fr_fr, f_id, f_nom_fr_frFROM legumeCROSS JOIN fruitWHERE LEFT(l_nom_fr_fr, 1) = LEFT(f_nom_fr_fr, 1);Résultat :
| l_id | l_nom_fr_fr | f_id | f_nom_fr_fr |
|---|---|---|---|
| 45 | Carotte | 87 | Banane |
| 46 | Oignon | 89 | Poire |
Remarque : Dans la pratique, un
CROSS JOINavec une conditionWHEREest équivalent à unINNER JOIN. Il est donc préférable d’utiliserINNER JOINexplicitement pour une meilleure lisibilité.
Performance
Section titled “Performance”Cette section est destinée à un public averti et n’est pas nécessaire à comprendre entièrement, mais il est important d’en saisir les grandes lignes.
Attention : Le nombre de résultats peut facilement être très élevé. Si un CROSS JOIN est effectué sur des tables avec beaucoup d’enregistrements, cela peut ralentir considérablement le serveur.
Exemple de volume de données :
| Taille de table A | Taille de table B | Nombre de résultats |
|---|---|---|
| 100 | 100 | 10 000 |
| 1 000 | 1 000 | 1 000 000 |
| 10 000 | 10 000 | 100 000 000 |
Bon à savoir : Un produit cartésien est une opération très coûteuse en ressources. Utilisez
CROSS JOINavec parcimonie et uniquement lorsque vous avez vraiment besoin de toutes les combinaisons.
Cas d’usage appropriés pour CROSS JOIN
Section titled “Cas d’usage appropriés pour CROSS JOIN”-
Génération de combinaisons : pour créer toutes les combinaisons possibles entre deux ensembles (ex: planning horaires, couleurs × tailles pour un catalogue de vêtements).
-
Tables de dimensionnement : pour générer des données de test en créant toutes les combinaisons de paramètres.
-
Calculs statistiques : pour évaluer toutes les paires possibles entre deux ensembles.
-
Tests : pour vérifier le comportement d’une application avec un grand volume de données.
Bonnes pratiques
Section titled “Bonnes pratiques”-
Évitez
CROSS JOINsur de grandes tables : privilégiez d’autres types de jointures si possible. -
Ajoutez toujours une condition
WHEREsi vous ne voulez pas toutes les combinaisons (et dans ce cas, utilisez plutôtINNER JOIN). -
Utilisez
CROSS JOINuniquement lorsque vous avez besoin de toutes les combinaisons. -
Limitez les colonnes sélectionnées : préférez une liste explicite de colonnes à
*pour réduire la quantité de données retournées. -
Testez sur un petit échantillon avant d’exécuter un
CROSS JOINsur des tables volumineuses.
Comparaison avec les autres jointures
Section titled “Comparaison avec les autres jointures”| Type de jointure | Résultat obtenu |
|---|---|
CROSS JOIN |
Toutes les combinaisons possibles (produit cartésien) |
INNER JOIN |
Uniquement les combinaisons qui respectent la condition |
LEFT JOIN |
Toutes les lignes de la table de gauche + combinaisons possibles |
RIGHT JOIN |
Toutes les lignes de la table de droite + combinaisons possibles |
FULL JOIN |
Toutes les lignes des deux tables + combinaisons possibles |
Prochain chapitre
Section titled “Prochain chapitre”Vous savez désormais comment effectuer un produit cartésien avec CROSS JOIN. Mais que faire si vous souhaitez récupérer toutes les lignes de la table de gauche, même celles qui n’ont pas de correspondance dans la table de droite ?
👉 Chapitre 34 : LEFT JOIN – Jointure gauche
Bonne continuation !
Junior TSAFACK – 08/08/2026