Recoller deux tables
Exercice supplémentaire · niveau 1 (application) · mathématiques appliquées (ECG 2e année), chapitre 13 — Bases de données et travaux pratiques · Une jointure
É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 chaque commande.
Corrigé
La requête.
SELECT client.nom, commande.montant
FROM commande
INNER JOIN client ON commande.client_id = client.id;
C'est la seule jointure du programme. INNER JOIN … ON recolle chaque commande avec le client dont l'identifiant correspond. La condition après ON est une égalité entre la clef étrangère et la clef primaire ; le programme ne demande aucune autre forme de jointure.
Le préfixe est obligatoire ici. Les deux tables possèdent chacune un champ id : écrire id tout court serait ambigu. On préfixe donc systématiquement, client.nom et commande.montant, même là où le nom ne prête pas à confusion.
Ce que la requête laisse de côté. Un client qui n'a passé aucune commande n'apparaît pas dans le résultat : aucun couple ne se forme avec lui. De même, une commande dont le client_id ne correspond à personne disparaît. C'est le comportement voulu de la jointure interne — mais il faut le savoir avant de conclure « il n'y a que trois clients ».
L'ordre de lecture d'une requête. De quelle table (FROM), recollée comment (INNER JOIN … ON), 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.