Aller au contenu

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.

INNER JOIN

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.

LEFT JOIN

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.

RIGHT JOIN

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.

FULL JOIN

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 :

  1. Les cours et leur programme associé
  2. Les cours sans programme
  3. 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 :

  1. FROM
  2. INNER JOIN
  3. WHERE
  4. SELECT
  5. ORDER BY