Prévoir le résultat exact d'une jointure
Exercice d'entraînement · niveau 3 (difficile) · mathématiques appliquées (ECG 2e année), chapitre 13 — Bases de données et travaux pratiques · Jointure
Énoncé
client :
| id | nom | ville |
|---|---|---|
| 1 | Durand | Lyon |
| 2 | Petit | Nantes |
| 3 | Nguyen | Lyon |
commande :
| id | client_id | montant |
|---|---|---|
| 10 | 1 | 120 |
| 11 | 1 | 80 |
| 12 | 2 | 200 |
| 13 | 3 | 150 |
Donner la requête rendant le nom et le montant des commandes de plus de euros passées par un client de Lyon, et son résultat exact.
Corrigé
La requête.
SELECT client.nom, commande.montant
FROM commande
INNER JOIN client ON commande.client_id = client.id
WHERE commande.montant > 100 AND client.ville = 'Lyon';
L'ordre de lecture. La jointure agit en premier : elle construit une table large où chaque commande porte aussi les champs de son client. C'est seulement ensuite que WHERE filtre les lignes de cette table large — et c'est ce qui autorise à tester client.ville, un champ absent de commande.
La table large, avant filtrage. Les quatre commandes trouvent toutes leur client :
| id | nom | ville | montant |
|---|---|---|---|
| 10 | Durand | Lyon | 120 |
| 11 | Durand | Lyon | 80 |
| 12 | Petit | Nantes | 200 |
| 13 | Nguyen | Lyon | 150 |
Le filtrage. On applique les deux conditions, reliées par AND — donc toutes deux nécessaires.
- Ligne : Lyon et — retenue.
- Ligne : Lyon, mais — écartée.
- Ligne : , mais Nantes — écartée.
- Ligne : Lyon et — retenue.
Le résultat exact. Deux lignes, deux colonnes :
| nom | montant |
|---|---|
| Durand | 120 |
| Nguyen | 150 |
Deux points d'écriture. Les deux tables possèdent chacune un champ id : sans préfixe, id serait ambigu. On préfixe donc systématiquement, client.nom et commande.montant. Et la chaîne 'Lyon' s'écrit entre apostrophes simples.
Le piège. Chacune des deux conditions prise seule laisserait passer trois lignes. C'est leur conjonction qui n'en garde que deux — remplacer AND par OR donnerait ici quatre lignes, soit toute la table.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.