Vous êtes sur la page 1sur 9

Exonet 30 version 1.

Proprits

Description

Intitul long

Pratique d'interrogation de base de donnes.

Formation
concerne

Section de TS Service Informatique aux Organisations 1re anne.


(ventuellement classe de terminale Sciences et technologies de la gestion
(STG))

Matire

Conception et maintenance de solutions applicatives.

Prsentation

A travers une base de donnes relationnelle, effectuer des requtes de


manipulation puis de dfinition dans le cadre de lextension de cette base.
Approche progressive avec aide adapte pour travail en autonomie.

Notions

Base de donnes, clauses SQL, manipulation de donnes.

Transversalit

Inscrit dans tout processus de traitement de l'information.

Pr-requis

Notions lmentaires lies au systme de gestion de bases de donnes


relationnelles,

Outils

Access, Postgresql (autre SGBD en adaptant le script Postgresql)

Mots-cls

SQL, PostgreSQL, Access

Dure

2 4H si mise en pratique.

Auteur

Fabio PASQUALINI

Version

1.3

Date de
publication

10 avril 2011

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 base contenant des tables dont la description figure
en annexe. La base est ralise sous Access (fichier joint) mais peut-tre transpose sur dautres
SGBDR. Le SQL utilis est celui fourni avec Access, de faibles modifications permettent de lutiliser
avec dautres SGBDR. Un script de cration de la base sous PostgreSQL est fourni en fichier joint.
Suite la description du travail raliser, des pistes sont donnes afin de mener bien les requtes
qui vous semblent complexes. Ces pistes ne sont utiliser quen dernier recours : aprs avoir essay
de trouver en saidant de ses connaissances, aprs avoir consult laide en ligne mais sans avoir
demand votre voisin (o est le plaisir de la copie quand on connat le plaisir de la dcouverte !).
Il est possible de travailler directement sur Access ou de travailler sur feuille en TD. En cas de
ralisation pratique, il faut toujours dbuter par ouvrir sa requte en mode SQL : le mode cration ne
permet pas lcriture dun code SQL standard : le rsultat fourni alors est loin du rsultat escompt.
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.

http://www.reseaucerta.org

CERTA - avril 2011 v1.2

Page 1/9

Questions
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 (*).
3 - Liste des articles (Dsignation) achets par Mme RABIN (*).
Je sais que le Montant HT des commandes inclut le transport.
4 - Montant HT (total) des commandes de Mme RABIN (*).
5 - Montant HT (total) des commandes de Mme RABIN (*) hors transport (calcul d'aprs le prix
unitaire hors taxes des articles achets).
6 - Chiffre d'affaires total pour le mois d'octobre 2008.
7 - Chiffre d'affaires de chaque vendeur pour le mois d'octobre 2008 (Nom du vendeur, CA).
8 - Liste des chiffres d'affaires quotidiens suprieurs 300 (date, CA journalier) d'aprs les dates de
commande.
9 - Liste des produits figurant au moins dans deux commandes classe du plus sollicit au moins
sollicit (dsignation produit, nombre de fois que ce produit figure dans une commande.)
10 - Crer une table commission qui contiendrait un code, un libell de cette commission, un
pourcentage entier qui correspondrait la commission verse.
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).
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 !
12 - Prix au kilogramme de chaque article class du moins coteux au plus coteux (dsignation, prix
au kilogramme).
13 - Poids total du stock en kilogramme.
(*) : On considre que le nom RABIN n'existe qu'une seule fois.

http://www.reseaucerta.org

CERTA - avril 2011 v1.2

Page 2/9

Aide
A nutiliser quen cas de difficults !!!!
Suivent des conseils pour aider la ralisation des requtes demandes. Ces conseils ne sont
consulter quen cas de difficults.
1 Il faut utiliser des caractres gnriques : on utilise <#> en SQL standard pour remplacer nimporte
quelle chane de caractre ( <*> sous Access) et <_> pour remplacer nimporte quel caractre ( <?>
sous Access). Attention ces caractres ne sont supports que par loprateur LIKE !
2 Attention de ne pas utiliser de tables inutiles. Essayer une requte imbrique.
3 L encore, on peut faire un norme produit cartsien et des jointures ou utiliser des requtes
imbriques. Essayer de trouver la solution par tapes : dabord le code client de Mme RABIN, puis les
commandes quelle a passes, etc. Vous aurez besoin de loprateur IN, bien distinguer de = (votre
requte imbrique renvoie-t-elle une ligne ou plusieurs ?).
4 On a besoin de client et commande .
5 Il faut utiliser, entre autres, la table article qui est la seule contenir le prix unitaire hors taxes.
Vous aurez besoin de multiplier puis deffectuer une somme (fonction de regroupement). Un produit
cartsien est invitable.
6 Les dates sous Access sencadrent du signe <#> : #10/10/2008#. Vous effectuez des oprations
de comparaison sur les dates peu prs de la mme faon que sur les nombres. Vous pouvez aussi
utiliser des fonctions spcifiques aux dates. Attention, les dates sont parfois au format amricain
MM/JJ/AA. Il faut utiliser une fonction de regroupement.
7 Il faut faire DES regroupements. Attention, la clause GROUP BY vient toujours aprs la clause
WHERE.
8 La clause HAVING sera utile.
9 La clause ORDER BY vient en dernier. On peut remplacer le nom de la colonne trie par son
numro dordre : ORDER BY 3.
10 On peut ajouter une contrainte directement sur le champ dsir (NOT NULL, PRIMARY KEY). Il
faut nommer cette contrainte.
11 Commencer par ajouter un nouveau champ (dans quelle table ?). Puis tablir la relation en
indiquant que lon utilise une cl trangre. ventuellement on peut aussi crer un index sur ce
champ.
12 et 13 Il faut utiliser ici une formule qui permet deffectuer deux calculs distincts suivant les
deux cas qui se prsentent : valeur P ou G du Descriptif. Il faut savoir que (a < 10) renvoie la valeur 0
si cest faux et 1 si cest vrai. On peut alors utiliser loprateur de comparaison comme nimporte quel
oprateur qui renvoie une valeur numrique. Si on le souhaite, on peut mettre en facteurs la formule.

http://www.reseaucerta.org

CERTA - avril 2011 v1.2

Page 3/9

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 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

51200

FISMES

03.26.33.96.85

4, rue Brul

TABLE commande
numero

code_v

code_c

date_livraison

date_commande

total_ht

total_tva

etat

10178

15

47

05/09/08

05/09/08

177.00

9.75

10179

15

47

13/10/08

13/10/08

192.00

10.50

10180

15

48

10/10/08

10/10/08

98.00

5.40

10181

15

49

11/10/08

11/10/08

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_ligne
3
7
4
1
1
1
1
3
2
9

http://www.reseaucerta.org

reference
1004
1007
1015
1016
1016
1016
1017
1017
3002
3004

quantite_demandee
1
2
1
1
2
1
1
1
2
1

CERTA - avril 2011 v1.2

Page 4/9

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
10190
10189
10182
10178
10179
10183
10178
10181
10191
10192
10188
10178
10180
10190
10179
10181
10182
10180
10179
10182

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
3
4
1
4
3
4
7
3
2
8
2
6
1
4
5
6
3
2
6
4

http://www.reseaucerta.org

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
4032
4033
4034
4036
4037
4039
4042
4045
4052
4052
4052
4053
4053
4053
4054
4054
4055
4055
4057
4057

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
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

CERTA - avril 2011 v1.2

Page 5/9

TABLE produit
reference
1004
1007
1015
1016
1017
3002
3004
3010
3016
3017
4002
4004
4010
4011
4012
4013
4015
4016
4019
4020
4022
4025
4026
4027
4029
4030
4031
4032
4033
4034
4036
4037
4039
4042
4045
4052
4053
4054
4055
4057

designation

quantite

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
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

500
500
500
500
500
500
25
500
500
500
25
25
40
40
40
40
500
500
500
500
500
500
500
1000
500
500
500
500
1000
500
500
1000
500
500
15
500
500
500
500
500

descriptif

prix_unitaire_ht

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

stock

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
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

poids_piece

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

0
0
0
0
0
0
20
0
0
0
40
40
15
15
15
15
0
0
0
0
0
0
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

http://www.reseaucerta.org

CERTA - avril 2011 v1.2

Page 6/9

Corrig
La correction tient compte de la syntaxe utilise par Access.
Question 1
SELECT nom, adresse,
cp, ville, telephone
FROM client
WHERE nom LIKE "?A?IN*";
Question 2
SELECT numero
FROM commande
WHERE code_c =
(SELECT code_c
FROM client
WHERE nom LIKE "RABIN *");
Question 3
SELECT designation AS [Articles achets par Mme RABIN]
FROM produit
WHERE reference IN
(SELECT reference
FROM ligne_commande
WHERE numero IN
(SELECT numero
FROM commande
WHERE code_c =
(SELECT code_c
FROM client
WHERE nom LIKE "RABIN *")));
Question 4
SELECT Sum(total_ht) AS [Montant HT Mme RABIN]
FROM commande
WHERE commande.code_c=
(SELECT code_c
FROM client
WHERE nom LIKE "RABIN *");
Question 5
SELECT Sum(quantite_demandee*prix_unitaire_HT) AS [Montant HT Mme RABIN]
FROM ligne_commande, produit
WHERE produit.reference=ligne_commande.reference
AND numero IN
(SELECT numero
FROM commande
WHERE code_c=
(SELECT code_c
FROM client
WHERE nom Like "RABIN *"));

http://www.reseaucerta.org

CERTA - avril 2011 v1.2

Page 7/9

Question 6
SELECT SUM(total_ht) AS [Total octobre 2008]
FROM commande
WHERE date_commande Between #01/10/2008# And #31/10/2008#;
Question 7
SELECT nom, SUM(total_ht) AS [Total octobre]
FROM commande, vendeur
WHERE DatePart("m",date_commande)=10
AND DatePart("y",date_commande)=2008
AND commande.code_v=vendeur.code_v
GROUP BY nom;
Question 8
SELECT date_commande,
Sum(total_ht) AS [CA journalier suprieur 300]
FROM commande
GROUP BY date_commande
HAVING Sum(total_ht)>300;
Question 9
SELECT designation, Count(ligne_commande.reference)
FROM ligne_commande, produit
WHERE produit.reference=ligne_commande.reference
GROUP BY designation
HAVING Count(ligne_commande.reference)>=2
ORDER BY 2 DESC;
Question 10
CREATE TABLE commission
(
code_commission
INTEGER CONSTRAINT pk_code_com PRIMARY KEY,
libelle
VARCHAR(30),
pourcentage
INTEGER
);
Question 11
ALTER TABLE vendeur
ADD COLUMN code_commission INTEGER
CONSTRAINT nn_comm NOT NULL;
Les lignes dj existantes contenant une valeur nulle ne satisferont pas la contrainte, toutefois, la
contrainte ne sappliquant quau cours de lenregistrement dune ligne, les valeurs nulles dj
existantes seront acceptes.
ALTER TABLE vendeur
ADD CONSTRAINT fk_comm
FOREIGN KEY (code_commission)
REFERENCES commission (code_commission);
On pourra vrifier la cration de cette contrainte dans la fentre relations.
CREATE INDEX idx_comm
ON vendeur (code_commission)
WITH IGNORE NULL;
La clause IGNORE NULL permet de ne pas tenir compte des valeurs nulles dans lindex rendant
ainsi obligatoire de mettre jour les lignes non respectueuses de la contrainte NOT NULL.

http://www.reseaucerta.org

CERTA - avril 2011 v1.2

Page 8/9

Question 12
SELECT designation,
((-1000*prix_unitaire_HT) / quantite) / ((descriptif="G") + ((descriptif="P") * poids_piece))
AS [Prix au kilo]
FROM produit
ORDER BY 2;
Il faut sassurer quaucune division par zro ne se fera.
Question 13
SELECT SUM(((((descriptif="G")*quantite)
+ ((descriptif="P")*quantite*poids_piece))*Stock)) / 1000
AS [Poids total en kg]
FROM produit;
Il est prfrable de diviser par 1000 la fin du traitement.

http://www.reseaucerta.org

CERTA - avril 2011 v1.2

Page 9/9