L2 Info : Bases de données
 
◃  Ch. 2 Interrogation des données avec SQL (DQL)  ▹
 

Jointure externe (SQL)

  • Permet de retourner toutes les lignes d'une table, même si celle-ci ne possède pas de correspondances dans la table jointe
  • Trois types de jointures externes :
    • Jointure externe gauche (left outer join)
    • Jointure externe droite (right outer join)
    • Jointure externe gauche-droite (full outer join)
  • Syntaxe :
    SELECT ... FROM Tab1 [LEFT|RIGHT|FULL] OUTER JOIN Tab2
       ON Tab1.col = Tab2.col
    Oracle propose une syntaxe supplémentaire via le produit cartésien :
    SELECT ... FROM Tab1, Tab2
       WHERE Tab1.col = Tab2.col (+)
    
  • Exemples :
    SELECT *
        FROM etudiant E LEFT OUTER JOIN diplome D ON E.dip_id = D.dip_id;
    
     etud_num | etud_nom | etud_prenom |       etud_adresse        | etud_naissance | dip_id | dip_id | dip_nom | dip_niveau | dip_discipline | prof_id 
    ----------+----------+-------------+---------------------------+----------------+--------+--------+---------+------------+----------------+---------
     20000001 | Martin   | Jacques     | Résidence de la pommeraie | 1995-01-01     |      1 |      1 | Licence | L3         | Informatique   |       3
     20000002 | Martin   | Pierre      | Résidence de la pommeraie | 1995-10-21     |      1 |      1 | Licence | L3         | Informatique   |       3
     20000003 | Dalton   | Joe         | Pénitencier fédéral       | 1865-04-01     |        |        |         |            |                |        
     20000004 | Dalton   | Jack        | Pénitencier fédéral       | 1866-07-04     |        |        |         |            |                |        
     20000005 | Dalton   | William     | Pénitencier fédéral       | 1867-11-28     |        |        |         |            |                |        
     20000006 | Dalton   | Averell     | Pénitencier fédéral       | 1868-12-25     |        |        |         |            |                |        
    (6 rows)
    
    SELECT *
        FROM etudiant E FULL OUTER JOIN diplome D ON E.dip_id = D.dip_id;
    
     etud_num | etud_nom | etud_prenom |       etud_adresse        | etud_naissance | dip_id | dip_id | dip_nom | dip_niveau | dip_discipline | prof_id 
    ----------+----------+-------------+---------------------------+----------------+--------+--------+---------+------------+----------------+---------
     20000001 | Martin   | Jacques     | Résidence de la pommeraie | 1995-01-01     |      1 |      1 | Licence | L3         | Informatique   |       3
     20000002 | Martin   | Pierre      | Résidence de la pommeraie | 1995-10-21     |      1 |      1 | Licence | L3         | Informatique   |       3
     20000003 | Dalton   | Joe         | Pénitencier fédéral       | 1865-04-01     |        |        |         |            |                |        
     20000004 | Dalton   | Jack        | Pénitencier fédéral       | 1866-07-04     |        |        |         |            |                |        
     20000005 | Dalton   | William     | Pénitencier fédéral       | 1867-11-28     |        |        |         |            |                |        
     20000006 | Dalton   | Averell     | Pénitencier fédéral       | 1868-12-25     |        |        |         |            |                |        
              |          |             |                           |                |        |      2 | Master  | M2         | Informatique   |       1
    (7 rows)