Vous êtes sur la page 1sur 8

Exercice2 

Q8 : Donner l'adresse de l'immeuble, la date de construction, le type d'appartement et l'étage


où habitent chacun des maîtres des enfants de DUPONT.

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'

Exercice 3 : Schéma Employés - Départements


Les exemples suivants sont tirés des sources de la société Oracle.
Relation des Employés (EMP)
EMP (ENO, ENOM, PROF, DATEEMB, SAL, COMM, DNO)
ENO : numéro d'employé, clé
ENOM : nom de l'employé
PROF : profession (directeur n'est pas une profession)
DATEEMB : date d'embauche
SAL : salaire
COMM : commission (un employé peut ne pas avoir de commission)
DNO : numéro de département auquel appartient l'employé
Relation des Départements (DEPT)
DEPT(DNO, DNOM, DIR, VILLE)
DNO : numéro de département, clé
DNOM : nom du département
DIR : numéro d'employé du directeur du département
VILLE : lieu du département (ville)
A l'aide de l'algèbre relationnelle exprimer les requêtes suivantes :
1. Lister les employés ayant des revenus supérieurs à 10.000 dinars.
2. Trouver le nom et la profession de l'employé numéro 10.
3. Lister les noms des employés qui travaillent à Tunis.
4. Trouver le nom du directeur du département ''Commercial''.
5. Trouver les professions des directeurs des départements.

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

1) SELECT invité FROM repas


WHERE date=01/05/97 ;
2) SELECT plat FROM menu
WHERE date IN ( SELECT date FROM repas WHERE invité=’Alice’) ;
3) SELECT invité FROM repas
WHERE date IN ( SELECT date FROM menu WHERE plat IN ( SELECT plat FROM
preference WHERE personne=invité) );
4) SELECT personne FROM preference
WHERE personne NOT IN ( SELECT invité FROM repas) ;
5) SELECT invité FROM REPAS
GROUP BY invité
HAVING COUNT(*) = (SELECT COUNT (DISTINCT (date)) FROM REPAS)

Exercice 5: Faire du Cinéma ...


On considère les deux relations suivantes où les clés sont en caractères gras :
LESFILMS (TITRE, PAYS, ANNEE, REALISATEUR, DUREE)
LESACTEURS (TITRE, ACTEUR)
et où les attributs ont les significations et les types suivants:
-TITRE : titre d'un film (chaîne 50 caractères)
-PAYS : pays d'où un film est originaire (chaîne 10 caractères)
-ANNEE : année de sortie du film (entier 4 chiffres)
-REALISATEUR: Nom du réalisateur du film (chaîne 20 caractères)
- DUREE : durée du film en mn (entier 3 chiffres)
-ACTEUR : Nom d'acteur (chaîne 20 caractères)
La relation LESFILMS donne pour chaque film identifié par son titre, le pays, l'année de
sortie, le réalisateur et la durée.
La relation LESACTEURS donne pour chaque film l'ensemble des principaux acteurs.
A l'aide de l'algèbre relationnelle exprimer les requêtes suivantes :
Q1 : Lister les films français (titre, année, réalisateur).
Q2 : Donnez les années de sortie des films où a joué GABIN.
Q3 : Trouver les acteurs qui ont tourné avec TRUFFAUT comme réalisateur.
Q4 : Trouver tous les acteurs qui ont été partenaires de DENEUVE.
Q5 : Lister les films où le réalisateur est aussi acteur
Q6 : Lister les réalisateurs ayant joué comme acteurs que dans des films qu'ils ne réalisaient
pas eux-mêmes.
Q7 : Lister les réalisateurs ayant joué comme acteurs dans des films qu'ils ne réalisaient pas
eux-mêmes.
Q8 : Donnez les acteurs qui jouent dans tous les films de Truffaut.
Correction :

Q1: Liste des films français (titre, année, réalisateur).


R1 = restriction(LESFILMS, pays=’France’)
R = projection(R1, titre, année, réalisateur)
Q2: Donnez les années de sortie des films tournés par GABIN.
R1 = restriction(LESACTEURS, acteur=’Gabin’)
R2 = jointure (LESFILMS, R1, LESFILMS.titre=R1.titre)
R = projection(R2, année)
Q3: Trouver les acteurs qui ont tourné avec TRUFFAUT comme réalisateur.
R1 = restriction(LESFILMS , réalisateur=’Truffaut’)
R2 = jointure(R1, LESACTEURS, R1.titre=LESACTEURS.titre)
R = projection(R2, acteur)
Q4: Trouver tous les acteurs qui ont été partenaires de DENEUVE.
R1 = restriction(LESACTEURS, acteur<>’Deneuve’)
R2 = restriction(LESACTEURS, acteur = ‘Deneuve’)
R3 = semi-jointure (R1, R2, R1.titre=R2.titre)
R = projection (R3, acteur)
Q5: Liste des films où le réalisateur est aussi acteur.
R1 = jointure(LESFILMS; LESACTEURS, LESFILMS.titre=LESACTEURS.titre)
R2 = selection (R1, acteur=realisateur)
R = projection (R2,titre)
Q6: Réalisateurs ayant joué comme acteurs que dans des films qu’ils ne réalisaient pas
euxmêmes.
R1 = jointure(LESFILMS; LESACTEURS, LESFILMS.acteur=LESACTEURS.realisateur)
R2 = projection (R1, réalisateur)
R2 donne les réalisateurs qui sont des acteurs.
R3 = jointure(LESFILMS, LESACTEURS, LESFILMS.titre=LESACTEURS.titre)
R4 = selection (R3, acteur=réalisateur)
R5 = projection (R4, réalisateur)
R5 donne les réalisateurs qui sont acteurs dans leur propre film.
RES = R2 - R5
Q7: Réalisateurs ayant joué comme acteurs dans des films qu’ils ne réalisaient pas eux
mêmes.
R1 = jointure(LESFILMS, LESACTEURS, LESFILMS.titre=LESACTEURS.titre)
R2 = selection (R1, acteur<>realisateur)
R3 = projection (R4, acteur)
R4 = projection(LESFILMS, réalisateur)
RES = intersection (R3, R4)
Q8: Donnez les acteurs qui jouent dans tous les films de Truffaut.
R1 = restriction(LESFILMS, réalisateur=’Truffaut’)
R2 = projection(R1, titre)
R3 = LESACTEURS / R2
R = projection (R3, acteurs)

Interrogation des Bases de données SQL


Exercice 1:
Considérer la base de données relationnelles suivante :
REPRESENTANTS : R (NR, NOMR, VILLE)
PRODUITS : P (NP, NOMP, COUL, PDS, VILLE)
CLIENTS : C (NC, NOMC, VILLE)
VENTES : V (NR, NP, NC, QT)
Donner des requêtes SQL correspondantes.
1) Tous les détails de tous les clients.
2) Les numéros et les noms des produits de couleur rouge et de poids supérieur à 100.
3) Les différents représentants ayant vendu au moins un produit.
4) Les noms des clients de Tunis ayant acheté un produit pour une quantité supérieure à 180.
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.
6) Le nombre de clients.
7) Le nombre de produits de couleur rouge.
8) Le nombre de clients par ville.
9) La quantité totale des produits rouge vendu par chaque représentant.
10) La quantité totale des produits rouge par représentant ayant vendu plus de 10 produits
rouges.

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

Vous aimerez peut-être aussi