Vous êtes sur la page 1sur 47

Chapitre 2.

Les Langages de requêtes

1. Introduction
1.1 Langage
Un langage de manipulation de données (LMD) se compose:
- d’un ensemble de commandes permettant d’interroger une
base de données et,
-d’un ensemble de commandes permettant de la modifier
(insertion, suppression, et mise à jour).
- Un LMD doit être intégré à un langage de programmation
classique pour réaliser des transactions programmées.
11/26/21 10:00:29 AM Bases de données avancées 2 1
Le modèle relationnel définit de manière
rigoureuse des langages de requêtes simples et
puissants. On peut les classer en deux grandes
classes :

les langages relationnels algébriques et


les langages prédicatifs.

11/26/21 10:00:29 AM Bases de données avancées 2 2


Les LMD relationnels algébriques 

Basés sur l’algèbre relationnelle de Codd


Permettent de spécifier quelles sont les
opérations à exécuter pour calculer le résultat
de la requête. (le langage SQL).

11/26/21 10:00:29 AM Bases de données avancées 2 3


SQL est une version orientée utilisateur de
l’algèbre relationnelle. Par exemple la requête
suivante :
Π(σ(depot ⋈ livraison; adresse= « Sidi-bel-Abbès ») ;
code)
est exprimée en SQL par :
SELECT code FROM depot, livraison
WHERE (depot.no_depot=livraison.no_depot)
AND (adresse=« Sidi-bel-Abbès ») ;
11/26/21 10:00:29 AM Bases de données avancées 2 4
Les LMD relationnels prédicatifs

Un langage prédicatif permet de ne spécifier que le


résultat cherché (pas comment le calculer).
Ceci par la spécification des prédicats qui doivent
être vérifiées par les données pour former le
résultat. Ce sont des langages déclaratifs.
Ces langages sont basés sur le calcul de prédicats
(logique de premier ordre). Ce type de langage est
donc plus simple qu’une algèbre 

11/26/21 10:00:29 AM Bases de données avancées 2 5


Il existe deux types de langages prédicatifs :
 Le calcul relationnel de tuples (CRT): les variables
dans les expressions logiques portent sur les tuples
des relations (Le langage QUEL se base sur CRT).
Exemple : x є Etudiant
 Le calcul relationnel de domaines (CRD) : les
variables dans les expressions logiques portent sur
les valeurs des attributs des tuples (Le langage
QBE se base sur CRD).
Exemple : x є Etudiant.nom
11/26/21 10:00:29 AM Bases de données avancées 2 6
1.2 Requête
Une requête est appliquée à des instances de
relations ;
Le résultat d’une requête est une instance de
relation ;
Le schéma de la relation résultat est déterminé
par la définition des constructeurs du langage de
requête utilisé.

11/26/21 10:00:30 AM Bases de données avancées 2 7


 2. Le calcul relationnel de tuples

2.1 Définition
Une requête dans ce langage est composée de deux
parties : une partie déclarative et une expression de calcul.
La partie déclarative associe des variables aux relations de
la base données qui sont utilisées dans la requête :
x є R : x désignera les tuples de la relation R ; (x porte sur R)
y є RUT : y désignera indifféremment les tuples des relations
R et T, pourvu qu’il existe dans R et T des attributs
compatibles deux à deux ( même nom même domaine) ;

11/26/21 10:00:30 AM Bases de données avancées 2 8


L’expression a la forme :
{x.A, y.B, …, z.D/ fx,y,…,z,t,u,v…,w}
Où x,y,…,z,t,u,v…,w sont des variables dont la portée a été
déclarée auparavant :
x є R1, y є R2, …, z є Ri, t є Rj, …, w є Rn, A, B, C, …,D sont
des attributs des relations correspondantes,
fx,y,...,z,t,…,w est une formule valide ayant pour
variables libres x, y,...z, et
pour variables liées t, u, …,w.
La valeur de cette expression est une projection sur les
attributs A,B,...,D du produit cartésien des relations
correspondantes aux variables libres
R1x R2x... xRi, produit réduit aux tuples pour lesquels la
formule fx,y,...,z,t,…,wBases
11/26/21 10:00:30 AM
est vraie.
de données avancées 2 9
Exemples :
soit une base de données avec les trois relations suivantes:

Etudiant (nom, prénom, année de naissance, n°étudiant)


Inscription (n°étudiant, nom cours, note1, note2)
Enseignant (nom, prénom, statut)
Requête : nom et prénom des étudiants nés après 1990
e єEtudiant
{e.nom, e.prénom / e.année de naissance > 1990}
Requête : numéro, prénom et notes des étudiants de nom
Amine inscrits au cours BD
e є Etudiant, i є Inscription
{e.n°étudiant, e.prénom, i.note1, i.note2 / e.nom = 'Amine'
⋀ e.n°étudiant Bases de⋀
11/26/21 10:00:30 AM = i.n°étudiant i.nom
données avancées cours
2 = 'BD'} 10
2.2 Formules valides

Les formules valides sont construites à partir des quatre règles


suivantes :
1/ Une condition de la forme x.A θ a ou x.A θ y.B est une
formule valide (θ désigne l'un des
opérateurs de comparaison, =,≠,<,<=,>,>=, et a une constante);
2/ Si f, f1 et f2 sont des formules valides, alors
(f), ╗f, f1 ⋀ f2, f1vf2 sont aussi des formules valides;
3/ Si fx est une formule valide où x est une variable libre, alors
∃x(fx) et ∀x(fx) sont des formules valides où x est une
variable liée;
4/ Rien d'autre n'est une formule valide.
11/26/21 10:00:30 AM Bases de données avancées 2 11
Définition: Une variable est dite liée (quantifiée)
dans une formule si elle est associée au
quantificateur existentiel ∃, ou au quantificateur
universel ∀. Elle est dite libre sinon.
Exemples de formules valides:
e.année de naissance > 1990 (condition du type x.A
θ a, e est une variable libre)
e.n°étudiant=i.n°étudiant (condition du type x.A θ
y.B, e et i sont des variables libres)
i.note1=16 v i.note2=16
(formule du type f1v f2, i est une variable libre)

11/26/21 10:00:30 AM Bases de données avancées 2 12


∃ i (i.note1 = 16 ⋀ i.note2 = 16)
(formule du type ∃ x(fx), i est une variable liée).

La dernière formule peut être utilisée, par exemple, pour


retrouver les étudiants ayant brillamment réussi dans un
cours (les notes pour ce cours sont égales à 16):
e∊Etudiant, i∊Inscription;
{e.nom,e.prénom / ∃ i (e.n°étudiant = i.n°étudiant ⋀ i.note1 =
16 ⋀ i.note2 = 16)}

Pour connaître les étudiants qui ont brillamment réussi tous


leurs cours, on utilisera l'expression:
{e.nom,e.prénom / ∀ i (e.n°étudiant ≠ i.n°étudiant v ╗(i.note1
= 16 ⋀ i.note2 = 16)) v ∃ i (e.n°étudiant = i.n°étudiant)}
11/26/21 10:00:30 AM Bases de données avancées 2 13
2.3 Rappels sur la logique du premier ordre

On peut toujours mettre une formule valide sous


forme prénexe (tous les quantificateurs en préfixe):
Q1x1,Q2x2,...,Qnxn (fx1,x2,...xn)
où Qi ∊{∃,∀} et fx1,x2,...xn est une formule valide
sans quantificateur.
L'ensemble ⋀,⋁,╗ est redondant, dans la mesure
où:
f1 ⋀ f2 ≡ ╗ (╗f1 ⋁ ╗f2)

11/26/21 10:00:31 AM Bases de données avancées 2 14


• De même, on peut se passer du quantificateur
universel, ∀ dans la mesure où:
• ∀x (f) ≡ ╗ (∃x(╗f))
• L'implication (qui ne fait pas partie des opérateurs
de comparaison des calculs relationnels) peut
s'écrire de la façon suivante:
• f1⇒f2 ≡ ╗f1 ⋁ f2
• Les formules avec quantificateurs qui portent sur
un ensemble vide se traitent de la façon suivante:
• ∀x (fx) où x porte sur un ensemble vide ≡ Vrai

11/26/21 10:00:31 AM Bases de données avancées 2 15


∃x (fx) où x porte sur un ensemble vide ≡ Faux
et ceci quelle que soit la formule fx .

On peut montrer que le calcul de tuples peut


exprimer tous les opérateurs de l'algèbre et vice-
versa.

Ces deux langages ont la même puissance


d'expression.
11/26/21 10:00:31 AM Bases de données avancées 2 16
2.4 Quantificateurs universels et existentiels

2.4.1 Variable libre, variable liée


Une occurrence d’une variable de tuple dans
une formule f qui est un atome est libre dans f;

Une occurrence d’une variable de tuple t dans


une formule de le forme f1 ⋀ f2, f1vf2, ╗f1,
╗f2, est libre ou liée dépend du fait qu’elle soit
libre ou liée dans f1 ou f2;

11/26/21 10:00:31 AM Bases de données avancées 2 17


Toutes les occurrences libres d’une variable de
tuple t dans f sont liées dans f’ de la forme:
f’=∃t(f)ou f’=∀t(f)
Exemples:
Soit la base de données suivante:
Employe(NE, nom, prenom, grade, date-nais,
adresse, salaire, supérieur, ndept)
Departement(ndept, nomdept, directeur, date)
Projet(Np, nomp, local, ndept)
Travaille-sur(NE, Np, heure)
Dépendant(NE, nomdependant, date-nais, relation)
11/26/21 10:00:31 AM 18
Bases de données avancées 2
Soient les formules:
f1: d.nomdept= ‘recherche’
f2: (∃t)(d.ndept= t.ndept)
f3: (∀d)(d.directeur=100)
d est libre dans f1 et f2 et liée dans f3
t est liée dans f2;

11/26/21 10:00:31 AM 19
Bases de données avancées 2
Si f est une formule, alors la formule :
 (∃t)(f) est vraie si f est vraie pour certains(au
moins un) tuples affectés aux occurrences libres de
t dans f; sinon (∃t)(f) est fausse

 (∀t)(f) est vraie si f est vraie pour tous tuple(dans


le domaine) affecté aux occurrences libres de t
dans f; sinon (∀t)(f) est fausse

11/26/21 10:00:31 AM 20
Bases de données avancées 2
2.5 Exemples de requêtes
2.5.1 Requêtes avec quantificateur existentiel
Requête1
« Noms et adresses de tous les employés qui
travaillent dans le département de recherche »

{t.nom, t.adresse/ Employe(t) ⋀(∃d)(departement(d)


⋀ d.nomdept= ‘recherche’ ⋀ d.Ndept=t.Ndept)}

11/26/21 10:00:31 AM 21
Bases de données avancées 2
Requête2
« Pour chaque projet localisé à Oran donnez le
numéro de projet, numéro du département, nom
du directeur, sa date de naissance et son adresse »

{p.Np, p.Ndept, m.nom, m.date-nais, m.adresse/


Projet(p) ⋀ Employe(m) ⋀ p.local=‘Oran’ ⋀
((∃d) (departement(d) ⋀ p.Ndept=d.Ndept ⋀
d.directeur=m.NE)) }

11/26/21 10:00:32 AM 22
Bases de données avancées 2
Requête3
« Donnez pour chaque employé son nom et prénom
ainsi que le nom et prénom de son supérieur »
{ e.nom, e.prenom, s.nom, s.prenom/ Employe(e)⋀
Employe(s) ⋀ s.NE=e.superieur }
Requête4
« Donnez le nom de chaque employé qui travaille sur
certains projets du département 5 »
{e.nom/ Employe(e)⋀ ((∃x) (∃w)(projet(x) ⋀
travaille-sur(w) ⋀ x.Ndept=5 ⋀ w.NE=e.NE ⋀
x.NP=w.NP))}
11/26/21 10:00:32 AM 23
Bases de données avancées 2
Requête5
« Donnez les n° de projets qui nécessitent un
employé de nom Amine en tant que travailleur ou
directeur du département du projet »
{p.NP / Project(p) ⋀ ( ( (∃e)(∃ w)(Employe(e) ⋀
Travaille-sur(w) ⋀ w.NP=p.NP ⋀ e.nom=‘Amine' ⋀
e.NE=w.NE) )

( (∃ m)(∃ d)(Employe(m) ⋀ Department(d) ⋀
p.Ndept=d.Ndept ⋀ d.directeur=m.NE ⋀
m.nom=‘Amine') ) ) }

11/26/21 10:00:32 AM 24
Bases de données avancées 2
2.5.2 Transformation des quantificateurs universels
et existentiels

On peut toujours transformer un quantificateur


universel en quantificateur existentiel et vice versa.

(∀ x) (P(x)) ≡ ‫∃(ר‬x) (‫( ר‬P(x)))


(∃ x) (P(x)) ≡ ‫ ∀( ר‬x) (‫(ר‬P(x)))
(∀ x) (P(x) ⋀ Q(x)) ≡ ‫ ∃( ר‬x) (‫( ר‬P(x)) ⋁ ‫( ר‬Q(x)))
(∀ x) (P(x) ⋁ Q(x)) ≡ ‫ ∃( ר‬x) (‫( ר‬P(x)) ⋀‫( ר‬Q(x)))

11/26/21 10:00:32 AM 25
Bases de données avancées 2
(∃ x) (P(x)⋁ Q(x)) ≡‫∀(ך‬x) (‫( ך‬P(x)) ⋀ ‫( ך‬Q(x)))
(∃ x) (P(x)⋀ Q(x)) ≡‫∀(ך‬x) (‫( ך‬P(x)) ⋁ ‫( ך‬Q(x)))

Notons aussi que ce qui suit est vrai:


• (∀ x) (P(x))⇒ (∃x) (P(x))
• ‫ ∃( ך‬x) (P(x)) ⇒ ‫ ∀( ך‬x) (P(x))

11/26/21 10:00:32 AM 26
Bases de données avancées 2
2.5.3 Requêtes avec quantificateur universel

Requête6
« Noms et prénoms des employés qui travaillent
dans tous les projets du département 5 »

{e.nom, e.prenom / Employe(e) ⋀((∀x) ( ‫ך‬


(Projet(x)) ⋁ ‫( ך‬x. Ndept=5)
⋁( (∃ w)(Travaille-sur(w) ⋀ w.NE=e.NE ⋀
x.NP=w.NP) ) ) ) }
11/26/21 10:00:32 AM 27
Bases de données avancées 2
Nous détaillons cette requête:

{e.nom, e.prenom / Employe(e) ⋀ F' }


F' = ( (∀x) (‫(ך‬Projet(x)) ⋁ F1) )
F1 = ‫( ך‬x. Ndept=5) ⋁F2
F2 = ( (∃ w)(Travaille-sur(w) ⋀ w.NE=e.NE ⋀
x.NP=w.NP) )
(explication au cours)

11/26/21 10:00:32 AM 28
Bases de données avancées 2
Autre formulation de requête 6
Par transformation on obtient:
Requete6’:
{e.nom, e.prenom / Employe(e) ⋀( ‫∃( ך‬x)(Projet(x) ⋀
(x. Ndept=5) ⋀
(‫ ∃(ך‬w)(Travaille-sur(w) ⋀ w.NE=e.NE ⋀
x.NP=w.NP))))}

11/26/21 10:00:32 AM 29
Bases de données avancées 2
Requête7
« noms des employés qui n’ont pas de dépendant »

{e. nom/Employe(e) ⋀ (‫∃(ך‬d)(Dependent(d)⋀


e.NE=d.NE))}
Par transformation on obtient:

{e. nom/Employe(e) ⋀ ((∀d) (‫(ך‬Dependent(d))


⋁ ‫( ך‬e.NE=d.NE)))}

11/26/21 10:00:32 AM 30
Bases de données avancées 2
Requête8
« noms des directeurs qui ont au moins un
dépendant »
{e. nom/Employe(e) ⋀ ((∃d) (∃p) (Departement(d)
⋀(Dependent(p)⋀ e. NE=d.directeur ⋀ p.NE=e.NE))}

11/26/21 10:00:33 AM 31
Bases de données avancées 2
2.6 Expressions sûres
En calcul relationnel à chaque fois qu’on utilise les
quantificateurs ∀,∃,‫ ך‬on doit être sûre que
l’expression résultante a un sens.
Une expression sûre dans un calcul relationnel est
celle qui garantit un nombre fini de tuples en
résultat. Sinon, elle est dite non sûre
Ex. {t / ‫( ך‬Employee(t))}

11/26/21 10:00:33 AM 32
Bases de données avancées 2
En introduisant le concept de domaine dans une
expression de calcul on peut définir une expression
sûre. C’est l’ ensemble de toutes les valeurs qui
apparaissent soit comme constantes dans
l’expression ou qui existent dans les relations
indiquées dans l’expression.
Une expression est dite, alors, sûre si toutes les
valeurs de ses résultats sont à partir de son
domaine

11/26/21 10:00:33 AM 33
Bases de données avancées 2
3. Le calcul relationnel de domaines (CRD)
Dans le CRD les variables sont déclarées sur des
valeurs distinctes des domaines des attributs

Une expression en CRD a la forme:


{Xl X2 ... Xn / COND(Xl , X2 ... Xn , Xn+l,Xn+2 ... Xn+m)}
Où Xl , X2 ... Xn , Xn+l,Xn+2 ... Xn+m sont les variables de
domaines et COND condition ou formule.

11/26/21 10:00:33 AM 34
Bases de données avancées 2
Une formule est construite d’atomes:
1. Un atome peut être de la forme R(Xl X2 ... Xj) R nom de
relation de degré j et chaque Xi , avec 1≤i≤j est une
variable de domaine. Cet atome signifie qu’une liste de
valeurs Xl X2 ... Xj doit être un tuple de la relation R.
2. Un atome peut être de la forme Xi op xj
où op∊ {=, <, ≤, >, ≥,≠}, et Xi et xj sont des
variables de domaines.
3. Un atome peut être de la forme Xi op c ou c op xj
op∊ {=, <, ≤, >, ≥,≠}, et Xi et xj sont des
variables de domaines et c est une constante.
11/26/21 10:00:33 AM 35
Bases de données avancées 2
De même que le CRT les formules sont construites en
utilisant des atomes, des variables et des
quantificateurs.
Requête1
« dates de naissances et adresse des employés de
nom Amine »
{uv / (∃ q) (∃ r) (∃ s) (∃ r) (∃ w) (∃ X) (∃ y)
(Employe(qrstuvwxy) ⋀ r=' Amine’)}

Simplification
{uv / (Employe(q, ' Amine’, s, t,u,v,w,x,y)}
11/26/21 10:00:33 AM 36
Bases de données avancées 2
Requête2

« Noms et adresses de tous les employés qui


travaillent dans le département de recherche »

{rv /(∃ y) (∃ I) (∃ m) Employe(qrstuvwxy) ⋀


Department(lmno) ⋀ m=' Recherche' ⋀ l=y)}

11/26/21 10:00:33 AM 37
Bases de données avancées 2
Requête3
« pour chaque projet localisé à Oran, lister les n° de
projets, de département ainsi que le nom ,
adresse, date de naissance du directeur du
département »

{ikruv /(∃ j) (∃ k) (∃ l) (∃ q) (∃ t) (Project(ihjk) ⋀


Employe(qrstuvwxy) ⋀ Department(lmno) ⋀ k=l ⋀
q=n ⋀ j=‘Oran')}

11/26/21 10:00:33 AM 38
Bases de données avancées 2
Requête4
« Noms des employés qui n’ont pas de dépendant »

{r / (∃ q) (Employe(qrstuvwxy) ⋀ (‫ ∃(ך‬I)
(Dependant(lmnop) ⋀ q=l)))}

Ou

{r / (∃ q) (Employe(qrstuvwxy) ⋀ ((∀ I)
(‫(ך‬Dependant(lmnop)) ⋁ ‫( ך‬q=l))))}
11/26/21 10:00:34 AM 39
Bases de données avancées 2
Requête5

« Noms des directeurs qui ont au moins un


dépendant »
{r / (∃ q) (∃ j) (∃ I) (Employe(qrstuvwxy) ⋀
Department(hijk) ⋀ Dependant(lmnop) ⋀ q=j ⋀
I=q)}

11/26/21 10:00:34 AM 40
Bases de données avancées 2
4. Les langages relationnels complets
4.1 Définition
La complétude relationnelle d'un langage de base de
données signifie qu'on doit pouvoir exprimer les
opérateurs de l'algèbre relationnelle (ou les
opérateurs équivalents du calcul relationnel) dans
un tel langage.
Par exemple, le langage SQL (Structured Query
Language) est considéré comme un mélange de
l'algèbre relationnelle et du calcul relationnel.
Le langage QUEL (Query Language) illustre
l'approche du calcul relationnel de tuples .
11/26/21 10:00:34 AM 41
Bases de données avancées 2
Langage graphique QBE (Query by Example) est
un langage qui permet de formuler des requêtes
et d'effectuer des manipulations de données à
l'aide d’une interface graphique . QBE s'appuie sur
le calcul relationnel de domaines tout en offrant
aux utilisateurs la convivialité de l'approche
graphique pour travailler avec les tables.
SQL, QUEL et QBE sont des langages dont la
puissance d’expression est fondée sur l'algèbre
relationnelle et le calcul relationnel. Ils sont donc
considérés à ce titre comme langages relationnels
complets.
11/26/21 10:00:34 AM Bases de données avancées 2 42
4.2 Critère de complétude

Un langage d'interrogation de bases de données


est dit relationnel complet au sens de l'algèbre
relationnelle lorsqu'il permet au moins l'emploi des
opérateurs ensemblistes, l'union, la différence et le
produit cartésien, et des opérateurs relationnels, la
projection et la restriction.
 

11/26/21 10:00:34 AM Bases de données avancées 2 43


Le critère de complétude est déterminant pour
vérifier si un langage de bases de données est
relationnel complet ou non. En effet, un langage
qui permet de manipuler des tables n'est pas
forcément relationnel complet. Par exemple, si
nous ne pouvons pas combiner plusieurs tables
par leurs attributs communs, le langage utilisé
n'est pas équivalent à l'algèbre relationnelle ou
au calcul relationnel. Nous ne pouvons donc pas
le qualifier de langage de base de données
relationnel complet.
11/26/21 10:00:34 AM Bases de données avancées 2 44
4.3 Extension du langage relationnel
Dans un langage relationnel de base de données,
l'algèbre relationnelle et le calcul relationnel
constituent les fondements du module
d'interrogation. Naturellement, outre les opérations
d’analyse de données, nous désirons aussi
manipuler des tables ou des parties de tables. Nous
entendons par là la possibilité d'insérer, de
supprimer ou de modifier des ensembles de tuples.
C'est pourquoi, pour qu'ils soient utiles en pratique,
une extension des langages relationnels complets
s'impose en y incluant les fonctionnalités suivantes :
11/26/21 10:00:34 AM Bases de données avancées 2 45
Le langage doit permettre de créer des tables,
d'effectuer des opérations d'insertion, de
modification et de suppression.
 Le langage doit inclure des fonctions d'agrégation,
permettant de calculer par exemple la somme, le
maximum, le minimum ou la moyenne des valeurs
dans une colonne d'une table.
Le langage doit permettre de formater et de
présenter les tables d'après différents critères, tels
que la séquence de tri ou les ruptures de séquence
par groupes.
11/26/21 10:00:34 AM Bases de données avancées 2 46
Les langages de bases de données relationnelles
doivent absolument comporter des éléments pour
gérer les autorisations d'accès et pour assurer la
protection des bases de données .
Les langages de bases de données relationnelles
doivent prendre en considération l'environnement
multiutilisateur et disposer de commandes pour
garantir la sécurité des données.
Il est avantageux de disposer d'un langage de base
de données relationnelle qui prend en charge des
expressions ou des calculs arithmétiques.
11/26/21 10:00:34 AM Bases de données avancées 2 47

Vous aimerez peut-être aussi