LEFT JOIN en Oracle SQL : Guide complet et exemples

Maîtrisez le LEFT JOIN en Oracle SQL : définition, syntaxe, exemples pratiques et erreurs à éviter. Guide complet pour développeurs et analystes.

Illustration du tutoriel SQL Oracle : LEFT JOIN en Oracle SQL : Guide complet et exemples

LEFT JOIN en Oracle SQL : Guide complet avec exemples pratiques

Le LEFT JOIN est l’une des jointures les plus utilisées en Oracle SQL. Il permet de récupérer toutes les lignes d’une table principale, même lorsqu’aucune correspondance n’existe dans la table jointe. Que vous soyez développeur, analyste ou administrateur de bases de données, maîtriser le LEFT JOIN Oracle est indispensable pour construire des requêtes fiables et performantes en environnement professionnel.

Publicité

Définition et cas d’usage du LEFT JOIN en Oracle

Le LEFT JOIN (aussi appelé LEFT OUTER JOIN) est une jointure externe qui retourne :

  • Toutes les lignes de la table de gauche (table principale),
  • Les lignes correspondantes de la table de droite (table jointe),
  • NULL pour les colonnes de la table de droite lorsqu’aucune correspondance n’est trouvée.

En d’autres termes, le résultat ne supprime jamais une ligne de la table gauche, même si la condition de jointure ne trouve aucune concordance dans la table droite.

Cas d’usage courants en entreprise

  • Clients sans commandes : Lister tous les clients, y compris ceux qui n’ont jamais passé de commande.
  • Employés sans manager : Afficher tous les employés, même ceux dont le manager n’est pas encore renseigné.
  • Produits non vendus : Identifier les produits absents de toute facture sur une période donnée.
  • Audit de données manquantes : Détecter des enregistrements orphelins ou des données incomplètes dans une base de production.

Le LEFT JOIN est donc un outil clé pour les analyses de complétude, les rapports de gestion et la détection d’anomalies dans les données.

Note Oracle : Dans les anciennes versions d’Oracle, la syntaxe propriétaire (+) était utilisée à la place du LEFT JOIN. Cette syntaxe est toujours supportée mais déconseillée depuis l’introduction du standard SQL:1999 dans Oracle 9i.

Syntaxe du LEFT JOIN Oracle SQL

La syntaxe standard du LEFT JOIN en Oracle est la suivante :

SELECT colonne1, colonne2, ...
FROM table_gauche
LEFT JOIN table_droite
    ON table_gauche.colonne_cle = table_droite.colonne_cle
WHERE condition_optionnelle;

Explication des paramètres essentiels

ÉlémentDescription
table_gaucheTable principale dont toutes les lignes seront retournées
LEFT JOINMot-clé déclenchant la jointure externe gauche (équivalent à LEFT OUTER JOIN)
table_droiteTable secondaire, dont les lignes non correspondantes génèrent des NULL
ONCondition de jointure reliant les deux tables via une ou plusieurs colonnes
WHEREFiltre optionnel appliqué après la jointure (attention à l’impact sur les NULL)

Variante équivalente : Les mots-clés LEFT JOIN et LEFT OUTER JOIN sont strictement identiques en Oracle. Le mot OUTER est facultatif.

Exemples pratiques de LEFT JOIN en Oracle SQL

Exemple 1 — Clients sans commandes

Contexte métier : Le service commercial souhaite identifier tous les clients enregistrés dans le CRM, y compris ceux qui n’ont jamais passé de commande, afin de lancer une campagne de relance ciblée.

-- Récupérer tous les clients, avec ou sans commande associée
SELECT
    c.client_id,
    c.nom,
    c.email,
    co.commande_id,
    co.date_commande,
    co.montant_total
FROM clients c
LEFT JOIN commandes co
    ON c.client_id = co.client_id
ORDER BY c.nom;

-- Les clients sans commande auront NULL dans commande_id, date_commande et montant_total

Pour isoler uniquement les clients sans aucune commande, il suffit d’ajouter un filtre sur la valeur NULL :

-- Filtrer uniquement les clients sans commande
SELECT
    c.client_id,
    c.nom,
    c.email
FROM clients c
LEFT JOIN commandes co
    ON c.client_id = co.client_id
WHERE co.commande_id IS NULL
ORDER BY c.nom;

Exemple 2 — Employés et leur département

Contexte métier : La direction RH veut obtenir la liste complète des employés avec leur département d’affectation. Certains employés nouvellement recrutés ne sont pas encore rattachés à un département : ils doivent tout de même apparaître dans le rapport.

-- Lister tous les employés avec leur département (même si non affecté)
SELECT
    e.employee_id,
    e.last_name        AS nom,
    e.first_name       AS prenom,
    e.hire_date        AS date_embauche,
    d.department_id,
    d.department_name  AS departement
FROM employees e
LEFT JOIN departments d
    ON e.department_id = d.department_id
ORDER BY e.last_name, e.first_name;

-- Les employés sans département afficheront NULL dans department_id et department_name
-- Exemple basé sur le schéma HR fourni nativement avec Oracle Database

Ce type de requête s’appuie sur le schéma HR (Human Resources) inclus dans Oracle Database, ce qui en fait un excellent cas d’entraînement disponible immédiatement dans tout environnement Oracle.

Publicité

Erreurs courantes avec le LEFT JOIN en Oracle

Erreur : filtrer sur la table droite dans la clause WHERE au lieu du ON

C’est l’erreur la plus fréquente et la plus piégeuse avec le LEFT JOIN. Elle transforme silencieusement votre jointure externe en jointure interne (INNER JOIN), supprimant les lignes NULL que vous souhaitiez conserver.

❌ Requête incorrecte :

-- ATTENTION : ce filtre dans WHERE annule l'effet du LEFT JOIN
SELECT
    c.client_id,
    c.nom,
    co.montant_total
FROM clients c
LEFT JOIN commandes co
    ON c.client_id = co.client_id
WHERE co.statut = 'VALIDEE'; -- Filtre sur la table droite dans WHERE
-- Résultat : les clients sans commande sont exclus → comportement identique à un INNER JOIN

✅ Requête correcte :

-- Déplacer le filtre dans la clause ON pour préserver le LEFT JOIN
SELECT
    c.client_id,
    c.nom,
    co.montant_total
FROM clients c
LEFT JOIN commandes co
    ON c.client_id = co.client_id
    AND co.statut = 'VALIDEE'; -- Filtre intégré à la condition de jointure
-- Résultat : tous les clients apparaissent, avec NULL si pas de commande validée

Règle à retenir : Tout filtre portant sur des colonnes de la table droite doit être placé dans la clause ON, et non dans la clause WHERE, pour ne pas briser la logique du LEFT JOIN.

Résumé : points clés du LEFT JOIN Oracle

Point cléDétail
RetourneToutes les lignes de la table gauche + lignes correspondantes de la table droite
Valeurs NULLGénérées pour les colonnes de la table droite sans correspondance
Syntaxe OracleLEFT JOIN ou LEFT OUTER JOIN (identiques)
Ancienne syntaxe Oracle(+) côté table droite — déconseillée mais fonctionnelle
Piège principalFiltrer la table droite dans WHERE → transforme en INNER JOIN
Cas d’usage typiquesDonnées manquantes, rapports complets, détection d’orphelins

2 bonnes pratiques Oracle

  1. Utilisez toujours des alias de table explicites. En Oracle, les requêtes multi-tables avec des colonnes du même nom peuvent provoquer des erreurs ambiguës (ORA-00918: column ambiguously defined). Des alias courts et descriptifs (c pour clients, co pour commandes) améliorent la lisibilité et évitent ces conflits.
  2. Vérifiez l’existence d’index sur les colonnes de jointure. En production Oracle, un LEFT JOIN sur une colonne non indexée peut entraîner des full table scans coûteux. Assurez-vous qu’un index existe sur la colonne de la clause ON côté table droite, notamment sur les clés étrangères (foreign keys).

Aller plus loin avec les jointures Oracle SQL

Le LEFT JOIN n’est qu’une des nombreuses techniques de jointure disponibles en Oracle SQL. Pour approfondir vos compétences, découvrez également :

  • INNER JOIN Oracle SQL : Apprenez à ne récupérer que les lignes avec correspondance dans les deux tables, le type de jointure le plus courant en SQL Oracle.
  • RIGHT JOIN Oracle SQL : Découvrez le pendant symétrique du LEFT JOIN : toutes les lignes de la table droite sont conservées, quelle que soit la correspondance dans la table gauche.
  • FULL OUTER JOIN Oracle SQL : Maîtrisez la jointure externe complète qui combine les résultats du LEFT JOIN et du RIGHT JOIN pour ne perdre aucune ligne des deux tables.

Questions fréquentes

Que renvoie un LEFT JOIN ?

Toutes les lignes de la table de gauche, complétées par les colonnes de la table de droite quand il y a correspondance, sinon par des NULL.

Comment trouver les lignes sans correspondance avec LEFT JOIN ?

Ajoutez WHERE table_droite.cle IS NULL : c’est l’anti-jointure classique pour trouver, par exemple, les clients sans commande.

LEFT JOIN et filtre : WHERE ou ON ?

Un filtre sur la table de droite doit aller dans le ON pour conserver le comportement LEFT JOIN ; dans le WHERE, il transforme silencieusement la requête en INNER JOIN.

Sur le même thème

📌 À lire aussi : FULL OUTER JOIN expliqué simplement · Les jointures SQL Oracle : vue d’ensemble

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité