Aller au contenu
Jointures

CROSS JOIN

CROSS JOIN combine chaque ligne de A avec chaque ligne de B, soit |A| × |B| lignes. Il sert à fabriquer une grille complète (clients × catégories, jours × produits) avant d'y joindre les faits.

  • produit cartésien
  • toutes combinaisons
  • grille

Syntaxe

Modèle
SELECT a.col, b.colFROM table_a aCROSS JOIN table_b b;

Exemple

Exemple concret
SELECT c.name AS client, cat.categoryFROM customers cCROSS JOIN (SELECT DISTINCT category FROM products) AS catWHERE c.city = 'Lyon'ORDER BY c.name, cat.category;-- Jeu de données : boutique-- 2 clients lyonnais × 2 catégories = 4 lignes-- Résultat attendu :-- Emma Dubois | Audio-- Emma Dubois | Informatique-- Nora Petit | Audio-- Nora Petit | Informatique

À retenir

  1. Usage typique : construire la grille client × catégorie, puis y joindre les ventes en LEFT JOIN pour faire apparaître les combinaisons à zéro.
  2. Piège : FROM a, b sans condition de jointure produit aussi un produit cartésien, souvent par oubli. Sur deux tables de 10 000 lignes, cela fait 100 millions de lignes.
  3. Dans SQLite, CROSS JOIN impose en plus l'ordre de parcours des tables à l'optimiseur : c'est un levier de réglage, à ne pas utiliser à la place d'un JOIN ordinaire.

Voir aussi