
🧪 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ètre | Description |
|---|---|
table_gauche | Première table de la jointure. Toutes ses lignes seront incluses dans le résultat. |
table_droite | Deuxième table de la jointure. Toutes ses lignes seront également incluses. |
ON | Condition de jointure définissant la clé de rapprochement entre les deux tables. |
FULL OUTER JOIN | Le 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 standardFULL 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_idestNULL→ la commande n’a pas encore été livrée. - Si
commande_idcôté commandes estNULL→ 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
CASEenrichit 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).
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éfinition | Retourne toutes les lignes des deux tables, avec NULL pour les colonnes sans correspondance. |
| Syntaxe Oracle | FULL JOIN ou FULL OUTER JOIN (équivalents) |
Ancienne syntaxe (+) | ❌ Non supportée pour le FULL JOIN — utiliser la syntaxe ANSI obligatoirement |
| Cas d’usage principaux | Rapprochement, détection d’anomalies, comparaison de référentiels, migration |
| Valeurs NULL | Présentes lorsqu’aucune correspondance n’existe d’un côté ou de l’autre |
| Fonctions utiles associées | NVL(), COALESCE(), CASE WHEN pour traiter les NULL |
2 bonnes pratiques Oracle pour le FULL JOIN
- Toujours utiliser des alias de table explicites : avec le FULL JOIN, les deux tables contribuent au résultat. Des alias clairs (
a,bou des noms significatifs) évitent toute ambiguïté sur l’origine des colonnes et rendent la requête plus maintenable. - Filtrer les résultats avec
WHERE ... IS NULLpour 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 filtreWHERE a.id IS NULL OR b.id IS NULLpermet 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
- JOIN en SQL Oracle : Guide Complet avec Exemples
- LEFT JOIN en Oracle SQL : Guide complet et exemples
- RIGHT JOIN en Oracle SQL : syntaxe et exemples pratiques
- DROP SQL Oracle : supprimer des objets de base de données
- PARTITION Oracle SQL : Guide complet avec exemples
- MATERIALIZED VIEW Oracle : Guide Complet et Pratique
