Concevoir un schéma, puis l'interroger
Exercice d'entraînement · niveau 3 (difficile) · mathématiques (ECT 2e année), chapitre 12 — Informatique et travaux pratiques · Bases de données
Énoncé
Une entreprise veut enregistrer ses employés et les services auxquels ils appartiennent. Écrire 1. la création des deux tables service et employe, en désignant clé primaire et clé étrangère, 2. l'insertion d'un service, 3. la requête affichant le nom de chaque employé avec le nom de son service, pour les seuls salaires supérieurs à .
Corrigé
1. Les deux tables. Un service est identifié par un entier ; un employé est identifié par son matricule et rattaché à un service par un champ qui reprend la clé primaire de service :
CREATE TABLE service (
id INTEGER PRIMARY KEY,
nom TEXT
);
CREATE TABLE employe (
matricule INTEGER PRIMARY KEY,
nom TEXT,
id_service INTEGER,
salaire INTEGER
);
Ici service.id et employe.matricule sont les clés primaires ; le champ employe.id_service est la clé étrangère qui relie les deux tables. C'est lui, et lui seul, qui rendra la jointure possible.
2. L'insertion.
INSERT INTO service VALUES (1, 'Comptabilite');
Les valeurs sont données dans l'ordre des champs déclarés, et le texte est entre apostrophes.
3. La requête.
SELECT employe.nom, service.nom FROM employe
INNER JOIN service ON employe.id_service = service.id
WHERE employe.salaire > 3000;
Pourquoi les préfixes sont indispensables ici. Les deux tables ont chacune un champ appelé nom : sans le préfixe, le système ne saurait pas duquel il s'agit. On écrit donc systématiquement table.champ dès qu'une jointure est en jeu.
L'ordre des clauses. FROM, puis INNER JOIN ... ON, puis WHERE : on constitue d'abord le tableau rapproché, on en retire ensuite les lignes non voulues.
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.