Jointures multiples et complexes

Maîtriser les jointures sur 3 tables ou plus

45 min
AVANCE
Objectifs de cette leçon
  • Joindre 3 tables ou plus
  • Combiner différents types de jointures
  • Utiliser jointures avec GROUP BY
  • Optimiser les requêtes complexes

Jointures multiples et complexes

Joindre 3 tables ou plus

Dans les applications réelles, il est courant de joindre 3, 4 ou même plus de tables pour obtenir une vue complète des données.

Chaque jointure ajoute une couche d'information supplémentaire au résultat.

Ordre des jointures

L'ordre des jointures est important pour la lisibilité et parfois pour les performances :

SELECT colonnes
FROM table_principale
JOIN table2 ON condition1
JOIN table3 ON condition2
JOIN table4 ON condition3;

Commencez par la table principale (celle qui contient les données centrales) puis ajoutez les tables complémentaires.

Exemple : EMPLOYES → DEPARTEMENTS → LOCALISATIONS → PAYS

SELECT e.nom, e.prenom, d.dept_nom, l.ville, p.nom_pays
FROM EMPLOYES e
INNER JOIN DEPARTEMENTS d ON e.dept_id = d.dept_id
INNER JOIN LOCALISATIONS l ON d.localisation_id = l.localisation_id
INNER JOIN PAYS p ON l.pays_code = p.pays_code;

Cette requête traverse 4 tables pour afficher l'employé avec son pays de travail.

Combiner différents types de jointures

On peut mélanger INNER JOIN, LEFT JOIN, RIGHT JOIN dans une même requête :

SELECT e.nom, d.dept_nom, l.ville
FROM EMPLOYES e
LEFT JOIN DEPARTEMENTS d ON e.dept_id = d.dept_id
INNER JOIN LOCALISATIONS l ON d.localisation_id = l.localisation_id;
  • LEFT JOIN : garde tous les employés
  • INNER JOIN : mais ne garde que ceux dont le département a une localisation

Jointures avec GROUP BY et agrégations

Combiner jointures et agrégations pour des statistiques complexes :

SELECT p.nom_pays, COUNT(e.employe_id) as nb_employes, AVG(e.salaire) as salaire_moyen
FROM EMPLOYES e
INNER JOIN DEPARTEMENTS d ON e.dept_id = d.dept_id
INNER JOIN LOCALISATIONS l ON d.localisation_id = l.localisation_id
INNER JOIN PAYS p ON l.pays_code = p.pays_code
GROUP BY p.nom_pays
ORDER BY nb_employes DESC;

Cette requête calcule le nombre d'employés et le salaire moyen par pays.

Jointures avec conditions complexes

On peut ajouter plusieurs conditions dans ON ou combiner avec WHERE :

SELECT e.nom, m.nom AS manager, d.dept_nom
FROM EMPLOYES e
LEFT JOIN EMPLOYES m ON e.manager_id = m.employe_id
INNER JOIN DEPARTEMENTS d ON e.dept_id = d.dept_id
WHERE e.salaire > 10000
  AND d.dept_nom IN ('IT', 'Sales');

Bonnes pratiques et optimisation

  • ✅ Commencer par la table principale (la plus importante)
  • ✅ Joindre progressivement les tables complémentaires
  • ✅ Utiliser des alias courts mais explicites (e, d, l, p)
  • ✅ Indenter les jointures pour la lisibilité
  • ✅ Filtrer le plus tôt possible avec WHERE pour améliorer les performances
  • ✅ Vérifier les index sur les colonnes de jointure
  • ⚠️ Attention aux produits cartésiens si une condition ON est oubliée
  • ⚠️ Trop de jointures peuvent ralentir la requête

Cas d'usage professionnels

  • 📊 Rapports de vente par région, pays, catégorie
  • 📈 Tableaux de bord avec métriques croisées
  • 🔍 Analyses multi-dimensionnelles
  • 📉 Études de performance avec multiples critères
  • 🗺️ Cartographie des données géographiques
Exemples de code
Jointure 4 tables : Employé → Pays

Parcourir toute la chaîne EMPLOYES → DEPARTEMENTS → LOCALISATIONS → PAYS

Résultat attendu : 10 employés avec département, ville et pays

Jointures mixtes : INNER + LEFT

Tous les employés avec département (LEFT), mais seulement ceux avec localisation (INNER)

Résultat attendu : Employés avec département et ville (pas de NULL pour ville)

Agrégation par pays

Nombre d'employés et salaire moyen par pays

Résultat attendu : Statistiques par pays triées par nombre d'employés

Hiérarchie + Géographie

Employé, manager, département, ville et pays

Résultat attendu : 10 employés avec toutes les informations hiérarchiques et géographiques

Requête complexe avec filtres

Employés bien payés en Europe avec leur hiérarchie

Résultat attendu : Employés européens avec salaire > 8000 et toutes les infos
Exercices pratiques
Chaîne complète 4 tables
MOYEN
Affichez nom, prenom, dept_nom, ville et nom_pays pour tous les employés

Statistiques par continent
DIFFICILE
Calculez le nombre d'employés et le salaire moyen par continent

Employés en Amérique avec manager
DIFFICILE
Listez les employés travaillant en Amérique avec le nom de leur manager

Départements par pays avec comptage
DIFFICILE
Pour chaque pays, affichez le nombre de départements et le nombre total d'employés

Rapport complet multi-critères
DIFFICILE
Créez un rapport des employés avec salaire > 7000, incluant employé, manager, département, ville, pays et continent, triés par pays et salaire décroissant
Accueil