Aller au contenu
Jointures

FULL OUTER JOIN

FULL OUTER JOIN garde toutes les lignes des deux tables, appariées quand c'est possible et complétées par NULL sinon. C'est l'outil du rapprochement entre deux listes ou deux périodes.

  • jointure complète
  • FULL JOIN
  • rapprochement
  • réconciliation

Syntaxe

Modèle
SELECT COALESCE(a.cle, b.cle) AS cle, a.col, b.colFROM table_a aFULL OUTER JOIN table_b b ON b.cle = a.cle;

Exemple

Exemple concret
WITH fevrier AS (  SELECT oi.product_id, SUM(oi.quantity) AS qte  FROM order_items oi JOIN orders o ON o.id = oi.order_id  WHERE o.order_date LIKE '2024-02-%'  GROUP BY oi.product_id),mars AS (  SELECT oi.product_id, SUM(oi.quantity) AS qte  FROM order_items oi JOIN orders o ON o.id = oi.order_id  WHERE o.order_date LIKE '2024-03-%'  GROUP BY oi.product_id)SELECT p.name AS produit,       COALESCE(f.qte, 0) AS qte_fevrier,       COALESCE(m.qte, 0) AS qte_marsFROM fevrier fFULL OUTER JOIN mars m ON m.product_id = f.product_idJOIN products p ON p.id = COALESCE(f.product_id, m.product_id)ORDER BY p.id;-- Jeu de données : boutique-- Ventes par produit, février contre mars 2024-- Résultat attendu :-- Souris sans fil | 1 | 1-- Casque audio | 1 | 0-- Webcam HD | 0 | 1-- Enceinte Bluetooth | 0 | 1

À retenir

  1. FULL OUTER JOIN = LEFT JOIN + les lignes de droite sans correspondance. FULL JOIN est un synonyme.
  2. La clé est NULL d'un côté sur les lignes non appariées : récupérez-la avec COALESCE(f.product_id, m.product_id) avant de la réutiliser.
  3. Piège : un WHERE sur une colonne d'un seul côté (WHERE f.qte > 0) élimine les lignes complétées par NULL et fait perdre l'intérêt de la jointure complète.
  4. Disponible dans SQLite 3.39+, PostgreSQL et SQL Server. MySQL n'a pas de FULL JOIN : on l'émule avec un LEFT JOIN UNION un RIGHT JOIN.

Voir aussi