Une jointure filtrée
Exercice · niveau 2 · mathématiques appliquées (ECG 2e année), chapitre 13 — Bases de données et travaux pratiques · Interroger une base
Énoncé
La table client a pour champs id, nom et ville ; la table commande a pour champs id, client_id et montant. Écrire la requête donnant le nom du client et le montant, pour les seules commandes de plus de euros passées par un client habitant Lyon.
Corrigé
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 des clauses n'est pas décoratif. La jointure se fait d'abord : 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 permet de filtrer sur ville, un champ qui n'existe pas dans commande.
Le préfixe est obligatoire ici. Les deux tables possèdent un champ id : écrire id tout court serait ambigu. On préfixe donc systématiquement, client.nom et commande.montant, même quand le nom ne prête pas à confusion.
Deux points de syntaxe. La chaîne 'Lyon' est entre apostrophes simples, et le connecteur logique s'écrit AND — le programme n'en retient que AND, OR et NO.
Le point à retenir. Une requête se lit dans l'ordre : de quelle table (FROM), recollée comment (INNER JOIN … ON), en gardant quelles lignes (WHERE), pour afficher quelles colonnes (SELECT). L'écriture, elle, commence par la fin.
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.