Vous êtes sur la page 1sur 7

Université de Kairouan Année Universitaire

Institut Supérieur d’Informatique 2005/2006


et de Gestion de Kairouan

SESSION JANVIER 2006

ANNEE 3ème année


FILIERE Informatique de Gestion
EPREUVE Bases de données
Durée 3 heures
Nbre de pages 2 pages
Enseignants Riadh ZAAFRANI – Moez MTIBAA

Exercice 1 (9 points)
On considère le schéma relationnel suivant :
IMMEUBLE (Adresse, Nbre_Etages, Date_Construction, Nom_Propriétaire)
APPARTEMENT(Adresse_Immeuble, Num_Appart, Nom_Occupant, Type_Appart,
Superficie, Etage)
PERSONNE (Nom, Age, Profession, Adresse, Num_Appart)
ÉCOLE (Nom_Ecole, Adresse_Ecole, Nbre_Classes, Directeur)
CLASSE (Nom_Ecole, Nom_Classe, Nom_Maître, Nbre_élèves)
ENFANT (Nom_Responsable, Prénom_Enfant, Année_Naissance, Nom_Ecole, Nom_Classe)

La relation IMMEUBLE décrit un ensemble d’immeubles. Chaque immeuble a un


propriétaire. La relation APPARTEMENT décrit pour chaque immeuble l’ensemble des
appartements qui le compose. Chaque appartement peut héberger plusieurs personnes mais il
y en a une qui est responsable (par exemple le locataire) et qui est désignée par le constituant
Nom_Occupant. Si l’appartement est inoccupé, ce constituant prend la valeur NULL. La
relation PERSONNE décrit un ensemble de personnes. Adresse et Num_Appart représentent
l’adresse où réside une personne. Une personne peut avoir plusieurs enfants décrits par la
relation ENFANT. Pour simplifier, on ne considère que les enfants allant à l’école primaire.
Les écoles et les classes sont décrites dans les relations ÉCOLE et CLASSE.
A-) Exprimer les requêtes suivantes à l’aide de l’algèbre relationnelle(forme textuelle) et à
l’aide du langage SQL.
1) Donner l’adresse des immeubles ayant plus de 10 étages et construits avant 1970.
2) Donner les noms des personnes qui habitent dans un immeuble dont ils sont propriétaires
(occupants et habitants).
3) Donner les noms des personnes qui ne sont pas propriétaires.
4) Donner les adresses des immeubles possédés par des informaticiens dont l’âge est
inférieur à 40 ans.
5) Donner la liste des occupants (nom, âge, profession) des immeubles possédés par Mr.
BEN SALEH.
6) Donner le nom et la profession des propriétaires d’immeubles où il y a des appartements
vides.
B-) Exprimer les requêtes suivantes à l’aide du langage SQL
7) Donner les noms des maîtres qui habitent dans le même immeuble (à la même adresse)
qu’au moins un de leurs élèves (on suppose que les enfants vivent sous le même toit que
leur responsable).
8) 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 Mr. BEN SALEH.
9) Ajouter un enfant de nom NP, de prénom E, né en A et l’inscrire à la classe C de l’école
EC (Incrémentez le nombre d’élèves de cette classe).
Page 1/2
Exercice 2 (5 points)

On trouve dans un SGBD relationnel les relations ci-dessous. Les clés primaires sont
soulignées, mais pas les clés étrangères.
IMMEUBLE (Adresse, Nb-étages, Date-construction, Nom-Gérant)
APPART (Adresse, Numéro, Type, Superficie, Etage)
PERSONNE (Nom, Age, Code-Profession)
OCCUPANT (Adresse, Numéro-Appart, Nom-Occupant, Date-arrivée, Date-départ)
PROPRIÉTÉ (Adresse, Nom-Propriétaire, Quote-part)
TYPE-APPART (Code, Libellé)
PROFESSION (Code, Libellé)

1) Identifier toutes les contraintes de clés étrangères dans chaque relation sous la forme :
Entité1[clé_étrangère] ⊆ Entité2[clé_primaire]
2) Reconstruire le schéma Entité/Relation.
3) Définir en SQL les schémas des relations Occupant et Appart.

Exercice 3 (6 points)

Considérons la base de données dont le schéma et un exemple sont donnés ci-dessous.


Employé (NumEmp, NomEmp, Profession, DateEmbauche, Salaire, Commission, #NumDept)
Département (NumDept, NomDept, #Directeur, Ville)
Employé
NumEmp NomEmp Profession DateEmbauche Salaire Comission NumDept
10 Karim Ingénieur 1/12/03 1000 300 3
20 Mehdi Technicien 1/7/98 800 200 2
30 Mohamed Vendeur 1/5/90 500 500 1
40 Meriem Ingénieur 1/5/90 1200 500 3
Département
NumDept NomDept Directeur Ville
1 Commercial 30 Kairouan
2 Production 20 Nabeul
3 Développement 40 Tunis
Exprimer les requêtes suivantes à l’aide du langage SQL :
1. Donner le salaire et le nom des employés gagnant plus que tous les vendeurs.
2. Donner les noms des employés et les noms de leurs directeurs.
3. Donner les numéros des départements qui n’ont pas d’employés.
4. Donner le nom et la date d’embauche des employés embauchés avant leur directeur; donner
également le nom et la date d’embauche de leur directeur.
5. Trouver les noms des employés ayant le même directeur que Karim. Attention : un
employé peut être directeur de plusieurs départements.
6. Donner les noms des employés du département COMMERCIAL embauchés le même jour
qu’un employé du département PRODUCTION.
7. Donner pour chaque profession son salaire moyen?
8. Donner le nombre d’employés du département PRODUCTION.
9. Donner la liste des employés ayant une commission.
10. Donner les noms des employés ayant le salaire maximum de chaque département.

Bon Courage.

Page 2/2
Correction de l'examen semestriel (Janvier 2006)

ANNEE 3ème année


FILIERE Informatique de Gestion
EPREUVE Bases de données
Enseignants Riadh ZAAFRANI – Moez MTIBAA

Exercice 1 (9 points)

1) Donner l’adresse des immeubles ayant plus de 10 étages et construits avant 1970. (1 pt)
projAdresse(SelectNbre_Etages > 10 ET Date-construction < 1970 (IMMEUBLE))
SELECT Adresse
FROM IMMEUBLE
WHERE Nbre_Etages > 10 AND Date-construction < 1970;

2) Donner les noms des personnes qui habitent dans un immeuble dont ils sont propriétaires
(occupants et habitants) (1 pt).
ProjNom (joinPersonne.Adresse=Immeuble.Adresse
ET Personne.Nom= Immeuble.Nom_Propriétaire (PERSONNE,IMMEUBLE))

SELECT Nom
FROM PERSONNE P, IMMEUBLE I
WHERE P.Adresse = I.Adresse
AND Nom = Nom_Propriétaire;

3) Donner les noms des personnes qui ne sont pas propriétaires (1 pt).
ProjNom(PERSONNE) - ProjNom_Propriétaire(IMMEUBLE)
SELECT Nom
FROM PERSONNE
WHERE Nom NOT IN (SELECT Nom_Propriétaire FROM IMMEUBLE)

4) Donner les adresses des immeubles possédés par des informaticiens dont l’âge est
inférieur à 40 ans (1 pt).
projAdresse(SelectAge<40 ET Profession = ‘INFORMATICIEN’
(joinPersonne.Nom = Immeuble.Nom_Propriétaire(PERSONNE,IMMEUBLE)))
SELECT Adresse SELECT Adresse
FROM PERSONNE, IMMEUBLE FROM IMMEUBLE
WHERE Nom = Nom_Propriétaire WHERE Nom_Propriétaire IN
AND Age < 40 (SELECT Nom
AND Profession = ’INFORMATICIEN’ FROM PERSONNE
AND Age < 40
AND Profession = ’INFORMATICIEN’
5) Donner la liste des occupants (nom, âge, profession) des immeubles possédés par Mr.
BEN SALEH (1 pt).

ProjNom,Age,Profession(SelectNom_Propriétaire=’Ben Saleh’(
joinPersonne.Adresse =Immeuble.Adresse(PERSONNE,IMMEUBLE))))

Page 1/5
SELECT P.Nom, P.Age, P.Profession
FROM PERSONNE P, IMMEUBLE I
WHERE I.Adresse = P.Adresse
AND I.Nom_Propriétaire = ’BEN SALEH’;

6) Donner le nom et la profession des propriétaires d’immeubles où il y a des appartements


vides (1 pt).
ProjNom_Propriétaire, Profession(Join Personne.Nom=Immeuble.Nom_Propriétaire(PERSONNE,
Join Immeuble.Adresse=Appartement.Adresse_Immeuble(Immeuble,
[(ProjAdresse_Immeuble, Num_Appart(APPARTEMENT))
- (ProjAdresse_Immeuble, Num_Appart(
joinPersonne.Nom=Appartement.NomOccupant(APPARTEMENT,PERSONNE)))])))

SELECT DISTINCT P.Nom, P.Profession


FROM APPARTEMENT A, IMMEUBLE I, PERSONNE P
WHERE P.Nom = I.Nom_Propriétaire
AND I.Adresse = A.Adresse_Immeuble
AND A.Nom_Occupant IS NULL;

7) Donner les noms des maîtres qui habitent dans le même immeuble (à la même adresse)
qu’au moins un de leurs élèves (on suppose que les enfants vivent sous le même toit que leur
responsable) (1 pt).

SELECT C.Nom_Maître
FROM CLASSE C, PERSONNE P1, Enfant E, Personne P2
WHERE C.Nom_Maître = P1.Nom
AND P2.Nom = E.Nom_Responsable
AND P1.Adresse = P2.Adresse
AND E.Nom_Ecole = C.Nom_Ecole
AND E.Nom_Classe = C.Nom_Classe;

8) 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 Mr. BEN SALEH (1 pt).

SELECT A.Adresse_Immeuble, I.Date_Construction, A. Type_Appart, A.Etage


FROM CLASSE C, ENFANT E, PERSONNE P, IMMEUBLE I, APPARTEMENT A
WHERE I.Adresse = A.Adresse_Immeuble
AND A.Num_Appart = P.Num_Appart
AND A.Adresse_Immeuble = P.Adresse
AND P.Nom = C.Nom_Maître
AND C.Nom_Ecole = E.Nom_Ecole
AND C.Nom_Classe = E.Nom_Classe
AND E.Nom_Responsable = ‘Ben Saleh’

9) Ajouter un enfant de nom NP, de prénom E, né en A et l’inscrire à la classe C de l’école


EC (Incrémentez le nombre d’élèves de cette classe). (1 pt).

INSERT INTO ENFANT VALUES ('np','e','a','ec','c');


UPDATE CLASSE
SET Nbre_élèves = Nbre_élèves + 1
WHERE Nom_Ecole = 'ec'
AND Nom_Classe = 'c';

Page 2/5
Exercice 2 (5 points)
1) (1 pt) APPART[Adresse] ⊆ IMMEUBLE[Adresse]
APPART[Type] ⊆ TYPE-APPART[Code]
Occupant[Nom-Occupant] ⊆ PERSONNE[NOM]
Occupant[Adresse, Numéro-Appart] ⊆ APPART[Adresse, Numéro]
IMMEUBLE[Nom-Gérant] ⊆ PERSONNE[NOM]
PROPRIÉTÉ[Adresse] ⊆ IMMEUBLE[Adresse]
PROPRIÉTÉ[Nom-Propriétaire] ⊆ PERSONNE[NOM]
PERSONNE[Code-Profession] ⊆ PROFESSION[Code]
2) (2 pts)

1-N 1-1 APPART


IMMEUBLE Possède
- Adresse 1-1 - Numéro
- Nb-étages - Superficie
- Date-construction - Etage

1-N
1-N 1-1
PROPRIÉTÉ Est géré
Occupant
- Quote-part
- Date-arrivée
- Date-départ A comme
PROFESSION type
1-N 1-N 1-N 1-N
- Code 1-N
- Libellé A comme
profession Personne TYPE-APPART
- Nom
1-1 - Age - Code
- Libellé

Schéma du MCD
3. Création du schéma des relations (2 points)
CREATE TABLE Occupant (
Adresse VARCHAR(30),
Numéro-Appart NUMBER(4),
Nom-Occupant VARCHAR(30),
Date-arrivée DATE,
Date-départ DATE,
Constraint Occupant_PK PRIMARY KEY (Adresse,Numéro-Appart,Nom-Occupant)
Constraint Occupant_Adresse_Numéro-Appart_FK FOREIGN KEY
(Adresse,Numéro-Appart) REFERENCES Appart,
Constraint Occupant_Nom-Occupant_FK FOREIGN KEY(Nom-Occupant)
REFERENCES Personne);
CREATE TABLE Appart (
Adresse VARCHAR(30),
Numéro NUMBER(4),
Type VARCHAR(30),
Superficie NUMBER(4),
Etage NUMBER(4),
Constraint Appart_PK PRIMARY KEY (Adresse, Numéro),
Constraint Appart_Adresse_FK FOREIGN KEY (Adresse)
REFERENCES Immeuble ON DELETE CASCADE ON UPDATE CASCADE,
Constraint Appart_Type_FK FOREIGN KEY (Type)
REFERENCES Type-Appart
);

Page 3/5
Exercice 3 (6 points)
1. Donner le salaire et le nom des employés gagnant plus que tous les vendeurs. (0,5 pt)
SELECT NomEmp, Salaire
FROM Employé
WHERE Salaire > ALL (SELECT Salaire FROM Employé
WHERE Profession=’Vendeur’);

2. Donner les noms des employés et les noms de leurs directeurs. (0,5 pt)
SELECT E1.NomEmp, E2.NomEmp
FROM Employé E1, Employé E2, Département D
WHERE E1.NumDept =D.NumDept
AND E2.NumEmp = D.Directeur;

3. Donner les numéros des départements qui n’ont pas d’employés. (0,5 pt)
SELECT NumDept
FROM Département
WHERE NumDept NOT IN (SELECT NumDept FROM Employé);

4. Donner le nom et la date d’embauche des employés embauchés avant leur directeur; donner
également le nom et la date d’embauche de leur directeur (0,5pt).
SELECT E1.NomEmp, E1.DateEmbauche, E2.NomEmp, E2.DateEmbauche
FROM Employé E1, Employé E2, Département D
WHERE E2.NumEmp =D.Directeur
AND E1.NumDept =D.NumDept
AND E1.DateEmbauche <E2.DateEmbauche;

5. Trouver noms des employés ayant le même directeur que Karim. Attention : un employé peut être
directeur de plusieurs départements (1pt).
SELECT NomEmp
FROM Employé
WHERE NumDept IN (SELECT D2.NumDept
FROM Employé, Département D1, Département D2
WHERE NomEmp =’Karim’
AND D1.NumDept = Employé.NumDept
AND D1.Directeur = D2.Directeur);

6. Donner les noms des employés du département COMMERCIAL embauchés le même jour
qu’un employé du département PRODUCTION. (1pt).

SELECT NomEmp
FROM Employé, Département
WHERE Employé.NumDept = Département.NumDept
AND NomDept =’COMMERCIAL’
AND DateEmbauche IN (SELECT DateEmbauche
FROM Employé, Département
WHERE Employé.NumDept = Département.NumDept
AND NomDept =’PRODUCTION’);

7. Donner pour chaque profession son salaire moyen? (0,5pt)

SELECT Profession, AVG(Salaire)


FROM Employé
GROUP BY Profession;

Page 4/5
8. Donner le nombre d’employés du département PRODUCTION. (0,5pt)

SELECT COUNT(*)
FROM Employé, Département
WHERE Employé.NumDept = Département.NumDept
AND Département.NomDept = ’PRODUCTION’;

9. Donner la liste des employés ayant une commission. (0,5pt)


SELECT *
FROM Employé
WHERE Commission IS NOT NULL;

10. Donner les noms des employés ayant le salaire maximum de chaque département. (0,5pt)
SELECT NomEmp
FROM Employé E1
WHERE Salaire >= ALL(SELECT Salaire
FROM Employé E2
WHERE E1.NumDept = E2.NumDept);

Page 5/5

Vous aimerez peut-être aussi