L3 Info : SGBD
 
◃  Ch. 9 SQL : DQL (Algèbre relationnel et SQL)  ▹
 

Jointure interne (SQL)

  • Une jointure entre deux tables n'a de sens que si elles possèdent au moins un attribut commun.
  • Impose la présence d'une correspondance entre les tables jointes comme en algèbre relationnelle
  • La prise en compte des colonnes de jointure change selon les syntaxes !
  • Exemples :
    -- Restriction du produit cartésien via la condition de jointure dans la clause WHERE
    -- cette méthode est moins efficace car elle charge une grande quantité de données en mémoire pour opérer
    
     SELECT *
        FROM etudiant E, Diplome D
        WHERE 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
    (2 rows)
    
    -- Jointure avec la syntaxe explicite
    
     SELECT *
        FROM etudiant E INNER 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
    (2 rows)
    
    -- Jointure avec la syntaxe implicite (possible lorsque les noms de colonnes sont identiques)
    
     SELECT *
        FROM etudiant E NATURAL JOIN diplome D;
    
        dip_id | etud_num | etud_nom | etud_prenom |       etud_adresse        | etud_naissance | dip_nom | dip_niveau | dip_discipline | prof_id
    --------+----------+----------+-------------+---------------------------+----------------+---------+------------+----------------+---------
          1 | 20000001 | Martin   | Jacques     | Résidence de la pommeraie | 1995-01-01     | Licence | L3         | Informatique   |       3
          1 | 20000002 | Martin   | Pierre      | Résidence de la pommeraie | 1995-10-21     | Licence | L3         | Informatique   |       3
    (2 rows)