Calcul et SQL - 1 / Djamel Berrabah Calcul relationnel et SQL Calcul relationnel à variables « n-uplet » Calcul relationnel à variables « domaine » Query By Example (QBE) Introduction SQL
Calcul et SQL - 2 / Djamel Berrabah Langage de requête formel : fondé sur la logique des prédicats (sans fonctions) déclaratif : on spécifie ce que doit être le résultat sans dire comment accéder aux données ( algèbre, pas d'opérations) On distingue entre deux types de calcul relationnel selon les types de variables utilisées : calcul n-uplets : les variables désignent des n-uplets calcul domaine : les variables désignent des valeurs dans les domaines d'attributs Calcul relationnel
Calcul et SQL - 3 / Djamel Berrabah Une requête dans le calcul n-uplet a la forme Q(x 1, x 2, …, x n ) = { x 1.A j,…,x 2.A k, …, x n.A m F(x 1, x 2, …, x n ) } où F est une formule logique, x 1, …, x n sont des variables n-uplet, x i.A j désigne l’attribut A j d’une instance (n-uplet) de la variable x i. Calcul relationnel de n-uplets
Calcul et SQL - 4 / Djamel Berrabah Emp (Eno, Ename, Title, City) Project(Pno, Pname, Budget, City) Pay(Title, Salary) Works(Eno, Pno, Resp, Dur) Q(x)={ x.Ename Emp(x) } Q(x)={ x.Pname, x.Budget Project(x) } Q(x)={ x.Title Emp(x) } Q(x)={ x.Ename Emp(x) x.City = ‘Paris’ } Q(x)={ x.City Emp(x) Project(x) } Q(x)={ x.City Project(x) ¬ y( Emp(y) x.City = y.City ) } Exemples de requêtes
Calcul et SQL - 5 / Djamel Berrabah Formules logiques : syntaxe Une formule logique F est une expression composée de atomes opérateurs booléens : conjonction) (disjonction) ¬ (négation) quantificateurs existentiels ( et universels virgules et parenthèses F = formule de la logique du premier ordre sans fonctions
Calcul et SQL - 6 / Djamel Berrabah Atomes du calcul n-uplet Les atomes du calcul sont : les prédicats d’appartenance x R, notés R(x) où R est le nom d’une table ; x est une variable ou un n-uplet. les prédicats de filtrage : x.A y. ou x.A c où x et y sont des variables ; c est une constante ; A et B sont des noms d'attributs ; est un comparateur , ≠, ≤,
Calcul et SQL - 7 / Djamel Berrabah Formules bien formées Tout atome est une formule. Si F et G sont des formules, alors F G, F G, et ¬ F, sont des formules. Si F(x) est une formule avec une variable x, alors x ( F(x) ) et x ( F(x) ) sont des formules bien formées. Remarque: on dit que la variable x est libre dans F(x) et elle est liée (par le quantificateur) dans x ( F(x) ) et x ( F(x) )
Calcul et SQL - 8 / Djamel Berrabah Sémantique : liaisons variables/n-uplets Soit F = F(x 1, x 2, …, x n ) une formule bien formée avec les variables libres x 1, x 2, …, x n. Soit = [x 1 /t 1, x 2 / t 2, …, x n / t n ] une liaison qui lie chaque variable x i un n-uplet t i. On note F = F(t 1, t 2, …, t n ) la formule bien formée qu’on obtient quand on remplace chaque variable libre x i dans F par son n-uplet t i dans .
Calcul et SQL - 9 / Djamel Berrabah Sémantique : valeurs de vérité Soit F une formule bien formée ou toutes les variables libres x i ont été remplacées par un n-uplet t i. F est vraie si F = R(t) et t est un n-uplet dans R (dans la base de données) F = t.A t’. et t.A est inférieur/égal/… à t’.B. F = t.A c et t.A est inférieur/égal/… à c. F = y ( G ) et il existe un n-uplet t, tel que G(t) est vraie. F = y ( G ) et pour tous les n-uplets t, G(t) est vraie. F = G et G et H sont vraies. F = G et G ou H est vraie (« ou » inclusif). F = ¬ G et G est fausse. F est fausse sinon.
Calcul et SQL - 10 / Djamel Berrabah Requête du calcul relationnel : Q(x 1, x 2, …, x n )={x 1.A j,…,x 2.A k, …, x n.A m,… F(x 1, x 2, …, x n )} F est une formule logique, x 1, …, x n sont des variables n-uplet libres dans F, Le résultat de la requête est l’ensemble de tous les n-uplets [t 1.A j,… t 2.A k, …t n.A m,…] obtenus par des liaisons = [x 1 /t 1, x 2 / t 2, …, x n / t n ] telles que F = F(t 1, t 2, …t n ) est vraie. Requêtes et résultats
Calcul et SQL - 11 / Djamel Berrabah Emp (Eno, Ename, Title, City) Project(Pno, Pname, Budget, City) Pay(Title, Salary) Works(Eno, Pno, Resp, Dur) Noms de tous les employés? Q(x)={ x.Ename Emp(x) } la variable libre x est liée à tous les n-uplets de la table Emp Noms de tous les projets avec leurs budgets? Q(x)={ x.Pname, x.Budget Project(x) } : la variable libre x est liée à tous les n-uplets de la table Project Titres (d'emploi) pour lequel il y a au moins un employé? Q(x)={ x.Title Emp(x) } Exemples de requêtes
Calcul et SQL - 12 / Djamel Berrabah Emp (Eno, Ename, Title, City) Project(Pno, Pname, Budget, City) Pay(Title, Salary) Works(Eno, Pno, Resp, Dur) Employés qui travaillent à Paris? Q(x)={x.Ename Emp(x) x.City = ‘Paris’ } x est liée à tous les n-uplets t de Emp où t.City = ‘Paris’ Villes où il y a un employé ou un projet? Q(x)={ x.City Emp(x) Project(x) } x est liée à tous les n-uplets t de Emp et à tous les n-uplets t’ de Project Villes où il y a des projets mais pas d'employés? Q(x)={ x.City Project(x) ¬ y( Emp(y) x.City = y.City ) } Exemples de requêtes
Calcul et SQL - 13 / Djamel Berrabah Emp (Eno, Ename, Title, City) Project(Pno, Pname, Budget, City) Pay(Title, Salary) Works(Eno, Pno, Resp, Dur) Noms des projets de budget > 225? Q(x)={x.Pname Project(x) x.Budget > 225} Noms et budgets des projets où travaille l'employé E1? Q(x)={x.Pname, x.Budget Project(x) y (Works(y) x.Pno=y.Pno y.Eno=‘E1’)} Exemple de requêtes
Calcul et SQL - 14 / Djamel Berrabah Sûreté des requêtes Problème: La taille de Q(x)={ x.A F(x) } doit être finie Exemple: le résultat de Q(x)={ x.A | ¬R(x) } est infini : x est lié à tous les n-uplets qui ne sont pas dans la table R Sûreté: une requête est sûre si, pour toute BD conforme au schéma, le résultat de la requête peut être calculé en utilisant seulement les constantes apparaissant dans la BD et la requête puisque la BD est finie, l'ensemble de ses constantes est fini de même que les constantes de la requête; donc, le résultat de la requête est fini
Calcul et SQL - 15 / Djamel Berrabah Sûreté des requêtes (suite) La caractérisation syntaxique de requêtes sûres est compliquée. Quelques conseils : Toujours commencer une requête par {x.A | R(x) …} Une quantification x doit toujours être suivi d’un atome R(x) : x est bornée aux n-uplets de la table R Éviter d’utiliser et le remplacer par grâce à l’équivalence ( x R(x)) ¬( x(¬R(x))) (on revient sur le point d'avant)
Calcul et SQL - 16 / Djamel Berrabah Calcul de n-uplets et algèbre Théorème: Le calcul relationnel sûr et l'algèbre relationnelle ont une puissance d'expression équivalente (complétude relationnelle) Ou autrement : toutes les requêtes qu'on peut exprimer en utilisant l'algèbre relationnelle (sélection, projection, jointure,...) peuvent être exprimées dans le calcul relationnel (sûr) et vice-versa.
Calcul et SQL - 17 / Djamel Berrabah Traduction: sélection, projection, jointure Deux tables : R ,C) S(C,D) A,B ( R ) ≡ { t.A, t.B | R(t) } (R)) ≡ { t.B | R(t) t.A = 3 } R S ≡ { t.A, t.B, t.C, u.D | R(t) S(u) t.C = u.C } C ( R ) - C ( S ) ≡ { t.C | R(t) ¬ u (S(u) t.C = u.C)
Calcul et SQL - 18 / Djamel Berrabah Traduction de la division R(A,B,C,D) ÷ S(C,D) s’exprime par la requête suivante : R÷S = { x.A, x.B | R(x) u ( S(u) v ( R(v) v.A = x.A v.B = x.B v.C = u.C v.D = u.D ) ) }
Calcul et SQL - 19 / Djamel Berrabah Calcul relationnel et SQL Calcul relationnel à variables « n-uplet » Calcul relationnel à variables « domaine » Query By Example (QBE) Introduction SQL
Calcul et SQL - 20 / Djamel Berrabah Les variables sont définies sur les domaines des attributs : variables de domaines Les atomes sont définis ainsi : appartenance : R(x 1, x 2, …x n ) où n est le degré de R (attention: l’ordre des attributs est important) comparaison: x y ou x c où x et y sont des variables domaines c est une constante , ≠, ≤, est un comparateur Les formules du calcul de domaines sont définies comme pour le calcul de n-uplets, en remplaçant les variables n- uplets par les variables domaines Calcul relationnel de domaines
Calcul et SQL - 21 / Djamel Berrabah Les requêtes sont spécifiées ainsi : Q(x 1, x 2,..., x n )={x 1, x 2,..., x n | F(x 1, x 2,..., x n )} où F est une formule où x 1,..., x n sont des variables de domaine libres. Requêtes dans le calcul domaine
Calcul et SQL - 22 / Djamel Berrabah Emp (Eno, Ename, Title, City) Pay(Title, Salary) Project(Pno, Pname, Budget, City) Works(Eno, Pno, Resp, Dur) Noms et budgets des projets où travaille l'employé E1? Q(b,c)={ b,c a d (Project(a,b,c,d) e,f,g,h (Works(e,f,g,h) a=f e = ‘E1’))} ou Q(b,c)={ b,c a d (Project(a,b,c,d) e,g,h (Works(e,a,g,h) e = ‘E1’)) } ou Q(b,c)={ b,c a d (Project(a,b,c,d) g,h (Works( ‘E1’,a,g,h))) } Exemple de requête
Calcul et SQL - 23 / Djamel Berrabah Calcul relationnel et SQL Calcul relationnel à variables « n-uplet » Calcul relationnel à variables « domaine » Query By Example (QBE) Introduction SQL
Calcul et SQL - 24 / Djamel Berrabah EmpEname CityTitle Project Pno Pname BudgetCity EnoPay SalaryTitle Works Eno Pno RespDur Noms de tous les employés? Requêtes QBE (Query-by- Example) P.
Calcul et SQL - 25 / Djamel Berrabah Noms des projets de budget supérieur à 50? Requêtes QBE (suite) EmpEname CityTitle Project Pno Pname BudgetCity EnoPay SalaryTitle Works Eno Pno RespDur >50P.
Calcul et SQL - 26 / Djamel Berrabah Noms et villes des employés qui travaillent dans un projet pendant plus de 20 mois? Requêtes QBE (suite) EmpEname CityTitle Project Pno Pname BudgetCity EnoPay SalaryTitle Works Eno Pno RespDur P. _X>20 _X
Calcul et SQL - 27 / Djamel Berrabah Conclusion : calcul relationnel Le calcul des prédicats est le fondement théorique des langages de requêtes bases de données (SQL) : Une base de données définit une interprétation finie d’un ensemble de prédicats sans symboles de fonctions (relations). Une requête est une formule Q dont la réponse correspond à l’ensemble des liaisons de variables libres dans Q, tel que BD, = Q.
Calcul et SQL - 28 / Djamel Berrabah Calcul relationnel et SQL Calcul relationnel à variables « n-uplet » Calcul relationnel à variables « domaine » Query By Example (QBE) Introduction SQL
Calcul et SQL - 29 / Djamel Berrabah SQL : interrogation de BD Requêtes d'interrogation simples Requêtes complexes SQL et le calcul relationnel Agrégats et groupement Couplage SQL et langage de programmation
Calcul et SQL - 30 / Djamel Berrabah Requêtes d'interrogation SQL Structure de base d’une requête SQL simples : SELECTvar i.A ik, … attributs FROM R i1 var 1, R i2 var 2 … variables n-uplet WHEREP prédicat/condition où: La variable n-uplet var i « appartient » à la table R ij : R i1 (var 1 ) Les variables dans la projection (clause SELECT) et dans la condition (clause WHERE) doivent être liées dans la clause FROM. Simplifications : Si var j n’est pas spécifiée, alors la variable s’appelle par défaut R ij. Si une seule variable n-uplet possède l’attribut A, on peut écrire plus simplement A (non-ambiguïté).
Calcul et SQL - 31 / Djamel Berrabah Prédicats Prédicats simples : Expression1 Expression2 où Expression1 peut être un attribut ou une expression arithmétique impliquant des attributs, = {, =, =, <>} et Expression2 une expression ou une valeur de domaine Exemples : R.Name = ‘J. Doe’ (S.Age + 30) >= 65 R.A = S.B Prédicats composés : prédicats simples combinés avec les connecteurs logiques AND, OR, NOT
Calcul et SQL - 32 /
Calcul et SQL - 33 /
Calcul et SQL - 34 /
Calcul et SQL - 35 /