Adloun

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 :

idnomville
1DurandLyon
2PetitNantes
3NguyenLyon

commande :

idclient_idmontant
101120
11180
122200
133150

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 :

idnomvillemontant
10DurandLyon120
11DurandLyon80
12PetitNantes200
13NguyenLyon150

Le filtrage. On applique les deux conditions, reliées par AND — donc toutes deux nécessaires.

Le résultat exact. Deux lignes, deux colonnes :

nommontant
Durand120
Nguyen150

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.