Vous êtes sur la page 1sur 8

Exercice SUCRERIE

Contexte de travail
Vous travaillez dans le cadre dun commerce de sucrerie (ce qui vous demande une grande volont
afin de ne pas entamer les stocks !). Il existe une liste des informations de la base contenant des
tables dont la description figure en annexe. La base sera cre sur MySql mais peut-tre transpose
sur dautres SGBDR. Le SQL utilis est celui fourni avec MySql, de faibles modifications permettent de
lutiliser avec dautres SGBDR.
Suite la description du travail raliser, des pistes sont donnes afin de mener bien des requtes
complexes qui sont donnes au point 4.
Toute ressemblance avec des personnes existantes ne pourraient tre que le fruit du plus pur hasard.
Les sucreries sont soit des produits courants soit de pures inventions.

Travail faire :
1. Crer la BD

2. Donner le schma relationnel correspondant cette BD


Commande (#numcom, code_v code_c date livraison, datecommande, totalht, totaltva, etat)
Cl primaire : numcom
Cl etrangere code_v en rfrence code_v de la table VENDEUR, code_c en reference
code_c de la table CLIENT
Ligne_commande (#numcom, numero_ligne reference quantit demandee)
Cl primaire : numcom, reference
Cl trangre : numcom en rfrence numcom de la table COMMANDE, reference en
rferencee reference de la Table PRODUIT
Produit (#reference designation quantite descriptif prixunitaire_ht stock poidspiece)
Cl primaire : reference
Vendeur (#code_v nom adresse cp ville telephone)
Cl primaire : code_v
Client (#code_c nom adresse cp ville telephone)
Cl primaire : code_c
3. Retrouver le MCD lorigine de cette BD

4. Les requtes
Il sagit dcrire les requtes permettant de raliser les listes ou oprations qui suivent.
1 - Clients (nom, adresse, tlphone) dont la deuxime lettre est A, la quatrime I et la
cinquime N.
2 - Numros des commandes passes par Mme RABIN (*).
SELECT numero, cl.code_c
FROM commande co, client cl
WHERE co.code_c = cl.code_c
AND nom like "RABIN%";
3 - Liste des articles (Dsignation) achets par Mme RABIN (*).

SELECT DISTINCT designation


FROM produit pr, client cl, ligne_commande lg, commande co
WHERE nom like "RABIN%"
AND co.code_c = cl.code_c
AND pr.reference = lg.reference
AND lg.numero = co.numero;
Je sais que le Montant HT des commandes inclut le transport.
4 - Montant HT (total) des commandes de Mme RABIN (*).
SELECT cl.nom, SUM(total_ht) AS Montant_HT
FROM client cl, commande co
WHERE co.code_c = cl.code_c
AND nom like "RABIN%";
5 - Montant HT (total) des commandes de Mme RABIN (*) hors transport (calcul d'aprs le
prix unitaire hors taxes des articles achets).
SELECT SUM(quantite_demande*puht) as 'montant ht'
FROM produit pr, client cl, ligne_commande lg, commande co
WHERE co.code_c = cl.code_c
AND pr.reference = lg.reference
AND lg.numero = co.numero
AND nom LIKE "RABIN%";
6 - Chiffre d'affaires total pour le mois d'octobre 2008.
SELECT SUM(total_ht) as 'chiffre d\'affaire'
FROM commande co
where month(date_commande) = 10
and year(date_commande) = 2008;
7 - Chiffre d'affaires de chaque vendeur pour le mois d'octobre 2008 (Nom du vendeur, CA).
SELECT vd.nom, SUM(total_ht) as 'chiffre d\'affaire'
FROM commande co, vendeur vd
where vd.code_v = co.code_v
and month(date_commande) = 10
and year(date_commande) = 2008
group by vd.nom;
8 - Liste des chiffres d'affaires quotidiens suprieurs 300 (date, CA journalier) d'aprs les
dates de commande.
SELECT DISTINCT date_commande as date, SUM(total_ht) as ca
FROM commande
GROUP BY date_commande
HAVING SUM(total_ht)>300;
10 - Crer une table commission qui contiendrait un code, un libell de cette commission,
un pourcentage entier qui correspondrait la commission verse.
create table commission
(code int(4),
libelle varchar(25),
pourcentage_commi int(3),
constraint pk_commi primary key(code)
)ENGINE=InnoDB;
11 - Que doit-on modifier dans la base pour que cette table permette d'allouer une
commission et une seule chaque vendeur suivant le code commission, indiquer les
requtes permettant de raliser cet objectif (champ supplmentaire, relation, index).
Pour que chaque vendeur ait une commision, il faudra crer une cl trangre dans la table
vendeur (code_commi) qui fait rfrence la table commision.

ALTER TABLE vendeur


ADD code_commi int(4) ;
ALTER TABLE vendeur
ADD constraint FK_VEN_COMMI FOREIGN KEY(code_commi)
REFERENCES commission(code);
Pour supprimer :
ALTER TABLE vendeur
DROP FOREIGN KEY FK_VEN_COMMI;
Pour vrifier si cest bien supprimer :
Use information_schema ;
Desc table_constraints ;
SELECT table_name,constraint_name, constraint_type
FROM table_constraints ;
Les articles sont vendus en conditionnement d'un poids dfini (par exemple 500 grammes) ou
en conditionnement contenant un certain nombre de pices (exemple : sachet de 40
carambars), cette information figure dans le champ Quantit. Pour distinguer les types de
conditionnement on indique G ou P dans le champ Descriptif. Dans ce dernier cas, on
renseigne la colonne 'Poids pice' avec le poids d'une pice. Dans les autres cas, on
renseigne le poids pice la valeur 0 pour pouvoir effectuer des calculs sur toutes les lignes :
un calcul effectu avec une valeur non renseigne ne renvoie rien !
11bis) Afficher pour chaque produit sa rfrence et sil est vendu au poids ou la piece.
SELECT reference, IF(descriptif ='G', 'poids', 'piece') AS 'conditionnement'
FROM produit;
12 - Prix au kilogramme de chaque article class du moins coteux au plus coteux
(dsignation, prix au kilogramme).
SELECT designation,((1000*puht)/quantite)/((descriptif ='G')+(descriptif='P')* poids_piece)) as
prix
FROM produit;
Pour copier une table :
create table produit2 as SELECT * FROM produit ;
ou create table produit2 like produit ;
Pour mettre les prix en francs :
UPDATE produit2
SET puht = puht/6.56;
13 - Poids total du stock en kilogramme.
SELECT SUM(IF(descriptif = 'G', stock*quantite , poids_piece*quantite)/1000) as 'total stock'
FROM produit;
Ou
SELECT SUM((descriptif = 'G')*(quantite*stock)+(descriptif ='P')*(quantite*poids_piece))/1000
as total stock
FROM produit;
(*) : On considre que le nom RABIN n'existe qu'une seule fois.
14 Le code du client qui a pass la commande la plus chre.
15 Le nom du client qui a pass la commande la plus chre.

16 Afficher les produits qui sont au mme prix que les FRAISIBUS.

5.

Annexes
TABLE client
code_c

nom

adresse

cp

ville

telephone

17 TARINAUX
Lucien

12 rue de la Justice

51100

REIMS

03.26.25.48.87

46 MARTUSE

103 avenue Lear

51100

REIMS

03.26.03.25.26

47 RABIN Sandrine 21 rue de la Mditerrane

51100

REIMS

03.26.14.15.25

48 SILLARD
Laurence

15 rue Pasentiers

51100

REIMS

03.26.11.11.25

49 COTOY Sylvie

12 rue des cus

51100

REIMS

03.26.10.25.75

50 HELLOU
Bernard

21 rue de la Mditerrane

51100

REIMS

03.26.12.25.42

51 HENTION
Martine

50 alle des bons enfants

51100

REIMS

03.26.12.25.86

52 SIBAT Evelyne

14 rue de la Baltique

51100

REIMS

03.26.12.23.33

53 MARIN
Dominique

24 rue de la Baltique

51100

REIMS

03.26.10.10.23

54 DURDUX
Monique

15 alle des Barnais

51150

VITRY LE FRANCOIS

03.26.42.42.33

55 CANILLE Walter 14 rue Lanterneau

51100

REIMS

03.26.12.12.87

56 BOUQUET
Antoinette

1, rue de la Mditerrane

51140

ROMAIN

03.26.78.89.54

57 GAUTON
Nadine

5 place des Oiseaux

51200

FISMES

03.26.53.56.55

58 LEGROS
Christian

18 place des Oiseaux

51200

FISMES

03.26.44.55.66

59 DUMOITIERS
Lucille

12 place Centrale

02320

LONGUEVAL

03.26.86.43.25

60 BOUCHE
Carole

4, rue Brul

51200

FISMES

03.26.33.96.85

TABLE commande
numero

code_v

code_c

date_livraison

date_commande

total_ht

total_tva

etat

10178

15

47

05/09/2008

05/09/2008

177.00

9.75

10179

15

47

13/10/2008

13/10/2008

192.00

10.50

10180

15

48

10/10/08

10/10/2008

98.00

5.40

10181

15

49

11/10/08

11/10/2008

175.00

9.60

10182

15

50

11/10/08

11/10/08

116.00

6.40

10183

15

51

11/10/08

11/10/08

118.00

6.50

10184

15

52

12/10/08

12/10/08

102.00

5.60

10185

15

53

12/10/08

12/10/08

19.00

1.05

10186

15

54

10/10/08

10/10/08

101.00

5.55

10187

15

55

10/10/08

10/10/08

65.00

3.58

10188

17

56

12/10/08

12/10/08

121.00

6.66

10189

17

57

10/10/08

10/10/08

110.00

6.05

10190

17

58

13/10/08

13/10/08

123.00

6.76

10191

17

59

13/10/08

13/10/08

107.50

5.91

10192

17

60

10/11/08

10/11/08

237.00

13.04

TABLE ligne_commande
numero
10188
10179
10191
10191
10188
10186
10189
10192
10186
10192
numero
10192
10190
10180
10192
10179
10185
10181
10184
10178
10187
10187
10182
10181
10183
10191
10178
10187
10190
10189
10192
10181
10192
10183
10178
10192
10184
10181
10183
10183
10192
10179
10178
10189
10184
10192
10179

numero_ligne
3
7
4
1
1
1
1
3
2
9
numero_ligne
4
1
3
6
4
1
4
3
5
2
3
2
5
5
3
1
1
2
2
10
1
7
1
2
1
1
2
2
3
2
1
3
3
2
5
2

reference

quantite_demandee

1004
1007
1015
1016
1016
1016
1017
1017
3002
3004
reference
3016
3010
3016
3017
4002
4002
4002
4004
4004
4010
4011
4012
4012
4013
4013
4015
4015
4015
4016
4019
4020
4022
4025
4025
4025
4025
4026
4027
4029
4030
4031
4031
4031
4031
4031
4032

1
2
1
1
2
1
1
1
2
1
quantite_demandee
1
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1

10190
10189
10182
10178
10179
10183
10178
10181
10191
10192
10188
10178
10180
10190
10179
10181
10182
10180
10179
10182

3
4
1
4
3
4
7
3
2
8
2
6
1
4
5
6
3
2
6
4

4032
4033
4034
4036
4037
4039
4042
4045
4052
4052
4052
4053
4053
4053
4054
4054
4055
4055
4057
4057

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

TABLE produit
reference

designation

quantite

1004
1007
1015
1016
1017
3002
3004
3010
3016
3017
4002
4004
4010
4011
4012
4013
4015
4016
4019
4020
4022
4025

FEU DE JOIE LIQUEUR ASSORT.


TENDRE FRUIT
CARACAO
COKTAIL
ORFIN
CARRE PECTO
ZAN ALESAN
PATES GRISES
CARAMEL AU LAIT
VIOLETTE TRADITION
SUCETTE BOULE FRUIT
SUCETTE BOULE POP
CARAMBAR
CARANOUGA
CARAMBAR FRUIT
CARAMBAR COLA
SOURIS REGLISSE
SOURIS CHOCO
SCHTROUMPFS VERTS
CROCODILE
PERSICA
COLA CITRIQUE

4026
4027
4029
4030
4031
4032
4033
4034
4036
4037
4039
4042
4045
4052
4053
4054
4055
4057

COLA LISSE
BANANE
OEUF SUR LE PLAT
FRAISIBUS
FRAISE TSOIN-TSOIN
METRE REGLISSE ROULE
MAXI COCOBAT
DENTS VAMPIRE
LANGUE COLA CITRIQUE
OURSON CANDI
SERPENT ACIDULE
TETINE CANDI
COLLIER PECCOS
TWIST ASSORTIS
OURSON GUIMAUVE
BOULE COCO MULER
COCOMALLOW
CRIC-CRAC

descriptif

prix_unitaire_ht

stock

poids_piece

500
500
500
500
500
500
25
500
500
500
25
25
40
40
40
40
500
500
500
500
500
500

G
G
G
G
G
G
P
G
G
G
P
P
P
P
P
P
G
G
G
G
G
G

23.00
18.00
24.50
33.00
32.00
29.00
15.00
35.00
20.00
25.00
14.00
21.00
18.00
18.00
18.00
18.00
24.00
24.00
24.00
21.00
28.00
21.00

50
120
50
40
40
40
50
100
100
100
100
50
20
100
100
50
50
50
50
50
20
50

0
0
0
0
0
0
20
0
0
0
40
40
15
15
15
15
0
0
0
0
0
0

500
1000
500
500
500
500
1000
500
500
1000
500
500
15
500
500
500
500
500

G
G
G
G
G
G
G
G
G
G
G
G
P
G
G
G
G
G

25.00
23.00
25.00
25.00
25.00
19.00
19.00
22.00
21.00
21.00
21.00
20.00
21.00
22.00
35.00
34.00
33.00
33.00

50
20
20
50
40
50
20
50
40
50
20
40
50
50
10
10
10
10

0
0
0
0
0
0
0
0
0
0
0
0
50
0
0
0
0
0

TABLE vendeur
code_v

nom

adresse

cp

ville

telephone

15 FILLARD Sylvain

77 rue du l'Adriatique

51100

REIMS

03.26.12.25.25

17 BAUDOT Marc

16 rue de Reims

51000

CHALONS EN CHAMPAGNE

03.26.10.58.59