Trois requêtes à lire, dont une fautive
Exercice d'entraînement · niveau 2 · mathématiques (ECT 2e année), chapitre 12 — Informatique et travaux pratiques · Bases de données
Énoncé
Une base contient article (ref, libelle, prix) et vente (num, ref_article, quantite). Dire ce qu'affiche chaque requête, et repérer la fautive. 1. SELECT libelle FROM article WHERE prix > 100; 2. SELECT <em> FROM vente INNER JOIN article ON vente.ref_article = article.ref; 3. SELECT </em> FROM vente INNER JOIN article;
Corrigé
Requête 1 : correcte. Elle porte sur une seule table. SELECT choisit la colonne à afficher, FROM la table où la prendre, WHERE les lignes à garder. Elle affiche donc le libellé des articles dont le prix dépasse .
Requête 2 : correcte. C'est une jointure. La clause ON dit comment relier les tables : le champ ref_article de vente reprend la clé primaire ref de article — c'est une clé étrangère. Chaque ligne du résultat associe une vente à l'article vendu, avec tous les champs des deux tables.
Requête 3 : fautive. Il manque la clause ON. Sans elle, la jointure ne sait pas quelles lignes de vente correspondent à quelles lignes de article : la requête est rejetée, ou, selon le système, rapproche toutes les lignes avec toutes les autres — un tableau dénué de sens et de taille énorme.
La correction.
SELECT article.libelle, vente.quantite FROM vente
INNER JOIN article ON vente.ref_article = article.ref;
Ce qu'il faut retenir. ON dit comment relier les tables ; WHERE dit quelles lignes garder. Une jointure sans ON n'est pas une jointure.
Le contrôle à faire. Le nombre de lignes d'une jointure sur une clé étrangère doit être celui de la table qui porte cette clé — ici, le nombre de ventes.
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.