• Aucun résultat trouvé

Série 3 : Exercices sur les langages de manipulation de données relationnelles I. Corrigé de l'algèbre relationnelle

N/A
N/A
Protected

Academic year: 2022

Partager "Série 3 : Exercices sur les langages de manipulation de données relationnelles I. Corrigé de l'algèbre relationnelle"

Copied!
5
0
0

Texte intégral

(1)

Série 3 : Exercices sur les langages de manipulation de données relationnelles

I. Corrigé de l'algèbre relationnelle

1.

π

[DateNaissance, Adresse]

σ

[Prénom = “Juliette” ∧ Nom = “Rochat”] Employé 2.

π

[Nom, Adresse] ( Employé

∗ σ

[NomD = “Recherche”] Département )

3.

π

[Nom, Adresse] ( Employé

∗ α

[N°Avs->Supérieur]

π

[N°Avs]

σ

[Prénom = “Juliette” ∧ Nom =

“Rochat”] Employé )

4.

π

[Nom] ( Employé

∗ σ

[Heures>10] Travaille *

σ

[Lieu="Genève"]

π

[N°Pro, Lieu] Projet ) 5.

π

[NomP] (Projet *Travaille *

π

[N°Avs]

σ

[(Nom=“Muller” ∧ Prénom="Jean") ∨

(Nom=“Grandjean” ∧ Prénom="Annie")] Employé )

6.

π

[NomP] (Projet *Travaille *

π

[N°Avs]

σ

[Nom=“Muller” ∧ Prénom="Jean"] Employé )

π

[NomP] (Projet *Travaille *

π

[N°Avs]

σ

[Nom=“Grandjean” ∧ Prénom="Annie"] Employé ) 7.

π

[Nom, Prénom] ( Employé – ( Employé *

π

[N°Avs] Travaille) )

8. ProDept =

π

[N°Pro, N°Dep] (Travaille * Employé) Résultat = ProDept /

π

[N°Dep] Département

Autre formulation, sans la division. Dans ce cas, il faut calculer l'inverse, à savoir: les projets qui n'ont pas de participant dans chaque département. La relation P contient les couples (N°Pro, N°Dep) tels que le projet N°Pro n'a pas de participant du département N°Dep:

P = ((

π

[N°Pro] Projet) x (

π

[N°Dep] Département)) -

π

[N°Pro, N°Dep] ( Travaille * Employé ) Résultat = (

π

[N°Pro] Projet) - (

π

[N°Pro] P)

9. On calcule d'abord les employés qui travaillent sur au moins un projet de Genève (EmpG).

EmpG =

π

[Nom, N°Avs] (Employé * Travaille *

π

[N°Pro

] σ

[Lieu="Genève"] Projet ) (On conserve le N°Avs, bien qu'il ne soit pas demandé dans le résultat, au cas où il y ait des homonymes parmi les employés)

Résultat =

π

[Nom] ( (

π

[Nom, N°Avs] Employé) – EmpG )

10. On calcule d'abord les employés qui travaillent sur au moins un projet qui n'est pas à Genève (EmpNG).

EmpNG =

π

[Nom, N°Avs] ( Employé * Travaille *

π

[N°Pro

] σ

[Lieu≠"Genève"] Projet ) Résultat = (

π

[Nom] ( EmpG – EmpNG )

II Traduction en français:

1. Noms et prénoms des employés qui gagnent plus que leur supérieur immédiat.

2. Noms des projets sur lesquels ne travaille aucun employé du département du projet.

(2)

II. Corrigé en calcul relationnel des tuples

1. e ∈ Employé

{ e.DateNaissance, e.Adresse / e.Prénom = “Juliette” ∧ e.Nom = “Rochat” } 2. e ∈ Employé, d ∈ Département

{ e.Nom, e.Adresse / ∃d (e.N°Dep = d.N°Dep ∧ d.NomD = “Recherche”) } 3. e1, e2 ∈ Employé

{e1.Nom, e1.Prénom / ∃e2 (e1.Supérieur = e2.N°Avs ∧ e2.Prénom = “Juliette” ∧ e2.Nom =

“Rochat”) }

4. e ∈ Employé, t ∈ Travaille, p ∈ Projet

{ e.Nom / ∃t ∃p (t.N°Avs = e.N°Avs ∧ t.N°Pro = p.N°Pro ∧ t.Heures > 10 ∧ p.Lieu = “Genève” ) } 5. e ∈ Employé, t ∈ Travaille, p ∈ Projet

{p.nomP / ∃e ∃t ( ((e.Nom=“Muller” ∧ e.Prénom="Jean") ∨ (e.Nom=“Grandjean” ∧ e.Prénom="Annie")) ∧ e.N°Avs=t.N°Avs ∧ t.N°Pro=p.N°Pro ) }

6. e1, e2 ∈ Employé, t1, t2 ∈ Travaille, p ∈ Projet

{p.nomP / ∃e1 ∃e2 ∃t1 ∃t2 ( e1.Nom=“Muller” ∧ e1.Prénom="Jean"∧ e1.N°Avs=t1.N°Avs ∧ t1.N°Pro=p.N°Pro ∧ e2.Nom=“Grandjean” ∧ e2.Prénom="Annie"∧ e2.N°Avs=t2.N°Avs ∧ t2.N°Pro=p.N°Pro ) }

7. e ∈ Employé, t ∈ Travaille

{ e.Nom / ∀t (t.N°Avs ≠ e.N°Avs) }

8. e ∈ Employé, t ∈ Travaille, p ∈ Projet, d ∈ Département

{ p.N°Pro / ∀d ∃e ∃t (d.N°Dep = e.N°Dep ∧ e.N°Avs = t.N°Avs ∧ t.N°Pro = p.N°Pro) } 9. e ∈ Employé, t ∈ Travaille, p ∈ Projet

{ e.Nom / ¬∃t ∃p ( t.N°Avs = e.N°Avs ∧ t.N°Pro = p.N°Pro ∧ p.Lieu = “Genève” ) } 10. e ∈ Employé, t ∈ Travaille, p ∈ Projet

{ e.Nom / ∀t ( t.N°Avs ≠ e.N°Avs ∨ ∃p ( t.N°Pro = p.N°Pro ∧ p.Lieu = “Genève” )) ∧

∃t ( t.N°Avs = e.N°Avs ) } ou

{ e.Nom / ¬∃t ∃p ( t.N°Avs = e.N°Avs ∧ t.N°Pro = p.N°Pro ∧ p.Lieu = “Genève” ) ∧

∃t ( t.N°Avs = e.N°Avs ) }

Dans ces deux requêtes, la dernière partie de la formule : ∃t ( t.N°Avs = e.N°Avs ) }

sert à éliminer les employés qui ne travaillent sur aucun projet.

II Traduction en français:

1. Noms et prénoms des employés qui travaillent sur un même projet que Juliette Rochat.

2. Noms et prénoms des employés qui travaillent sur tous les projets de leur département.

(3)

III. Corrigé du SQL

Question I

1. SELECT DateNaissance, Adresse FROM Employé

WHERE Nom='Rochat' AND Prénom='Juliette' ; 2. SELECT Nom, Adresse

FROM Employé WHERE N°Dep IN

(SELECT N°Dep FROM Département

WHERE NomD='Recherche' ) ;

2. (autre solution) SELECT Nom, Adresse FROM Employé, Département

WHERE Employé.N°Dep=Département.N°Dep AND NomD='Recherche' ; 3. SELECT E.Nom, E.Prénom

FROM Employé E, Employé JR

WHERE JR.Nom='Rochat' AND JR.Prénom='Juliette' AND E.Supérieur=JR.N°AVS;

4. SELECT Nom

FROM Employé, Travaille, Projet

WHERE Employé.N°AVS=Travaille.N°AVS AND Travaille.N°Pro=Projet.N°Pro AND Lieu='Genève' AND Heures>10;

5. SELECT NomP

FROM Employé, Travaille, Projet

WHERE Employé.N°AVS=Travaille.N°AVS AND Travaille.N°Pro=Projet.N°Pro AND ((Nom='Muller' AND Prénom='Jean') OR (Nom='Greanjean' AND Prénom='Annie')) ; 6. ( SELECT NomP

FROM Employé, Travaille, Projet

WHERE Employé.N°AVS=Travaille.N°AVS AND Travaille.N°Pro=Projet.N°Pro AND Nom='Muller' AND Prénom='Jean' )

INTERSECT ( SELECT NomP

FROM Employé, Travaille, Projet

WHERE Employé.N°AVS=Travaille.N°AVS AND Travaille.N°Pro=Projet.N°Pro AND Nom='Greanjean' AND Prénom='Annie') ;

7. SELECT Nom, Prénom FROM Employé

WHERE NOT EXISTS

( SELECT * FROM Travaille

WHERE Employé.N°AVS=Travaille.N°AVS ) ;

(4)

7. (autre solution) SELECT Nom, Prénom FROM Employé

WHERE N°AVS NOT IN

( SELECT N°AVS FROM Travaille ) ; 8. SELECT N°Pro

FROM Projet

WHERE NOT EXISTS

( SELECT * FROM Département WHERE NOT EXISTS

( SELECT * FROM Employé, Travaille

WHERE Employé.N°AVS=Travaille.N°AVS AND Travaille.N°Pro=Projet.N°Pro AND Employé.N°Dep=Département.N°Dep ) ) ;

9. SELECT Nom FROM Employé WHERE NOT EXISTS

( SELECT *

FROM Travaille, Projet

WHERE Employé.N°AVS=Travaille.N°AVS AND Travaille.N°Pro=Projet.N°Pro AND Lieu='Genève' ) ;

10. SELECT Nom FROM Employé WHERE NOT EXISTS

( SELECT *

FROM Travaille, Projet

WHERE Employé.N°AVS=Travaille.N°AVS AND Travaille.N°Pro=Projet.N°Pro AND Lieu≠'Genève' )

AND EXISTS ( SELECT * FROM Travaille

WHERE Employé.N°AVS=Travaille.N°AVS ) ; 10. (autre solution) SELECT Nom

FROM Employé WHERE

'Genève' = ALL ( SELECT Lieu

FROM Travaille, Projet

WHERE Employé.N°AVS=Travaille.N°AVS AND Travaille.N°Pro=Projet.N°Pro ) ;

(5)

Question IV

π

SELECT NomD, COUNT(N°AVS) FROM Employé, Département

WHERE Employé.N°Dep=Département.N°Dep GROUP BY NomD ;

π

CREATE VIEW DepPro (N°Dep, NbPro) AS SELECT N°Dep, COUNT(N°Pro)

FROM Projet

GROUP BY N°Dep ; SELECT N°Dep FROM Projet GROUP BY N°Dep

HAVING COUNT(N°Pro) <

( SELECT AVG(NbPro) FROM DepPro ) ;

Références

Documents relatifs

Si les deux vecteurs directeurs dont colinéaires, ceci définit une droite, s’ils ne le sont pas il s’agit d’un plan.. On ne peut donc pas engendrer tout l’espace E avec

Comme toute fonction polynomiale est la somme d’une fonction polynomiale paire et d’une fonction polynomiale impaire, on voit par exemple que U 1 +U 2 contient tous les

− Si une œuvre est empruntée à un musée, alors elle doit être exposée: toute occurrence de Oeuvre -Empruntée doit être liée par l'association Expose. Exercice 2: Les créneaux

Pour tout tuple de Individu, il existe un tuple de même numéro soit dans Homme, soit dans

5/ Soit O le centre de la terre, m la masse du satellite et r=OM : distance entre le satellite et le centre de la terre... 6/ Pour voir le soleil fixe à l’horizon, il faut

( composé possédant à la fois une fonction aldéhyde et une fonction alcool). Ce composé se déshydrate en milieu acide pour donner un composé B.. b) Le composé A est un

: Changer l’énoncé en « Démontre que ABDC est

[r]