Jointure interne |
Jointure externe |
Dans une jointure interne, on obtient uniquement les enregistrement qui ont au moins une correspondance dans chaque table.
a) Jointure interne simple
Le résultat ne contient que les sessions ayant au moins un inscrit.
SELECT c.codecsession, codecours, datedebut, codeinscrip, nom
FROM csession c join inscrip i
on c.codecsession = i.codecsession
order by codecsession ;
Seules les sessions 1, 2, 5, 6 , 11 , 16, 20, 22, 24, 25 ont des inscrits :
|
Dans une jointure externe gauche, on obtient déjà le résultat de la jointure interne, auquel se rajoute les enregistrement de la table de gauche, qui n'ont pas de correspondance dans la table de droite.
d) Jointure externe simple
Le résultat contient toutes les sessions, même celles qui n'ont aucun inscript (colonne codeinscrip à NULL)
SELECT c.codecsession, codecours, datedebut, codeinscrip, nom
FROM csession c left outer join inscrip i
on c.codecsession = i.codecsession ;
Les sessions 1 à 25 apparaissent à l'écran :
|
b) Jointure interne avec le critère de jointure + un critère supplémentaire (WHERE)
Afficher uniquement les codes de session compris entre 1 et 10 :
La bonne requête : Le WHERE permet de filtrer le résultat précédent.
SELECT c.codecsession, codecours, datedebut, codeinscrip, nom
FROM csession c join inscrip i
on c.codecsession = i.codecsession
where c.codecsession between 1 and 10 ;
c) Jointure interne avec le critère de jointure + un critère supplémentaire (ON)
Cette solution est donc incorrecte. Mais :
Malgré que cela ne soit pas dans l'esprit du ON (ON sert à exprimer le critère de jointure uniquement), on obtiendra le même résultat dans le cas d'une jointure interne :
SELECT c.codecsession, codecours, datedebut, codeinscrip, nom
FROM csession c join inscrip i
on c.codecsession = i.codecsession
and c.codecsession between 1 and 10 ;
Résultat :
|
e) Jointure externe avec le critère de jointure + un critère supplémentaire (WHERE)
Afficher uniquement les codes de session compris entre 1 et 10 :
SELECT c.codecsession, codecours, datedebut, codeinscrip, nom
FROM csession c left outer join inscrip i
on c.codecsession = i.codecsession
where c.codecsession between 1 and 10 ;
Ici, on filtre simplement le résultat précédent ; on conserve uniquement les sessions comprises entre 1 et 10
f) Jointure externe avec le critère de jointure + un critère supplémentaire (ON)
Afficher uniquement les codes de session compris entre 1 et 10 :
SELECT c.codecsession, codecours, datedebut, codeinscrip, nom
FROM csession c left outer join inscrip i
on c.codecsession = i.codecsession
and c.codecsession between 1 and 10 ;
On obtient le résultat de la jointure interne vue au point c) auquel s'ajoutent tous les enregistrements de la table csession qui n'ont pas de coorrespondance avec la table inscrip.
Cette solution est donc incorrecte.
|
|