Vous êtes sur la page 1sur 4

UNIVERSIT HASSAN II MOHAMMEDIA-

FACULT DES SCIENCES JURIDIQUES, CONOMIQUES ET SOCIALES

Examen du 4me semestre

Filire : Economie & Gestion


Module : Nouvelles technologies de linformation
Matire : Informatique Applique
Dure : 1h30

** Les cinq questions sont indpendantes**

Le schma simplifi dune base de donnes pour la gestion des factures, dun systme
dinformation, comprend les tables suivantes :

Ces tables sont relies entre elles par les relations suivantes :

Factures
Num_Facture
Num_Client
Date

Clients
Num_Client Dtails_Factures
Nom Num_Facture
Adresse Ref
Ville Qte
Tl
Produits
Produits
Rf
Design
PU
Qte_Disponible

1. Que se passe t-il si le champ Ref ne fait pas parti de la cl de la table Dtails_Factures ?
Mme question pour le champ Num_Facture ?

2.Que se passe t-il si on ntablit aucune relation entre la table Produits et Dtails_Factures ?

1
UNIVERSIT HASSAN II MOHAMMEDIA-
FACULT DES SCIENCES JURIDIQUES, CONOMIQUES ET SOCIALES

3.Parmi les enregistrements suivants lesquels seront rejets par le SGBD et pourquoi ?

Table : Factures Table : Dtails_Factures


Num_Factur Num_Client Date Num_Factur Ref Qte
e e
22 12 22/10/04 22 R1 54
23 12 22/10/04 22 R2 A66
23 10/10/04 22 56
25 13 22 R1 66
56 R2 80

4.Soit la requte suivante :

SELECT Factures.Num_Facture, Factures.Date, Sum([Qte]*[PU]) AS Total


FROM Produits, Factures, Dtails_Factures
WHERE Factures.num_Factures=Dtails_Factures.num_Factures and
Dtails_Factures.Ref=Produits.Ref
GROUP BY Factures.Num_Facture, Factures.Date
HAVING (Factures.Date between D1 and D2) or Sum([Qte]*[PU])>10000;

a- Quel rsultat va afficher cette requte une fois excut ?


b- Pourquoi on a introduit la jointure Dtails_Factures.Ref=Produits.Ref ?
c- Quel est le champ de la clause Select qui nous a oblig dintroduire la clause
Group by ? et pourquoi ?
d- Reformuler la requte ci-dessus pour quelle affiche le mme rsultat mais uniquement
pour les clients de la ville de casa .

5.formuler en langage SQL les requtes suivantes :

a- Afficher le nombre de factures tablis entre deux dates donnes comme paramtres.
b- Afficher pour chaque client le montant HT et le montant TTC payer par facture avec un
taux de TVA variable.
c- Afficher pour chaque produit la quantit moyenne facture, la quantit totale facture et la
Quantit_Restante. Avec Quantit_Restante = quantit total quantit disponible.
d- Afficher les factures qui comprennent tous les produits et dont le montant HT est soit
infrieur 6000 soit suprieure 14000.
e- Afficher les clients ayant au moins deux factures dont chacune contient au moins deux
produits.
f- Afficher le nombre de factures qui contiennent tous les produits.

2
UNIVERSIT HASSAN II MOHAMMEDIA-
FACULT DES SCIENCES JURIDIQUES, CONOMIQUES ET SOCIALES

Corrig et barmes
1. (1pt)
- Une facture ne peut contenir alors quun seul produit. (0,5 pt )
- Un produit ne peut tre facturer quune seule fois. (0,5 pt)
2. (1pt) On risque dtablir des factures pour des produits qui nexistent pas.
3. (3pts)
- Pour table factures :(1pt)
..3 me enregistrement car la relation entre les tables clients et factures impose
que le champ Num_Client de la table factures doit exister dans la table
Clients et comme cest la cl il ne peut pas tre vide.
- Pour table dtails_factures :(2pts)
..2me enregistrement car le champ Qte doit tre numrique (0,5 pt)
..3me enregistrement car le champ Ref fait parti de la cl et ne peut donc
pas tre vide.(0,5 pt)
..4me enregistrement car il sagit dune cl rpte(redondance). (0,5 pt)
..5me enregistrement car aucune facture na le numro 56. (0,5 pt)
4. (4,5 pts)
a- Afficher le montant total hors taxe pour les factures faites entre les
dates D1 et D2 et ayant un montant total suprieure 10000.(1 pt)
b- Pour avoir pour chaque produit factur le PU correspondant. Ainsi la
quantit Sum(Qte)*Pu aura un sens.(1 pt)
c- Cest le champ Sum(Qte)*Pu et le group by est ncessaire pour
factoriser par num_facture. (1 pt)
d- (1,5 pt)
SELECT Factures.Num_Facture, Factures.Date, Sum([Qte]*[PU]) AS Total
FROM Produits, Factures, Dtails_Factures , Clients
WHERE Factures.num_Factures=Dtails_Factures.num_Factures and
Dtails_Factures.Ref=Produits.Ref and Clients.Num_Client=Factures.Num_Client
And Ville= Casa
GROUP BY Factures.Num_Facture, Factures.Date
HAVING (Factures.Date between D1 and D2) or Sum([Qte]*[PU])>10000;

5. (10,5 pts)
a- (1,5 pt)

SELECT count(Factures.Num_Facture) AS Nbr_Factures


FROM Factures
WHERE Factures.Date between D1 and D2)

b- (2 pts)
SELECT Clients.Num_Client, Factures.Num_Facture, Factures.Date, Sum([Qte]*[PU]) AS MHT,
Sum([Qte]*[PU])*(1+TTVA) AS MTTC
FROM Clients, Factures, Produits, dtails_factures
WHERE Factures.num_Factures=Dtails_Factures.num_Factures and
Dtails_Factures.Ref=Produits.Ref and Clients.Num_Client=Factures.Num_Client
GROUP BY Clients.Num_Client, Factures.Num_Facture;

3
UNIVERSIT HASSAN II MOHAMMEDIA-
FACULT DES SCIENCES JURIDIQUES, CONOMIQUES ET SOCIALES

c- (1,5 pt)

SELECT Produits.Rf, avg(factures.Qte), sum(factures.Qte), sum(factures.Qte)-Qte_disponible as


qte_restante
FROM Produits,dtails_factures
WHERE Dtails_Factures.Ref=Produits.Ref
GROUP BY Produits.Rf ;

d- (2 pts)

SELECT dtails_factures.Num_Fact, count(Rf), sum(Qte*Pu) AS HT


FROM Produits, dtails_factures
WHERE Dtails_Factures.Ref=Produits.Ref
GROUP BY details_factures.Num_Facture
Having (sum(Qte*Pu)<6000 or sum(Qte*Pu)>14000) and count(Rf)=(select count(*) from produits);

e- (2 pts)
SELECT factures.cin, count(factures.num_fact)
FROM factures
GROUP BY factures.cin
Having count(factures.num_fact)>1 and factures.num_fact in (select num_fat, count(ref) from
dtails_factures group by num_fact having count(ref)>1);

f- (1,5 pt)
SELECT count(factures.num_fact)
FROM factures
Where factures.num_fact in (select num_fact, count(ref) from dtails_fact group by num_fact having
count(ref) = (select count(*) from produits));

Vous aimerez peut-être aussi