0Pricing
SQL Academy · Leçon

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 condition

Produits 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 sign

LATERAL : 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 orders

Performances

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

  1. Jointures croisées et produits cartésiens
  2. Jointures latérales (LATERAL JOIN)
  3. Anti-jointures et semi-jointures (NOT EXISTS)
  4. Optimisation des performances des jointures multi-tables
← Retour à SQL Academy