Adloun

mathématiques appliquées (ECG 2e année) · Chapitre 13 · Exercice

Une jointure filtrée

Bases de données et travaux pratiques · Interroger une base · niveau 2

É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 NOT.

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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre