Adloun

Deux tables et une jointure filtrée

Exercice · niveau 2 · mathématiques (ECT 2e année), chapitre 12 — Informatique et travaux pratiques · Bases de données

Énoncé

Une entreprise gère deux tables : produit, de champs ref (entier), libelle (texte) et prix (entier), et vente, de champs id, ref_produit et quantite, tous entiers. Écrire la création de la table produit, la requête affichant le libellé et la quantité de chaque vente, puis la même restreinte aux produits de prix supérieur à .

Corrigé

La création. Le champ ref identifie une ligne sans ambiguïté : c'est la clé primaire. Les domaines sont INTEGER pour les entiers et TEXT pour les chaînes.

CREATE TABLE produit (
    ref INTEGER PRIMARY KEY,
    libelle TEXT,
    prix INTEGER
);

La jointure. Le champ ref_produit de la table vente reprend la clé primaire de produit : c'est une clé étrangère, et c'est elle qui rend le rapprochement possible.

SELECT produit.libelle, vente.quantite FROM vente
INNER JOIN produit ON vente.ref_produit = produit.ref;

La restriction. On ajoute une condition sur les lignes retenues :

SELECT produit.libelle, vente.quantite FROM vente
INNER JOIN produit ON vente.ref_produit = produit.ref
WHERE produit.prix > 100;

Ne pas confondre les deux conditions. ON dit comment relier les deux tables — l'égalité des clés, sans laquelle la jointure n'aurait aucun sens. WHERE dit quelles lignes garder une fois le rapprochement fait.

Le point à retenir. Le prix est écrit une seule fois, dans la table produit, jamais recopié dans chaque vente : c'est tout l'intérêt du modèle relationnel, et la jointure en est le prix.

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.