Вы находитесь на странице: 1из 6

Exercice N°2 Série de TD N°3 et Exercice N°1 Série de TD N°4

On considère le schéma relationnel de la base « BD_Bibliothèque » :


PERSONNES (numPers, nomPers, préPers, âge, numSS, ville).
FILIÈRES (codeFilière, nomFilière).
OUVRAGES (codeOuv, titreOuv, année, prix, Filière #).
ÉCRIRE (Auteur #, Ouvrage #, position).
EMPRUNTS (Lecteur #, Ouvrage #, dateEmprunt, dateRetour).

Écrire en algèbre relationnelle puis en SQL les requêtes suivantes

1. Retourner les ouvrages dont l’année est supérieure à 2014


AR :
Ϭannee >2014 (ouvrages)

SQL :
Select * from ouvrages where annee >2014
Select(SQL) : π (projection de l’AR)
Where (SQL) : ϭ (selection de l’AR)

2. Afficher les personnes (numéro, nom, âge et ville) habitant la ville d’« Alger » ou dont l’âge est
supérieur à 40 ans.
AR :
π numPers, nomPers, âge, ville [ ϭville=’Alger’ (personnes) ∪ ϭage>40 (personnes)]

π numPers, nomPers, âge, ville [ ϭville=’Alger’ ou age>40 (personnes)]

π numPers, nomPers, âge, ville [ ϭville=’Alger’ (personnes)] ∪ π numPers, nomPers, âge, ville [ ϭ age>40 (personnes)]

SQL :
Select numPers, nomPers, âge, ville
From personnes
Where ville=’Alger’ OR age>40

Select numPers, nomPers, âge, ville


From personnes
Where ville=’Alger’ or numPers in
(
Select numPers
From personnes
age>40
)
3. Trouver les ouvrages (code, titre et année) qui ont été empruntés au moins une fois.
AR :
π codeOuv, titreOuv, année [ emprunt ⋈ ouvrages]
ϴ
ϴ : ouvrage =codeouv
SQL :
Select codeOuv, titreOuv, année
From emprunt e, ouvrages o
Where e. ouvrage=o.codouv
------------------------------------------------
Select codeOuv, titreOuv, année
From ouvrages
Where codouv in
(
Select ouvrage
From emprunt
)

4. Les ouvrages (titres) qui ont été empruntés en 2019 ?


AR :
π titreOuv [ ϭ dateEmprunt>= ‘01/01/2019’ and dateEmprunt <= ‘31/12/2019’ (emprunt) ⋈ ouvrages]
ϴ
ϴ : ouvrage =codeouv

SQL :
Select titreOuv
From emprunt e, ouvrages o
Where e. ouvrage=o.codouv and dateEmprunt>= ‘01/01/2019’ and dateEmprunt <= ‘31/12/2019’
------------------------------------------------
Select titreOuv
From ouvrages
Where codouv in
(
Select ouvrage
From emprunt where dateEmprunt>= ‘01/01/2019’ and dateEmprunt <= ‘31/12/2019’
)

5. Les codes et les titres des ouvrages de la filière « Info » et dont le prix n’excède pas 50 Euros.

AR :
Π codeOuv, titreOuv [ ϭnomfiliere= ‘Info’ (filieres) ⋈ ϭprix<50 (ouvrages)]
ϴ
ϴ = filieres.codeFilière= ouvrages.filière
SQL :

Select codeOuv, titreOuv


From ouvrages
Where prix<50 and filiere in
(
Select codefiliere
From filieres
Where nomFilière = ‘Info’
)
6. Les titres des ouvrages écrits par «Cushman Pauline».

Π titreouv [ (ouvrage ⋈ ecrire ) ⋈ ϭnompers=’Cushman’and prepers=’pauline’ (personnes)]


ϴ1 ϴ2
ϴ1 : ecrire.ouvrage=ouvrages.codeouv
ϴ2 : personnes.numpers= ecrire.auteur

SQL :
Select titreouv
From ouvrages
Where codeouv in
(
Select ouvrage
From ecrire
Where auteur in
(
Select numpers
From personnes
Where nompers=’Cushman’and prepers=’pauline’
)
)

7. Les noms et prénoms des lecteurs.


AR :
Π nompers, prepers (personne ⋈ emprunt )
ϴ
ϴ : personne.numpers=emprunt.lecteur
SQL :
Select nompers, prepers
From personnes
Where numpers in
(
Select lecteur From emprunt
)
8. Les numéros et les noms des auteurs habitant la ville d’« Alger ».
AR :
Π numpers, nompers (ϭville=’Alger’ (personne) ⋈ ecrire )
ϴ
ϴ : personne.numpers=ecrire.auteur

SQL :
Select numpers, nompers
From personnes
Where numpers in
(
Select auteur From ecrire
)

9. Les auteurs (numéros et noms) qui sont également lecteurs.


AR :
Π numpers, nompers [personne ⋈ ( ecrire ⋈ emprunt ) ]
ϴ1 ϴ2
ϴ1 : personne.numpers=ecrire.auteur
ϴ2 : ecrire.auteur = emprunt.lecteur
SQL:
Select numpers, nompers
From personnes
Where numpers in
(
Select auteur
From ecrire
Where auteur in
(
Select lecteur From emprunt
)
)

10. Les auteurs (numéros, noms et âges) qui ne sont pas également lecteurs.
AR :
Π numpers, nompers, age [ personne ⋈ (Πnumpers (personne) - αlecteur :numpers(Πlecteur(emprunt)))]
SQL:
Select numpers, nompers , age
From personnes
Where numpers not in
(
Select lecteur from emprunt
)
11. Les personnes (numéros, noms et prénoms) habitant dans la même ville que la personne numéro «
N01 » ?
AR :
Π numpers, nompers, prepers [ personne ⋈ (Πville (ϭnumpers = ‘N01’ (personne))]
SQL :
Select numpers, nompers , prepers
From personnes
Where ville in
(
Select ville from peronnes where numpers=’N01’
)

12. Les informations (numéros, noms, prénoms) de l’auteur principal de chaque ouvrage de la filière «
Inf ».
AR :
Π numpers, nompers, prepers [ personne ⋈ (ϭposition = 1 (ecrire) ⋈ ( ouvrages ⋈ ϭnomfiliere=’Info’ (filieres)) )]
ϴ1 ϴ2 ϴ3
ϴ1 : numpers=auteur
ϴ2 :ouvrage=codeouv
ϴ3 : filiere=codefiliere

SQL :
Select numpers, nompers , prepers
From personnes
Where numpers in
(
Select auteur from ecrire where ouvrage in
(
Select codeouv from ouvrage where filiere in
(
Select codefiliere where nomfiliere = ‘Info’
)
)
)

13. Les personnes ayant emprunté tous les livres de la filière « Inf ».
AR :
Personnes ⋈ (Π lecteur, ouvrage (Emprunt ) /αcodeouv :ouvrage (Π codeouv(ouvrages ⋈ ϭnomfiliere=’Info’(filiere))) )
ϴ1 ϴ2
ϴ1 : numpers=lecteur
ϴ2 : filiere=codefiliere
SQL :

SELECT lecteur
FROM `emprunts`
WHERE ouvrage IN (

SELECT codeouv
FROM ouvrage
WHERE filiere IN (

SELECT codefiliere
FROM filiere
WHERE nomfiliere = 'Info'
)
)
GROUP BY lecteur
HAVING count(distinct ouvrage ) = ( // Nombre d’ouvrage de la filière ‘Info’

SELECT count(distinct codeouv )


FROM ouvrage
WHERE filiere IN (

SELECT codefiliere
FROM filiere
WHERE nomfiliere = 'Info'
)
)

14. Les livres empruntés par toutes les personnes


AR :
Ouvrages ⋈ ( Π ouvrage, lecteur (Emprunt ) /α
numpers:lecteur (Π numpers (personnes)))
ϴ
ϴ : codeouv=ouvrage

SQL :

SELECT ouvrage
FROM `emprunts`
GROUP BY ouvrage

Having count( DISTINCT lecteur )=

(
SELECT count( distinct numpers )
FROM `personne`

Вам также может понравиться