Post

SQL - Les jointures

SQL - Les jointures

SQL – Les jointures

Pourquoi utiliser une jointure ?

Dans une base de données relationnelle, les informations sont souvent réparties dans plusieurs tables.

Exemple :

Table eleves

idnom
1Dupont
2Martin

Table notes

idid_elevenote
1115
2118
3212

L’objectif est souvent d’afficher :

1
2
3
Dupont | 15
Dupont | 18
Martin | 12

Pour cela, on utilise une jointure.


Structure des tables

1
2
3
4
CREATE TABLE eleves (
    id INTEGER PRIMARY KEY,
    nom TEXT
);
1
2
3
4
5
CREATE TABLE notes (
    id INTEGER PRIMARY KEY,
    id_eleve INTEGER,
    note INTEGER
);

La colonne :

1
id_eleve

fait référence à :

1
eleves.id

INNER JOIN

C’est la jointure la plus utilisée.

Elle affiche uniquement les lignes présentes dans les deux tables.

1
2
3
4
5
SELECT eleves.nom,
       notes.note
FROM eleves
INNER JOIN notes
ON eleves.id = notes.id_eleve;

Résultat :

1
2
3
Dupont | 15
Dupont | 18
Martin | 12

Utilisation d’alias

Pour simplifier l’écriture :

1
2
3
4
5
SELECT e.nom,
       n.note
FROM eleves e
INNER JOIN notes n
ON e.id = n.id_eleve;

Le résultat est identique.


INNER JOIN avec condition

Afficher uniquement les notes supérieures ou égales à 15 :

1
2
3
4
5
6
SELECT e.nom,
       n.note
FROM eleves e
INNER JOIN notes n
ON e.id = n.id_eleve
WHERE n.note >= 15;

Résultat :

1
2
Dupont | 15
Dupont | 18

LEFT JOIN

Affiche toutes les lignes de la table de gauche.

Même si aucune correspondance n’existe dans la table de droite.

Table eleves

idnom
1Dupont
2Martin
3Bernard

Table notes

idid_elevenote
1115
2212

Requête :

1
2
3
4
5
SELECT e.nom,
       n.note
FROM eleves e
LEFT JOIN notes n
ON e.id = n.id_eleve;

Résultat :

1
2
3
Dupont  | 15
Martin  | 12
Bernard | NULL

Bernard apparaît même sans note.


RIGHT JOIN

Affiche toutes les lignes de la table de droite.

1
2
3
4
5
SELECT e.nom,
       n.note
FROM eleves e
RIGHT JOIN notes n
ON e.id = n.id_eleve;

⚠️ SQLite ne supporte pas directement RIGHT JOIN.

Avec SQLite, on inverse généralement les tables et on utilise un LEFT JOIN.


Jointure sur plusieurs colonnes

On peut utiliser plusieurs critères.

1
2
3
4
5
SELECT *
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.id
AND t1.code = t2.code;

Jointure entre trois tables

Exemple :

Table eleves

Table notes

Table matieres

1
2
3
4
5
6
7
8
SELECT e.nom,
       m.nom_matiere,
       n.note
FROM notes n
INNER JOIN eleves e
ON e.id = n.id_eleve
INNER JOIN matieres m
ON m.id = n.id_matiere;

Résultat :

1
2
3
Dupont | Maths   | 15
Dupont | Physique| 18
Martin | Maths   | 12

Rechercher les élèves sans note

Grâce au LEFT JOIN :

1
2
3
4
5
SELECT e.nom
FROM eleves e
LEFT JOIN notes n
ON e.id = n.id_eleve
WHERE n.id IS NULL;

Résultat :

1
Bernard

Jointure et tri

1
2
3
4
5
6
SELECT e.nom,
       n.note
FROM eleves e
INNER JOIN notes n
ON e.id = n.id_eleve
ORDER BY e.nom;

Jointure et agrégation

Calculer la moyenne des notes :

1
2
3
4
5
6
SELECT e.nom,
       AVG(n.note) AS moyenne
FROM eleves e
INNER JOIN notes n
ON e.id = n.id_eleve
GROUP BY e.nom;

Résultat :

1
2
Dupont | 16.5
Martin | 12

Schéma mental d’une jointure

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Table eleves

id | nom
-----------
1  | Dupont
2  | Martin

        ||
        ||
        \/

Table notes

id_eleve | note
----------------
1        | 15
1        | 18
2        | 12

La jointure relie :

1
2
3
eleves.id
=
notes.id_eleve

SQL depuis Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sqlite3

connexion = sqlite3.connect("ecole.db")
curseur = connexion.cursor()

curseur.execute("""
    SELECT e.nom, n.note
    FROM eleves e
    INNER JOIN notes n
    ON e.id = n.id_eleve
""")

resultats = curseur.fetchall()

for ligne in resultats:
    print(ligne)

connexion.close()

Bonnes pratiques

  • Utiliser des clés primaires (PRIMARY KEY).
  • Utiliser des clés étrangères (FOREIGN KEY).
  • Toujours préciser la condition du ON.
  • Utiliser des alias (e, n, m) pour simplifier les requêtes.
  • Éviter les jointures inutiles sur de très grosses tables.

À retenir

La jointure la plus utilisée est :

1
INNER JOIN

Syntaxe générale :

1
2
3
4
SELECT colonnes
FROM table1
INNER JOIN table2
ON table1.cle = table2.cle;

Les jointures permettent de relier les données réparties dans plusieurs tables et constituent l’un des mécanismes les plus importants des bases de données relationnelles.

This post is licensed under CC BY 4.0 by the author.