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
SELECT a.col, b.colFROM table_a aCROSS JOIN table_b b;Exemple
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
- Usage typique : construire la grille client × catégorie, puis y joindre les ventes en LEFT JOIN pour faire apparaître les combinaisons à zéro.
- 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.
- 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
- INNER JOININNER JOIN associe les lignes de deux tables qui se correspondent, en général une clé étrangère et la clé primaire qu'elle référence. Les lignes sans correspondance disparaissent du résultat.
- LEFT JOINLEFT JOIN garde toutes les lignes de la table de gauche, avec ou sans correspondance à droite (les colonnes de droite valent alors NULL). Idéal pour compter des zéros ou repérer des absents.
- CTE récursive (WITH RECURSIVE)Une CTE récursive part d'un point de départ puis se rappelle elle-même pour avancer d'un niveau à chaque tour. Elle parcourt une hiérarchie complète ou génère une suite de dates.