0Pricing
SQL Interview Prep · Leçon

Joindre trois tables ou plus

Enchaîner les jointures et raisonner sur les ensembles de résultats intermédiaires

Joindre trois tables ou plus est une leçon SQL Interview Prep gratuite sur CoddyKit. Ceci est la leçon 4 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 Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Interview Prep comprend 4 leçons au total.

Les jointures s'enchaînent, elles ne bifurquent pas

Les problèmes réels d'entretien portent rarement sur seulement deux tables. On vous demandera d'en joindre trois, quatre ou davantage. L'idée essentielle qui permet de remettre de l'ordre dans cette complexité est la suivante : une jointure sur plusieurs tables n'est qu'une suite de jointures entre deux tables.

La base de données joint les deux premières tables pour obtenir un résultat intermédiaire, puis joint ce résultat à la troisième, et ainsi de suite. Si vous savez raisonner sur une jointure, vous savez raisonner sur toute une chaîne de jointures.

Le schéma à trois tables

Nous étendons notre exemple avec une troisième table. Nous avons maintenant les clients, leurs commandes et les produits référencés par chaque commande.

  • customers(id, name)
  • orders(id, customer_id, product_id, amount)
  • products(id, title)

Deux relations les relient : orders.customer_id = customers.id et orders.product_id = products.id.

customers(id, name)
orders(id, customer_id, product_id, amount)
products(id, title)

La requête de base sur trois tables

Enchaînez les jointures les unes après les autres. Chaque JOIN ... ON ajoute une table et indique comment elle se rattache à ce qui précède.

Lisez la requête de haut en bas : partez des commandes, rattachez le client correspondant, puis le produit correspondant. Chaque ligne de commande reçoit ainsi un nom et un titre de produit.

SELECT c.name, p.title, o.amount
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products  p ON p.id = o.product_id;

Raisonnez en termes d’ensembles de résultats intermédiaires

Le modèle mental qui facilite les jointures entre plusieurs tables : après chaque JOIN, imaginez le résultat intermédiaire obtenu jusque-là.

  • Après la jointure 1 : les commandes et les colonnes du client.
  • Après la jointure 2 : ce résultat et les colonnes du produit.

La clause ON suivante peut faire référence à toute colonne déjà présente dans l’ensemble intermédiaire ; c’est pourquoi l’ordre des jointures détermine ce que vous pouvez écrire dans chaque ON.

Chaque ON voit les tables précédentes

Une conséquence importante : la clause ON d’une jointure ultérieure peut faire référence à n’importe quelle table qui a été jointe auparavant, et pas seulement à la table ajoutée.

Ici, la troisième jointure est reliée à o (les commandes), qui se trouvait déjà dans la portée. Vous pourriez également relier une quatrième table à c ou à p, car toutes deux font déjà partie du résultat en cours.

SELECT c.name, p.title, w.region
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products  p ON p.id = o.product_id
JOIN warehouses w ON w.id = o.warehouse_id; -- refers to o

Commencez par la table centrale

Conseil pratique pour les entretiens en direct : commencez le FROM par la table de faits / table centrale (généralement celle qui se trouve au centre des relations), puis progressez vers les tables de référence.

Les commandes se trouvent au centre et contiennent des clés étrangères vers les clients et les produits. Commencer par cette table permet donc de garder chaque clause ON simple et de faire référence aux tables déjà rencontrées.

-- orders is central: it links to both sides
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products  p ON p.id = o.product_id

L’effet multiplicateur se cumule dans les chaînes

Tout ce que vous avez appris sur l’effet multiplicateur reste valable, et il s’amplifie. Si chaque commande comporte plusieurs articles et que chaque article possède plusieurs lignes de taxe, le nombre de lignes est multiplié à chaque étape.

Lorsqu’un agrégat semble trop élevé dans une requête comportant plusieurs jointures, soupçonnez un effet multiplicateur introduit par l’une des jointures intermédiaires et vérifiez individuellement la granularité de chaque jointure.

-- rows = orders * items_per_order * tax_rows_per_item
SELECT o.id
FROM orders o
JOIN order_items i ON i.order_id = o.id
JOIN item_taxes  t ON t.item_id  = i.id;

Mélanger les types de jointure dans une chaîne

Vous pouvez combiner des jointures INNER et LEFT dans une même requête, mais l’ordre compte. Une fois qu’un LEFT JOIN a introduit des NULL, une jointure INNER ultérieure qui fait référence à ces colonnes NULL peut supprimer les lignes conservées.

Ici, si un client n’a aucune commande, le LEFT JOIN le conserve avec un identifiant produit à NULL, puis le INNER JOIN suivant vers les produits le supprime à nouveau : c’est une erreur facile à commettre sous la pression.

SELECT c.name, p.title
FROM customers c
LEFT JOIN orders  o ON o.customer_id = c.id
JOIN products p ON p.id = o.product_id;
-- the INNER products join can cancel the LEFT JOIN

Conserver le caractère externe des jointures

Pour conserver jusqu’au bout les clients sans commande, faites également la jointure en aval avec LEFT. Les NULL peuvent alors se propager sans risque jusqu’à la fin.

Règle générale : dès que vous passez à une jointure externe, restez en jointure externe pour chaque table qui dépend de la branche facultative.

SELECT c.name, p.title
FROM customers c
LEFT JOIN orders   o ON o.customer_id = c.id
LEFT JOIN products p ON p.id = o.product_id;
-- customers with no orders are now kept (NULL title)

Les alias deviennent indispensables à grande échelle

Avec quatre ou cinq tables, plusieurs peuvent partager des noms de colonnes comme id, name ou created_at. Des alias courts et cohérents éliminent les ambiguïtés et rendent la requête plus lisible.

Choisissez des alias qui évoquent la table (c, o, p) et qualifiez chaque colonne. Les intervieweurs considèrent votre choix d’alias comme un indicateur de votre façon d’écrire du SQL de production.

SELECT c.id   AS customer_id,
       o.id   AS order_id,
       p.id   AS product_id,
       p.title
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products  p ON p.id = o.product_id;

Les tables de liaison pour les relations plusieurs-à-plusieurs

Lorsque deux entités ont une relation plusieurs-à-plusieurs, une troisième table de jonction (table passerelle) se place entre elles, et vous effectuez les jointures en passant par cette table. Les étudiants et les cours sont reliés par les inscriptions.

Comprendre qu’il faut passer par une table passerelle est déjà un signal souvent recherché en entretien.

SELECT s.name, c.title
FROM students s
JOIN enrollments e ON e.student_id = s.id
JOIN courses     c ON c.id = e.course_id;

Vérification rapide

Raisonnez sur une chaîne de jointures mixtes.

Récapitulatif : joindre trois tables ou plus

Retenez les points suivants pour l’entretien :

  • Une jointure entre plusieurs tables est une chaîne de jointures entre deux tables ; raisonnez sur le résultat intermédiaire après chaque étape.
  • Une clause ON ultérieure peut faire référence à n’importe quelle table précédente de la chaîne.
  • Commencez par la table centrale, puis progressez vers les tables de référence.
  • L’effet multiplicateur se cumule au fil des jointures ; vérifiez la granularité à chaque étape.
  • Un INNER JOIN après un LEFT JOIN peut annuler celui-ci ; restez dans les jointures externes pour conserver les lignes facultatives.
  • Les relations plusieurs-à-plusieurs sont jointes par l’intermédiaire d’une table passerelle.

Questions Fréquemment Posées

La leçon « Joindre trois tables ou plus » est-elle gratuite ?

Oui — le texte complet de « Joindre trois tables ou plus » 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 Interview Prep, passe à CoddyKit PRO. Le cours SQL Interview Prep comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Joindre trois tables ou plus » ?

Enchaîner les jointures et raisonner sur les ensembles de résultats intermédiaires Tu pratiques SQL Interview Prep 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 Interview Prep ?

Aucune expérience préalable n'est requise. SQL Interview Prep 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 4 sur 4.

Combien de temps prend la leçon « Joindre trois tables ou plus » ?

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 Interview Prep ?

Oui. Chaque leçon SQL Interview Prep 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. Comment INNER JOIN met les lignes en correspondance
  2. ON ou WHERE dans les jointures
  3. Multiplication des lignes lors d’une jointure
  4. Joindre trois tables ou plus
← Retour à SQL Interview Prep