FULL JOIN Oracle SQL : syntaxe, exemples et bonnes pratiques

Découvrez le FULL JOIN en SQL Oracle : définition, syntaxe complète, exemples pratiques et erreurs à éviter pour maîtriser cette jointure externe totale.

Illustration du tutoriel SQL Oracle : FULL JOIN Oracle SQL : syntaxe, exemples et bonnes pratiques

Publicité

🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.

FULL JOIN en SQL Oracle : guide complet avec exemples pratiques

Le FULL JOIN en SQL Oracle, aussi appelé jointure externe complète, est une opération puissante qui permet de combiner deux tables en retournant toutes les lignes des deux côtés, qu’il existe ou non une correspondance. Lorsqu’aucune correspondance n’est trouvée d’un côté, les colonnes de ce côté affichent NULL. Maîtriser le FULL JOIN est essentiel pour analyser des données incomplètes ou comparer deux jeux de données en entreprise.

Définition et utilisation du FULL JOIN

Le FULL JOIN (ou FULL OUTER JOIN) est une jointure externe qui combine le comportement du LEFT JOIN et du RIGHT JOIN. Il retourne :

  • Toutes les lignes de la table de gauche, même si aucune correspondance n’existe dans la table de droite.
  • Toutes les lignes de la table de droite, même si aucune correspondance n’existe dans la table de gauche.
  • Les lignes correspondantes des deux tables lorsqu’une jointure est possible.

Les valeurs manquantes sont remplacées par NULL dans les colonnes concernées.

Cas d’usage en entreprise

Le FULL JOIN est particulièrement utile dans les situations suivantes :

  • Rapprochement comptable : comparer deux tables de transactions (ex. : factures émises vs paiements reçus) pour identifier les écarts de chaque côté.
  • Synchronisation de données : détecter les enregistrements présents dans une source mais absents dans une autre lors d’une migration ou d’une intégration de données.
  • Analyse RH : croiser une liste d’employés avec une liste de formations pour identifier qui n’a suivi aucune formation et quelles formations n’ont été suivies par personne.
  • Contrôle qualité : comparer deux référentiels produits pour trouver les écarts entre un catalogue fournisseur et un catalogue interne.

Syntaxe du FULL JOIN en SQL Oracle

La syntaxe du FULL JOIN Oracle est la suivante :

SELECT colonne1, colonne2, ...
FROM table_gauche
FULL JOIN table_droite
  ON table_gauche.colonne_cle = table_droite.colonne_cle;

La syntaxe complète avec OUTER (équivalente) :

SELECT colonne1, colonne2, ...
FROM table_gauche
FULL OUTER JOIN table_droite
  ON table_gauche.colonne_cle = table_droite.colonne_cle;

Explication des paramètres

ParamètreDescription
table_gauchePremière table de la jointure. Toutes ses lignes seront incluses dans le résultat.
table_droiteDeuxième table de la jointure. Toutes ses lignes seront également incluses.
ONCondition de jointure définissant la clé de rapprochement entre les deux tables.
FULL OUTER JOINLe mot-clé OUTER est optionnel en Oracle. Les deux syntaxes sont acceptées.

💡 Note Oracle : La syntaxe avec le signe (+) utilisée pour les jointures externes en Oracle (ancienne syntaxe) ne supporte pas le FULL JOIN. Il est obligatoire d’utiliser la syntaxe SQL standard FULL JOIN ... ON.

Exemples pratiques de FULL JOIN en SQL Oracle

Exemple 1 – Rapprochement entre commandes et livraisons

Contexte métier : Une entreprise souhaite identifier les commandes sans livraison associée et les livraisons sans commande enregistrée, afin de détecter des anomalies dans son système logistique.

-- Tables utilisées : COMMANDES et LIVRAISONS
-- Objectif : identifier les écarts entre commandes et livraisons

SELECT
    c.commande_id,
    c.client_id,
    c.montant         AS montant_commande,
    l.livraison_id,
    l.date_livraison,
    l.statut          AS statut_livraison
FROM commandes c
FULL JOIN livraisons l
    ON c.commande_id = l.commande_id
ORDER BY c.commande_id NULLS LAST, l.livraison_id NULLS LAST;

Interprétation des résultats :

  • Si livraison_id est NULL → la commande n’a pas encore été livrée.
  • Si commande_id côté commandes est NULL → une livraison existe sans commande associée (anomalie).
  • Si les deux colonnes sont renseignées → correspondance normale.

Exemple 2 – Comparaison de deux référentiels d’employés

Contexte métier : Suite à une fusion d’entreprises, le service RH doit comparer la liste des employés de la société A (EMPLOYES_A) avec celle de la société B (EMPLOYES_B) pour identifier les doublons et les employés exclusifs à chaque entité.

-- Comparaison de deux référentiels d'employés après fusion
-- On joint sur le numéro de sécurité sociale (NSS) comme identifiant commun

SELECT
    NVL(a.nss, b.nss)             AS nss,
    a.nom                          AS nom_societe_a,
    b.nom                          AS nom_societe_b,
    CASE
        WHEN a.nss IS NULL THEN 'Uniquement dans Société B'
        WHEN b.nss IS NULL THEN 'Uniquement dans Société A'
        ELSE 'Présent dans les deux sociétés'
    END                            AS statut
FROM employes_a a
FULL JOIN employes_b b
    ON a.nss = b.nss
ORDER BY nss;

Points clés de cet exemple :

  • La fonction NVL(a.nss, b.nss) permet d’afficher le NSS quel que soit le côté où il est présent.
  • Le CASE enrichit le résultat d’une colonne de statut lisible par les métiers.
  • Ce type de requête est courant dans les projets de data quality et de MDM (Master Data Management).
Publicité

Erreurs courantes avec le FULL JOIN en Oracle

Erreur : utiliser l’ancienne syntaxe Oracle (+) pour un FULL JOIN

Certains développeurs habitués à l’ancienne syntaxe Oracle tentent d’écrire un FULL JOIN en utilisant le signe (+) des deux côtés :

-- ❌ SYNTAXE INCORRECTE — génère une erreur ORA-01468
SELECT c.commande_id, l.livraison_id
FROM commandes c, livraisons l
WHERE c.commande_id(+) = l.commande_id(+);

Oracle retourne l’erreur ORA-01468 : a predicate may reference only one outer-joined table. Il est impossible d’appliquer (+) des deux côtés d’une condition.

Solution : utiliser impérativement la syntaxe SQL standard

-- ✅ SYNTAXE CORRECTE
SELECT c.commande_id, l.livraison_id
FROM commandes c
FULL JOIN livraisons l
    ON c.commande_id = l.commande_id;

🔒 Bonne pratique : Abandonner définitivement la syntaxe (+) dans tout nouveau développement Oracle. La syntaxe ANSI SQL (JOIN ... ON) est plus lisible, portable et supportée par toutes les versions modernes d’Oracle.

Résumé du FULL JOIN en SQL Oracle

Point cléDétail
DéfinitionRetourne toutes les lignes des deux tables, avec NULL pour les colonnes sans correspondance.
Syntaxe OracleFULL JOIN ou FULL OUTER JOIN (équivalents)
Ancienne syntaxe (+)❌ Non supportée pour le FULL JOIN — utiliser la syntaxe ANSI obligatoirement
Cas d’usage principauxRapprochement, détection d’anomalies, comparaison de référentiels, migration
Valeurs NULLPrésentes lorsqu’aucune correspondance n’existe d’un côté ou de l’autre
Fonctions utiles associéesNVL(), COALESCE(), CASE WHEN pour traiter les NULL

2 bonnes pratiques Oracle pour le FULL JOIN

  1. Toujours utiliser des alias de table explicites : avec le FULL JOIN, les deux tables contribuent au résultat. Des alias clairs (a, b ou des noms significatifs) évitent toute ambiguïté sur l’origine des colonnes et rendent la requête plus maintenable.
  2. Filtrer les résultats avec WHERE ... IS NULL pour isoler les écarts : dans la plupart des cas métiers, on n’utilise pas le FULL JOIN pour afficher tous les résultats, mais pour isoler les non-correspondances. Ajouter un filtre WHERE a.id IS NULL OR b.id IS NULL permet d’extraire uniquement les lignes orphelines de chaque côté.

Aller plus loin avec les jointures SQL Oracle

Pour approfondir votre maîtrise des jointures en SQL Oracle, nous vous recommandons les sujets suivants :

  • LEFT JOIN en SQL Oracle : comprendre la jointure externe gauche et ses cas d’usage pour récupérer toutes les lignes d’une table principale, même sans correspondance.
  • INNER JOIN en SQL Oracle : maîtriser la jointure interne, la plus utilisée en SQL, pour ne retourner que les lignes ayant une correspondance dans les deux tables.
  • COALESCE et NVL en SQL Oracle : apprendre à gérer efficacement les valeurs NULL retournées par les jointures externes, notamment le FULL JOIN.

Sur le même thème

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é