Back-end · 5 mondes · 15 étapes

Bases de données & SQL

Interroger, relier, modifier et concevoir des données, avec une vraie base SQLite.

Progression

0 %

0/15 étapes terminées

Intermédiaire · 10 min de lecture

Les jointures

Une information à un seul endroit, reliée partout

1Définition

Une base normalisée range chaque information une seule fois et relie les tables par des clés. La jointure reconstitue la vue complète : JOIN ne garde que les lignes qui se correspondent, LEFT JOIN garde toutes celles de la table de gauche.

2Principes fondamentaux

01

Toujours une condition ON

Sans elle, chaque ligne est associée à chaque ligne : le produit cartésien.

02

Des alias courts

FROM resultats r JOIN joueurs j : plus lisible, et sans ambiguïté quand deux tables ont un id.

03

LEFT JOIN pour ne perdre personne

Les joueurs sans résultat restent, avec des NULL à droite.

04

Compter une colonne de droite

COUNT(r.mission_id) donne 0 aux lignes sans correspondance ; COUNT(*) donnerait 1.

3Exemples pratiques

Trois tables

Exemple
1SELECT j.pseudo, m.titre, r.precision2FROM resultats r3JOIN joueurs j ON j.id = r.joueur_id4JOIN missions m ON m.id = r.mission_id;

La table centrale (les résultats) relie les deux autres par leurs identifiants.

Trouver les absents

Exemple
1SELECT j.pseudo2FROM joueurs j3LEFT JOIN resultats r ON r.joueur_id = j.id4WHERE r.joueur_id IS NULL;5-- cy, eve

Le motif « LEFT JOIN … WHERE droite IS NULL » trouve tout ce qui n'a pas de correspondance.

4Erreurs courantes

Oublier ON

À éviter

SELECT * FROM joueurs, resultats;

À faire

SELECT * FROM joueurs j JOIN resultats r ON r.joueur_id = j.id;

Pourquoi : 6 × 10 = 60 lignes absurdes, et des millions sur de vraies tables.

Filtrer la droite dans WHERE après un LEFT JOIN

À éviter

LEFT JOIN resultats r ON r.joueur_id = j.id WHERE r.precision > 80

À faire

LEFT JOIN resultats r ON r.joueur_id = j.id AND r.precision > 80

Pourquoi : Le WHERE élimine les NULL et transforme le LEFT JOIN en jointure interne.

Colonne ambiguë

À éviter

SELECT id FROM joueurs JOIN resultats …

À faire

SELECT j.id FROM joueurs j JOIN resultats r …

Pourquoi : Si deux tables ont la colonne, la base ne sait pas laquelle choisir.

5Subtilités à connaître

  • ◆L'ordre des JOIN n'influe pas sur le résultat d'une jointure interne, seulement sur la lisibilité ; pour un LEFT JOIN, il compte.
  • ◆USING (colonne) abrège ON a.colonne = b.colonne quand les deux colonnes ont le même nom.
  • ◆Une jointure sur une colonne non indexée oblige à relire toute la table : on indexe les clés étrangères interrogées.

6Vérifie ta compréhension

Question 1/3

Score 0

Pour garder les joueurs sans résultat…

Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.