Code SQL copié dans le presse-papiers
Apprenez à utiliser le SQL CROSS JOIN pour créer un produit cartésien entre deux tables. Cette leçon explique quand chaque ligne d'une table est combinée avec chaque ligne d'une autre, les implications sur la performance, et les cas d'usage comme la génération de combinaisons ou de données de test. Maîtrisez le comportement du CROSS JOIN avec la base Sakila.
RU EN PT

Leçon 5.6 : CROSS JOIN — Le produit cartésien

La plupart des jointures nécessitent une condition de correspondance (ON). Le CROSS JOIN est différent : il retourne toutes les combinaisons possibles de lignes entre les tables jointes. Ce résultat est appelé produit cartésien.

Qu'est-ce qu'un CROSS JOIN ?

Un CROSS JOIN produit un résultat dont le nombre de lignes est le produit du nombre de lignes de la première table par celui de la seconde. Il n'y a pas de condition de correspondance : chaque ligne de la table A rencontre chaque ligne de la table B.

Visualisation :

   Table A (Couleurs)           Table B (Tailles)
   +-----------+                +-----------+
   | couleur   |                | taille    |
   +-----------+                +-----------+
   | Rouge     |  --\           | Petit     |
   | Bleu      |  ---|------>   | Moyen     |
   +-----------+  --/           | Grand     |
                                +-----------+

   Résultat (Combinaisons) :
   Rouge, Petit
   Rouge, Moyen
   Rouge, Grand
   Bleu, Petit
   Bleu, Moyen
   Bleu, Grand

Si la table A a 2 lignes et la table B en a 3, le résultat aura 2 x 3 = 6 lignes.

Syntaxe du CROSS JOIN

Deux façons d'écrire un CROSS JOIN. La syntaxe explicite est recommandée pour la clarté :

-- Syntaxe explicite (recommandée)
SELECT
    table1.column,
    table2.column
FROM
    table1
CROSS JOIN
    table2;

-- Syntaxe implicite (ancienne)
SELECT
    table1.column,
    table2.column
FROM
    table1,
    table2;

Attention : Soyez prudent avec CROSS JOIN sur de grandes tables. Joindre deux tables de 1 000 lignes chacune produira 1 000 000 lignes !

Exemples pratiques (base Sakila)

1. Générer toutes les combinaisons possibles

Créer un rapport qui montre chaque catégorie de film pour chaque magasin, même si le magasin n'a pas de films dans cette catégorie.

SELECT
    s.store_id,
    c.name AS category_name
FROM
    store AS s
CROSS JOIN
    category AS c;

Cela produit une liste de toutes les catégories pour le magasin 1, puis pour le magasin 2.

2. Générer des données de test ou des matrices

CROSS JOIN est souvent utilisé pour générer des permutations pour des tests ou pour construire des calendriers où il faut voir tous les créneaux horaires pour tous les utilisateurs.

Quand utiliser CROSS JOIN

  • Générer des permutations : Quand vous avez besoin de toutes les combinaisons possibles (ex. toutes les couleurs de produit vs toutes les tailles).
  • Combler les manques : Avec un LEFT JOIN, il permet d'identifier les combinaisons manquantes dans vos données.
  • Reporting : Pour créer la "structure" d'un rapport qui doit inclure toutes les catégories, même celles sans valeur.

Points clés de cette leçon

  • CROSS JOIN retourne le produit cartésien de deux tables.
  • Il n'utilise pas de clause ON (pas de condition de correspondance).
  • Le nombre de lignes du résultat est le produit du nombre de lignes de chaque table.
  • À utiliser avec prudence sur de grands ensembles pour éviter les problèmes de performance.