La jointure de tables¶
La clé étrangère¶
Les clé étrangèrs permettent de faire des liens entre les tables :
Exemple :
Un cours est associé à un programme
On ajoute donc un numéro de programme dans la table cours
| noCours | nomCours | noProgrammeCours |
|---|---|---|
| 420-2B5 | Intro. aux BD | 420.A0 |
On utilise le numéro de programme associé pour retrouver le nom du programme (dans la table programme) auquel ce cours est associé
| noProgramme | nomProgramme |
|---|---|
| 420.A0 | Techniques de l'informatique |
Requêtes sur plus d'une table¶
Lorsqu'on écrit :
SELECT *
FROM cours, programme;
⚠️ SQL produit un produit cartésien comme table résultante, ce qui veut dire que :
👉 Chaque ligne de cours est combinée avec toutes les lignes de programme.
Si :
- cours contient 20 lignes
- programme contient 5 lignes
Résultat : 20 × 5 = 100 lignes !!!
Exemple :
Cours :
| noCours | nomCours | noProgrammeCours |
|---|---|---|
| 420-2B5 | Intro. aux BD | 420.A0 |
| 210-1A8 | Chimie organique | 210.AA |
| 152-CA3 | Santé et sécurité en milieu agricole | NULL |
Programme :
| noProgramme | nomProgramme |
|---|---|
| 420.A0 | Techniques de l'informatique |
| 210.AA | Biotechnologies |
| 221.A0 | Techniques de l'architechture |
Requête :
SELECT nomCours, nomProgramme
FROM cours, programme;
Résultat :
| nomCours | nomProgramme |
|---|---|
| Intro. aux BD | Techniques de l'informatique |
| Intro. aux BD | Biotechnologies |
| Intro. aux BD | Techniques de l'architecture |
| Chimie organique | Techniques de l'informatique |
| Chimie organique | Biotechnologies |
| Chimie organique | Techniques de l'architecture |
| Santé et sécurité en milieu agricole | Techniques de l'informatique |
| Santé et sécurité en milieu agricole | Biotechnologies |
| Santé et sécurité en milieu agricole | Techniques de l'architecture |
⚠️ Ici, la majorité des résultats offrent des données qui sont fausses !
La jointure de tables¶
Dans une base de données bien conçue :
- la table COURS contient les informations des cours
- la table PROGRAMME contient les programmes
- Une clé étrangère relie les deux tables (ex : noProgramme)
❌ On ne veut pas toutes les combinaisons possibles.
✔ On veut seulement les lignes qui correspondent réellement.
👉 Une jointure est donc :
Un produit cartésien basé sur une condition de correspondance.
Il existe différentes jointures possibles, dont 4 principales :
- Jointure interne (INNER JOIN)
- Jointure externe gauche (LEFT JOIN)
- Jointure externe droite (RIGHT JOIN)
- Jointure externe complète (FULL JOIN)
Jointure interne (INNER JOIN)¶
La jointure interne est la plus utilisée, car elle permet d'extraire seulement les lignes qui ont une correspondance dans deux tables.
Supposons un ensemble A et un ensemble B.
La jointure interne permet d'extraire les éléments des deux ensembles ayant une information identique.
En SQL, on écrit :
SELECT quoi
FROM table1
INNER JOIN table2
ON condition de correspondance;
Exemple :
SELECT nomCours, nomProgramme
FROM cours
INNER JOIN programme
ON noProgrammeCours = noProgramme;
Résultat :
| nomCours | nomProgramme |
|---|---|
| Intro. aux BD | Techniques de l'informatique |
| Chimie organique | Biotechnologies |
Seuls les cours d'Intro au BD et de Chimie organique ont une correspondance avec la table des programmes.
La jointure externe gauche (LEFT JOIN)¶
La jointure externe gauche retourne toutes les lignes d'une première table et s'il y a correspondance, on lui ajoute les informations d'une seconde table.
Supposons un ensemble A et un ensemble B.
En SQL, on écrit :
SELECT quoi
FROM table1
LEFT JOIN table2
ON condition de correspondance;
Exemple :
SELECT nomCours, nomProgramme
FROM cours
LEFT JOIN programme
ON noProgrammeCours = noProgramme;
Résultat :
| nomCours | nomProgramme |
|---|---|
| Intro. aux BD | Techniques de l'informatique |
| Chimie organique | Biotechnologies |
| Santé et sécurité en milieu agricole | NULL |
Tous les cours sont retournés (table de gauche), mais aucun nom de programme ne peut être associé au cours de Santé et sécurité en milieu agricole.
La jointure externe droite (RIGHT JOIN)¶
La jointure externe droite retourne toutes les lignes d'une deuxième table et s'il y a correspondance, on lui ajoute les informations d'une première table.
Supposons un ensemble A et un ensemble B.
En SQL, on écrit :
SELECT quoi
FROM table1
RIGHT JOIN table2
ON condition de correspondance;
Exemple :
SELECT nomCours, nomProgramme
FROM cours
RIGHT JOIN programme
ON noProgrammeCours = noProgramme;
Résultat :
| nomCours | nomProgramme |
|---|---|
| Intro. aux BD | Techniques de l'informatique |
| Chimie organique | Biotechnologies |
| NULL | Techniques de l'architechture |
Tous les programmes sont retournés (table de droite), mais aucun nom de cours ne peut être associé au programme d'Architecture.
Jointure externe complète (FULL JOIN)¶
La jointure externe complète retourne toutes les lignes des deux tables en ajoutant des NULL pour les lignes où il n'y a pas de correspondance.
Supposons un ensemble A et un ensemble B.
En SQL, on écrit :
SELECT quoi
FROM table1
FULL JOIN table2
ON condition de correspondance;
Exemple :
SELECT nomCours, nomProgramme
FROM cours
FULL JOIN programme
ON noProgrammeCours = noProgramme;
Résultat :
| nomCours | nomProgramme |
|---|---|
| Intro. aux BD | Techniques de l'informatique |
| Chimie organique | Biotechnologies |
| Santé et sécurité en milieu agricole | NULL |
| NULL | Techniques de l'architechture |
On reçoit :
- Les cours et leur programme associé
- Les cours sans programme
- Les programmes sans cours
Ordre d'exécution¶
Pour une requête ayant les clauses :
SELECT champs
FROM table1
INNER JOIN table2
ON condition de correspondance
WHERE condition de restriction
ORDER BY champ
L'ordre d'exécution est :
- FROM
- INNER JOIN
- WHERE
- SELECT
- ORDER BY