Académique Documents
Professionnel Documents
Culture Documents
correction
R1 = SELECTION (ENFANT, NOMP="DUPONT")
R2 = JOINTURE (CLASSE, R1, NOMEC= CLASSE.NOMEC AND
CLASSE.NCL=R1.NCL)
R3 = JOINTURE (R2, PERSONNE.NOM=R2.MAITRE)
R4 = JOINTURE(R3, APPIM, APPIM.ADI=R3.ADR AND R3.NAPR=APPIM.NAPR )
R5 = JOINTURE (R4, IMMEUBLE, IMMEUBLE.ADI=R4.ADR)
R = PROJECTION (R5, ADI, DATEC, TYPE, ETAGE)
SELECT A.ADI, I.DATEC, A.TYPE, A.ETAGE
FROM CLASSE C, ENFANT E, PERSONNE P, IMMEUBLE I, APPIM A
WHERE I.ADI = P.ADR
AND A.NAPR = P.NAPR
AND A.ADI = I.ADI
AND P.NOM = C.MAITRE
AND C.NOMEC = E.NOMEC
AND C.NCL = E.NCL
AND E.NOMP = `DUPONT'
Correction :
1. Lister les employés ayant des revenus supérieurs à 10.000 Frs.
Réponse : R1 = Selection (EMP, SAL+NVL(COMM, 0) > 10000)
R = Projection (R1, ENOM)
Attention : toute valeur null intervenant dans des calculs, donnent une valeur null pour
résultat.
2. Trouver le nom et la profession de l'employé de numéro 10.
Réponse : R1 = Selection (EMP, ENUM=10)
R = Projection (R1, ENOM, PROF)
3. Lister les noms des employés qui travaillent à Paris.
Réponse : R1 = Jointure (EMP, DEPT, EMP.DNO=DEPT.DNO ET DEPT.VILLE=’Paris’)
R = Projection (R1, ENOM)
4. Trouver le nom des directeurs de département ayant comme profession 'Ingénieur'.
Réponse : R1 = Selection (DEPT, DNOM='Commercial')
R2 = Jointure (R1, EMP, EMP.ENUM=R1.DIR)
R = Projection (R2, ENOM)
5. Trouver les professions des directeurs des départements.
Réponse : R1 = Jointure (EMP, DEPT, EMP.DNO=DEPT.DNO ET
DEPT.DIR=EMP.ENOM)
R = Projection (R1, PROF)
Exercice 4 : La base des invités
Une maîtresse de maison s'est constituée une base de données sur les personnes (probables)
qu'elle invite et les plats qu'elle leur sert. Cette base de données est composée de trois
relations :
REPAS (date, invité) donne la liste des invités qui ont été reçus et à quelle date
MENU (date, plat) donne le menu servi à chaque date
PREFERENCE (personne, plat) donne pour chaque personne ses plats préférés
N.B : les attributs "personne" et "invité" ont même domaine.
A l'aide de l'algèbre relationnelle exprimer les requêtes suivantes :
Q1 : Quels sont les invités du repas du 01/05/97 ?
Q2 : Quels sont les plats qui ont été servis à Alice ?
Q3 : Quels sont les invités qui lors d'un repas ont eu au moins un de leur plat préféré ?
Q4 : Quelles sont les personnes qui n'ont jamais été invités ?
Q5 : Quels sont les invités qui sont venus à tous les repas ?
Correction :
Q1 : Quels sont les invités du repas du 01/05/97.
R1 = SELECTION (REPAS, date= 01/05/97)
R = PROJECTION (R1, invité)
ou bien sous forme fonctionnelle :
PROJECTION ( SELECTION (REPAS, date=01/05/97), invité)
Q2 : Quels sont les plats qui ont été servis à Alice ?
R1 = JONTURE (REPAS, MENU, REPAS.date=MENU.date ET REPAS.invité=’Alice’)
R = PROJECTION (R1, plat)
Q3 : Quels sont les invités qui lors d’un repas ont eu au moins un de leur plats
préférés ?
R1 = JOINTURE (REPAS, PREFERENCES, REPAS.invité=PREFERENCES.personne)
R2 = PROJECTION (R1, invité, plat, date)
R3 = JOINTURE (R2, MENU, R2.plat=MENU.plat ET R2.date=MENU.date)
R = PROJECTION (R3, invité)
Q4 : Quelles sont les personnes qui n’ont jamais été invités ?
PROJECTION (PREFERENCES, personne) - PROJECTION (REPAS, invité)
Q5 : Quels sont les invités qui sont venus à tous les repas ?
R1 = PROJECTION (REPAS, date)
R = REPAS / R1
Réponses :
1) Tous les détails de tous les clients.
R = PROJECTION (CLIENTS, NC, NOMC, VILLE)
Ou tout simplement : R = CLIENTS
SQL :
SELECT *
FROM CLIENTS;
2) Les numéros et les noms des produits de couleur rouge et de poids supérieur à 100.
R1 = SELECTION(PRODUITS, COUL = ‘rouge’ ET PDS > 100) ;
R = PROJECTION (R1, NP, NOMP) ;
remarque : Attention si on sait comment la couleur a été saisi (minuscules/majuscules) il faut
utiliser les fonctions de conversion de caractères telles que UPPER, LOWER etc…
SQL :
SELECT NP, NOMP
FROM PRODUITS
WHERE COUL = ‘rouge’ AND PDS > 100 ;
3) Les différents représentants ayant vendu au moins un produit.
R1 = SELECTION(VENTES, QT>0)
R = PROJECTION (R1, NR) ;
SQL :
SELECT DISTINCT NR
FROM VENTES ;
4) Les noms des clients de Lyon ayant acheté un produit pour une quantité supérieure à 180.
R1 = SELECTION(VENTES, QT>180)
R2 = SELECTION(CLIENTS,VILLE = ‘Lyon’)
R3= JOINTURE (R1, R2, R1.NC=R2.NC)
R = PROJECTION (R3, NOMC)
SQL :
SELECT DISTINCT C.NOMC
FROM CLIENTS C, VENTES V
WHERE V.NC = C.NC AND V.QT > 180 AND C.VILLE ='Lyon';
5) Les noms des représentants et des clients à qui les représentants ont vendu un produit de
couleur rouge pour une quantité supérieure à 100.
R1 = SELECTION (VENTES, QT>100)
R2 = SELECTION (PRODUITS, COUL=rouge)
R3 = JOINTURE (R2, R1, R1.NP=R2.NP)
R4 = JOINTURE (CLIENTS, R3, CLIENTS.NC=R3.NC)
R5 = JOINTURE (REPRESENTANTS, R4, REPRESENTANTS.NR=R4.NR)
R = PROJECTION(R4, NOMC, NOMR)
SQL :
SELECT DISTINCT R.NOMR, C.NOMC
FROM REPRESENTANTS R, CLIENTS C, PRODUITS P, VENTES V
WHERE V.NC=C.NC AND V.NR=R.NR AND V.NP=P.NP AND V.QT>100 AND
P.COUL=‘rouge’ ;
6) Le nombre de clients.
R = COMPTE (CLIENTS)
SQL :
SELECT COUNT(*)
FROM CLIENTS
7) Le nombre de produits de couleur rouge.
R1 = SELECTION (PRODUITS, COUL=‘rouge’)
R = COMPTE (R1)
SQL :
SELECT COUNT(*)
FROM PRODUITS P
WHERE P.COUL=‘rouge’ ;
8) Le nombre de clients par ville.
R = COMPTE (CLIENTS, VILLE )2
SQL :
SELECT VILLE, COUNT(*)
FROM CLIENTS
GROUP BY VILLE
9) La quantité totale des produits rouge vendu par chaque représentant.
R1 = SELECTION (PRODUITS, COUL=‘rouge’)
R2 = JOINTURE(VENTES, R1, VENTES.NP=R1.NP)
R = SOMME (R2, NR; QT)
SQL :
SELECT V.NR, SUM(V.QT)
FROM VENTES V, PRODUITS P
WHERE P.NP=V.NP AND P.COUL=‘rouge’
GROUP BY V.NR;
10) La quantité totale des produits rouge par représentant ayant vendu plus de 10 produits
rouges.
R1 = SELECTION (PRODUITS, COUL=‘rouge’)
R2 = JOINTURE(VENTES, R1, VENTES.NP=R1.NP)
R3 = COMPTE(R2, NR)
R4 = SELECTION(R3, COMPTE > 10)
R5 = JOINTURE (R4, R2, R4.NR=R2.NR)
R = SOMME (R5, NR ;QT)
SQL :
SELECT V.NR, SUM(V.QT)
FROM VENTES V, PRODUITS P
WHERE V.NP=P.NP AND P.COUL=‘rouge’
GROUP BY V.NR
HAVING COUNT(*) >10