Exercice 1 Métropole – Bac NSI 2025 – Jour 1

🔥🔥🔥🔥🔥
Cet exercice porte sur les bases de données relationnelles et les requêtes SQL. Le guitariste Slash possède une incroyable collection de guitares. Maud est une grande fan de Slash. Elle décide de faire un inventaire de la collection de guitares sous la forme d'une base de données relationnelle.

mots clés: bases de données, SQL

🔎 Voir les exercices similaires ↓

📘 Sujet PDF

Métropole – Bac NSI 2025 – Jour 1 Énoncé de l'exercice 1

Cet exercice porte sur les bases de données relationnelles et les requêtes SQL.

Dans cet exercice, on pourra utiliser les clauses du langage SQL pour :

  • construire des requêtes d’interrogation à l’aide de SELECT, FROM, WHERE (avec les opérateurs logiques AND, OR), JOIN ... ON ;

  • construire des requêtes d’insertion et de mise à jour à l’aide de UPDATE, INSERT, DELETE ;

  • affiner les recherches à l’aide de DISTINCT, ORDER BY.

Dans un schéma relationnel, on utilisera les conventions suivantes :

  • la clé primaire d’une relation est définie par son attribut souligné ;

  • les attributs précédés de # sont les clés étrangères.

Le guitariste Slash possède une incroyable collection de guitares. Maud est une grande fan de Slash. Elle décide de faire un inventaire de la collection de guitares sous la forme d’une base de données relationnelle.

Partie A

Dans cette partie, Maud utilise la relation suivante :

inventaire (id, marque, modele, annee, num_ser, prix)

num_ser représente le numéro de série d’une guitare. Il est unique pour chaque guitare d’une même marque. Le prix est en euro.

Voici un extrait de la table inventaire.

inventaire
id marque modele annee num_ser prix
1 Gibson Les Paul Goldtop 1956 @70562 100000
2 Gibson Les Paul Goldtop 1988 81738349 20000
3 Gibson Les Paul Standard 1959 @90663 250000
4 Gibson Les Paul Standard 1987 81757532 25000
5 Fender Telecaster 1952 000230 150000
6 Fender Telecaster 1965 81345673 10000
7 Fender Stratocaster 1956 001359 200000
8 Fender Stratocaster 1965 81757532 15000
  1. Expliquer pourquoi l’attribut num_ser ne peut pas être une clé primaire de la relation inventaire.

  2. Donner, sous forme de tableau, le résultat de la requête suivante appliquée à l’extrait de table précédent.

SELECT marque, modele
FROM inventaire
WHERE annee = 1956
  1. Écrire une requête SQL permettant d’obtenir toutes les années du modèle Les Paul Standard dans la collection.

  2. Écrire une requête SQL permettant d’obtenir tous les modèles de guitares de la marque Gibson par ordre croissant de l’année dans la collection.

  3. Maud a fait une erreur de saisie pour la guitare d’identifiant id=1. L’année est en réalité 1957. Écrire une requête SQL permettant de corriger cette erreur de saisie.

Partie B

Maud change de représentation pour l’inventaire de la collection. Dans cette partie, Maud utilise maintenant les trois relations suivantes :

marque (id, nom)
modele (id, nom, #id_marque)
guitare (id, #id_modele, annee, num_ser, prix)

Dans la relation modele, #id_marque est une clé étrangère reliée à la clé primaire id de la relation marque. Dans la relation guitare, #id_modele est une clé étrangère reliée à la clé primaire id de la relation modele. Voici des extraits des trois tables marque, modele, guitare.

marque
idnom
1Gibson
2Fender
modele
idnomid_marque
1Les Paul Goldtop1
2Les Paul Standard1
3Telecaster2
4Stratocaster2
guitare
id id_modele annee num_ser prix
1 1 1956 @70562 100000
2 1 1988 81738349 20000
3 2 1959 @90663 250000
4 2 1987 81757532 25000
5 3 1952 000230 150000
6 3 1965 81345673 10000
7 4 1956 001359 200000
8 4 1965 81757532 15000
  1. Expliquer brièvement, en justifiant, dans quel ordre les trois tables doivent être créées.

  2. Écrire une requête SQL permettant d’obtenir le numéro de série et l’année de toutes les guitares Les Paul Standard de la collection.

Maud vient d’apprendre que Slash a fait cadeau d’une de ses guitares à un ami. Elle doit donc la retirer de sa base de données.

  1. Écrire une requête SQL permettant de retirer de la collection la guitare d’identifiant id=3.

Slash a aussi acheté une guitare d’une marque qu’il n’avait pas encore dans sa collection. Maud décide de la rajouter.

  1. Écrire l’ensemble des requêtes SQL permettant d’ajouter la guitare suivante :

    • marque : BC Rich

    • modèle : Mockingbird

    • année : 1992

    • numéro de série : 92R ;

    • prix : 5000.

On supposera que l’on peut attribuer la valeur 3 pour l’attribut id dans la table marque pour la marque BC Rich, que l’on peut attribuer la valeur 5 pour l’attribut id dans la table modele pour le modèle Mockingbird et que l’on peut attribuer la valeur 9 pour l’attribut id dans la table guitare pour cette guitare.

Maud souhaite connaître la valeur totale des modèles Stratocaster de la collection. Son ami David lui conseille de regarder la fonction SUM. La syntaxe pour utiliser cette fonction SQL peut être similaire à celle-ci :

SELECT SUM(nom_colonne)
FROM tab

Cette requête SQL permet de calculer la somme des valeurs contenues dans la colonne nom_colonne de la table tab.

  1. Écrire une requête SQL permettant de calculer la valeur totale des modèles Stratocaster de la collection de Slash.

▶✅ Correction (cliquer pour afficher) PDF

Métropole – Bac NSI 2025 – Jour 1 Correction de l'exercice 1

Partie A

1. Clé primaire

L’attribut num_ser ne peut pas être une clé primaire car il n’est unique que pour une même marque. Or une clé primaire doit être unique sur toute la relation.

Exemple dans l’extrait : le numéro 81757532 apparaît deux fois (id 4, Gibson, et id 8, Fender).

2. Résultat de la requête

La requête sélectionne la marque et le modèle des guitares de l’année 1956 :

marque modele
Gibson Les Paul Goldtop
Fender Stratocaster

3. Années des modèles Les Paul Standard

SELECT annee FROM inventaire
WHERE modele = 'Les Paul Standard';

4. Modèles Gibson par ordre croissant d’année

SELECT modele FROM inventaire
WHERE marque = 'Gibson'
ORDER BY annee;

5. Correction de l’année (id = 1)

UPDATE inventaire SET annee = 1957
WHERE id = 1;

Partie B

6. Ordre de création des tables

Il faut créer les tables dans l’ordre marque, puis modele, puis guitare : une clé étrangère doit référencer une clé primaire d’une table qui existe déjà (modele référence marque, guitare référence modele).

7. Numéro de série et année des Les Paul Standard

SELECT guitare.num_ser, guitare.annee
FROM guitare
JOIN modele ON guitare.id_modele = modele.id
WHERE modele.nom = 'Les Paul Standard';

8. Suppression de la guitare id = 3

DELETE FROM guitare WHERE id = 3;

9. Ajout de la guitare BC Rich Mockingbird

INSERT INTO marque VALUES (3, 'BC Rich');
INSERT INTO modele VALUES (5, 'Mockingbird', 3);
INSERT INTO guitare VALUES (9, 5, 1992, '92R', 5000);

10. Valeur totale des Stratocaster

SELECT SUM(prix)
FROM guitare
JOIN modele ON guitare.id_modele = modele.id
WHERE modele.nom = 'Stratocaster';

Une erreur, un oubli ? Écrivez-moi : frederic.peuriere@lfcl.pt

💻 Console Python (cliquer pour afficher)

🔎 Exercices sur des thèmes similaires