Jointures croisées et produits cartésiens
Utilisez CROSS JOIN délibérément pour créer des associations combinatoires et évitez les explosions cartésiennes accidentelles dues à des clés de jointure manquantes.
Jointures croisées et produits cartésiens est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Qu’est-ce qu’une jointure CROSS ?
Une CROSS JOIN produit toutes les combinaisons de lignes : m × n lignes en sortie. Elle ne possède pas de clause ON.
SELECT * FROM a CROSS JOIN b;
-- Equivalent:
SELECT * FROM a, b; -- comma join, no conditionProduits cartésiens accidentels
Le bogue classique : oublier la condition de JOIN et obtenir chaque ligne de A associée à chaque ligne de B.
SELECT u.email, o.id
FROM users u, orders o; -- missing WHERE u.id = o.user_id !
-- m users × n orders rows — millions!Cas d’utilisation prévus
CROSS JOIN est utile lorsque vous voulez réellement toutes les paires :
- Combinaisons de catégories et de périodes pour les rapports avec intervalles vides
- Données de test : chaque utilisateur avec chaque produit
- Calendriers : chaque magasin avec chaque date
Exemple de calendrier et de magasins
Ajoutez les jours à zéro pour chaque magasin :
SELECT d.day, s.id, COALESCE(SUM(o.total), 0) AS revenue
FROM generate_series(CURRENT_DATE - 30, CURRENT_DATE, '1 day') AS d(day)
CROSS JOIN stores s
LEFT JOIN orders o ON o.store_id = s.id
AND date_trunc('day', o.created_at) = d.day
GROUP BY d.day, s.id
ORDER BY d.day, s.id;Produits cartésiens et EXPLAIN
Un produit cartésien involontaire apparaît comme un nombre de lignes très élevé dans EXPLAIN ANALYZE :
EXPLAIN ANALYZE
SELECT u.email, o.id FROM users u, orders o;
-- Nested Loop (rows=10000000) ← warning signLATERAL : jointure croisée conditionnelle
LATERAL JOIN ressemble à un CROSS JOIN dont le côté droit peut faire référence au côté gauche — ce point sera traité dans la prochaine leçon.
Permutations et combinaisons
Pour obtenir des paires (A,B) sans doublons, ajoutez une comparaison dans la clause ON :
SELECT a.id, b.id
FROM products a
JOIN products b ON a.id < b.id;
-- All unique pairs of products, no (A,A), no (B,A) duplicates of (A,B)CROSS JOIN avec VALUES
Intégrez un petit ensemble :
SELECT u.email, c.code
FROM users u
CROSS JOIN (VALUES ('EUR'), ('USD'), ('GBP')) AS c(code);Éviter la syntaxe de jointure avec des virgules
La jointure implicite avec une virgule (FROM a, b) est valide, mais elle masque l’intention. Préférez une clause CROSS JOIN explicite :
-- Don't (looks like a typo):
FROM users, orders
-- Do:
FROM users CROSS JOIN ordersPerformances
CROSS JOIN est lui-même peu coûteux : il n’y a aucune condition à évaluer. Le coût vient du nombre de lignes produites : 10k × 10k = 100M lignes.
Récapitulatif
CROSS JOIN = toutes les paires.
- Utilisez-le délibérément pour créer des combinaisons
- Surveillez les produits cartésiens accidentels (WHERE manquant)
- Combinez-le avec generate_series pour les rapports comblant les intervalles manquants
Vérification rapide
Vous avez écrit SELECT * FROM users u, orders o; sans WHERE. Quel est le résultat ?
Questions Fréquemment Posées
La leçon « Jointures croisées et produits cartésiens » est-elle gratuite ?
Oui — le texte complet de « Jointures croisées et produits cartésiens » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Jointures croisées et produits cartésiens » ?
Utilisez CROSS JOIN délibérément pour créer des associations combinatoires et évitez les explosions cartésiennes accidentelles dues à des clés de jointure manquantes. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Jointures croisées et produits cartésiens » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Jointures croisées et produits cartésiens
- Jointures latérales (LATERAL JOIN)
- Anti-jointures et semi-jointures (NOT EXISTS)
- Optimisation des performances des jointures multi-tables