4 octobre 2021
durée : 3h
On s'intéresse aux données de la gestion commerciale d'une petite boutique de jouets en bois.
I. Examinez attentivement les fichiers de données suivants pour comprendre les relations qui les lient.
produits.csv, clients.csv, Commande.csv, ligneCommande.csv
Créez un modèle conceptuel de données avec Looping ou tout autre outil à votre convenance. Enregistrez votre modèle au format .loo ou réalisez une copie d'écran.
II. Connectez-vous au serveur de bases de données avec cette interface WEB :
https://dixit.aricia.fr/phpMyAdmin
Votre nom d'utilisateur est votre NOM de famille (en majuscules) et votre mot de passe est votre PRENOM (en majuscule sans accents).
Vous avez alors accès à une base de données qui porte votre nom.
Tout d'abord, modifiez votre mot de passe pour éviter que vos condisciples puissent accéder à votre base de données
III. Créez les tables issues de votre modèle conceptuel de données, puis importez les données à partir des fichiers .csv
Attention, la première ligne de ces fichiers décrit les colonnes ; pensez à paramétrer l'importation pour que cette première ligne ne soit pas traitée
IV. Ecrivez des requêtes permettant de
Le code SQL de chacune de ces requêtes devra être copié dans un fichier texte, en précisant avant chaque requête, le numéro de la question.
Ce fichier texte sera à rendre.
On trouve dans la table "produits" et dans la table "ligneCommande" des champs relatifs au prix de vente. Il y a là une certaine redondance. Expliquez, dans votre fichier texte, en quoi cette redondance peut être utile.
Créez une archive zip contenant le modèle conceptuel de votre base de données et le fichier texte de vos requêtes et vos commentaires, et envoyez l'archive zip à l'adresse
Modèle conceptuel de données
Code SQL de création des tables :
CREATE TABLE Client(numClient INT, civilite VARCHAR(50), nom VARCHAR(50), prenom VARCHAR(50),
adresse VARCHAR(150), codepostal CHAR(7), ville VARCHAR(50), pays VARCHAR(50),
PRIMARY KEY(numClient));
CREATE TABLE Produit(numProduit INT, famille VARCHAR(50), nom VARCHAR(50), prixHT DECIMAL(15,2),
prixPromoHT DECIMAL(15,2), TVA DECIMAL(15,2), designation VARCHAR(250), PRIMARY KEY(numProduit));
CREATE TABLE Commande(numCommande INT, dateCommande DATE, numClient INT NOT NULL,
PRIMARY KEY(numCommande), FOREIGN KEY(numClient) REFERENCES Client(numClient));
CREATE TABLE ligneCommande(numProduit INT, numCommande INT, prixTTC DECIMAL(15,2), quantite INT,
PRIMARY KEY(numProduit, numCommande), FOREIGN KEY(numProduit) REFERENCES Produit(numProduit),
FOREIGN KEY(numCommande) REFERENCES Commande(numCommande));
Question 1
SELECT * FROM produit ORDER BY prixHT DESC
Question 2
SELECT * FROM clientele WHERE pays<>"France"
Question 3
SELECT sum(prixTTC*Quantite) FROM ligneCommande,Commande WHERE ligneCommande.Commande=Commande.NumeroCommande and year(Date_commande)=2019
Question 4
SELECT NumProduit,titre FROM clientele, Commande, ligneCommande, produit WHERE clientele.Nom="Fostinelli" AND clientele.Prenom="Jérome" AND clientele.NumClient=Commande.NumeroClient and Commande.NumeroCommande=ligneCommande.Commande and ligneCommande.Produit=produit.NumProduit
Question 5
SELECT DISTINCT nom,prenom FROM clientele, Commande, ligneCommande, produit WHERE produit.titre="Corde à sauter" AND clientele.NumClient=Commande.NumeroClient and Commande.NumeroCommande=ligneCommande.Commande and ligneCommande.Produit=produit.NumProduit
Question 6
SELECT sum(ligneCommande.prixTTC*ligneCommande.Quantite),produit.famille FROM ligneCommande,produit WHERE ligneCommande.Produit=produit.NumProduit GROUP BY produit.famille
Question 7
SELECT SUM(Quantite) AS SOMME,titre FROM ligneCommande,produit WHERE produit.NumProduit=ligneCommande.Produit GROUP BY ligneCommande.Produit ORDER BY SOMME DESC
Question 8
SELECT produit.titre FROM produit WHERE produit.NumProduit NOT IN (SELECT ligneCommande.Produit FROM ligneCommande)
Question 9
SELECT AVG(somme) FROM (SELECT sum(ligneCommande.prixTTC*ligneCommande.Quantite) as somme FROM ligneCommande GROUP by ligneCommande.Commande) AS PANIER
Question 10
UPDATE produit SET prixPromoHT=prixHT/1.2 WHERE famille="poupées"
La table ligneCommande contient le prix de vent du produit au moment de l'achat, alors que la table produit contient le prix de vente actuel. Entre temps, ce prix a pu changé ; il est donc indispensable d'enregistrer le prix de vente au moment de l'achat.