Upload
sheri
View
33
Download
0
Embed Size (px)
DESCRIPTION
Calcul de tuple, de domaine et QBE. Witold Litwin. Equivalence de formalismes relationnels. Algèbre (((P WHERE COLOR = 'Red' ) [P#] JOIN SP ) [S#] JOIN S [SNAME] - PowerPoint PPT Presentation
Citation preview
1
Calcul de tuple, de domaine et Calcul de tuple, de domaine et QBEQBE
Calcul de tuple, de domaine et Calcul de tuple, de domaine et QBEQBE
Witold LitwinWitold Litwin
2
Equivalence de formalismes relationnelsEquivalence de formalismes relationnelsEquivalence de formalismes relationnelsEquivalence de formalismes relationnels
AlgèbreAlgèbre(((P WHERE COLOR = 'Red' ) [P#] JOIN SP ) [S#] (((P WHERE COLOR = 'Red' ) [P#] JOIN SP ) [S#]
JOIN S [SNAME]JOIN S [SNAME] Calcul de tuple (les variables de tuple)Calcul de tuple (les variables de tuple)
Range of p is PRange of p is PRange of sp is SPRange of sp is SPRange of s is SRange of s is Ss.SNAME WHERE EXISTS sp ( sp.s# = s.S# AND s.SNAME WHERE EXISTS sp ( sp.s# = s.S# AND EXISTS p (p.COLOR = 'Red' AND p.p# = sp.p#) EXISTS p (p.COLOR = 'Red' AND p.p# = sp.p#)
3
Calcul de tuple: variablesCalcul de tuple: variablesCalcul de tuple: variablesCalcul de tuple: variables
Variables:Variables:– x, y, z parcourent les relationsx, y, z parcourent les relations
» les relations sont définies par la déclaration les relations sont définies par la déclaration RangeRange» l'ordre de parcours n'est pas définil'ordre de parcours n'est pas défini
– les valeurs sont les les valeurs sont les tuplestuples correspondants correspondants
Range of s is SRange of s is Ss = (s.s#, s.sname, s.status, s.city)s = (s.s#, s.sname, s.status, s.city)s = ('123', dupont, 100, Paris)s = ('123', dupont, 100, Paris)
4
Calcul de tuple: variablesCalcul de tuple: variablesCalcul de tuple: variablesCalcul de tuple: variables
Le parcours peut être à travers plusieurs relationsLe parcours peut être à travers plusieurs relations
Range of s is R1, R2...RnRange of s is R1, R2...Rn– Les relations doivent être union-compatiblesLes relations doivent être union-compatibles
les déclarations de parcours peuvent être imbriquéesles déclarations de parcours peuvent être imbriquéesavec les expressions de calcul de tupleavec les expressions de calcul de tuple
Range of s is (s where s.STATUS > 100)Range of s is (s where s.STATUS > 100)
5
Calcul de tupleCalcul de tupleCalcul de tupleCalcul de tuple
Le résultat d'une formule Le résultat d'une formule ff est défini par la est défini par la liste-liste-cible cible qui est qui est une relation aussi:une relation aussi:
(s.s#, s.sname) where f(s)(s.s#, s.sname) where f(s)est une relation avec est une relation avec toutestoutes les valeurs possibles où f(s) = .vrai les valeurs possibles où f(s) = .vrai
Range of s is S Range of sp is SPRange of s is S Range of sp is SP(s.sname, sp.p#) where f(s,sp)(s.sname, sp.p#) where f(s,sp)Range of S is S Range of X is SRange of S is S Range of X is S(name = S.sname, X.sname) where f(S,X)(name = S.sname, X.sname) where f(S,X)
6
Calcul de tuple: Calcul de tuple: clauses et les ops. booléensclauses et les ops. booléens
Calcul de tuple: Calcul de tuple: clauses et les ops. booléensclauses et les ops. booléens
ClausesClauses– x x 'constant' : 'constant' : x = '123' ; y > 'Paris'x = '123' ; y > 'Paris'
– x x y : y : x = y ; x < y ; x <> y x = y ; x < y ; x <> y
Opérateurs booléens relient les clausesOpérateurs booléens relient les clauses– AND, OR, NOT (en optionAND, OR, NOT (en optionet et ))
( x = y AND y > 'Paris' )( x = y AND y > 'Paris' )
( NOT s = 'Paris' )( NOT s = 'Paris' )
La négation est limitée aux relations parcourues (monde La négation est limitée aux relations parcourues (monde fermé)fermé)
7
Calcul de tuple: formulesCalcul de tuple: formulesCalcul de tuple: formulesCalcul de tuple: formules
QuantificateursQuantificateurs
– le quantificateur existentiel le quantificateur existentiel EXISTS (EXISTS ())
– le quantificateur universel le quantificateur universel FORALL (FORALL ())
EXISTS sp (s.s# = sp.s# AND sp.qty > 100)EXISTS sp (s.s# = sp.s# AND sp.qty > 100)
NOT EXISTS sp (s.s# = sp.s#)NOT EXISTS sp (s.s# = sp.s#)
s est une s est une variable librevariable libre
sp est une sp est une variablevariable liéeliée
EXISTS sp ( FORALL p (p.p# = sp.p#))EXISTS sp ( FORALL p (p.p# = sp.p#))
8
FORALL & EXISTSFORALL & EXISTSFORALL & EXISTSFORALL & EXISTS
TautologieTautologie
FORALL x WHERE f(x) FORALL x WHERE f(x)
NOT EXISTS x WHERE NOT f(x)NOT EXISTS x WHERE NOT f(x)
Cette tautologie permet d'éliminer la présence de FORALL Cette tautologie permet d'éliminer la présence de FORALL dans SQL (et autres langages)dans SQL (et autres langages)
toute voiture a un moteur il n'existe pas de voiture sans moteuril n'existe pas de voiture sans moteur
9
Calcul de tuple: Calcul de tuple: union et fonctions agrégatsunion et fonctions agrégats
Calcul de tuple: Calcul de tuple: union et fonctions agrégatsunion et fonctions agrégats
UnionUnion Les opérandes doivent être union-compatiblesLes opérandes doivent être union-compatibles
Range of s is (s where s. CITY = 'Paris'), Range of s is (s where s. CITY = 'Paris'), (s where s.CITY <> 'Paris)(s where s.CITY <> 'Paris)
Fonctions agrégatsFonctions agrégats– Ne font pas partie de calcul de tupleNe font pas partie de calcul de tuple– Sont ajoutées ad-hoc selon leur sémantiqueSont ajoutées ad-hoc selon leur sémantique
SUM (sp.qty) ; DISTINCT (s)SUM (sp.qty) ; DISTINCT (s)
10
Théorème d'équivalenceThéorème d'équivalenceThéorème d'équivalenceThéorème d'équivalence
Toute proposition formulable en algèbre Toute proposition formulable en algèbre relationnelle est formulable en calcul de relationnelle est formulable en calcul de tuple et vice versa.tuple et vice versa.
– Codd, 1978Codd, 1978
11
Utilisations dans les SGBDsUtilisations dans les SGBDsUtilisations dans les SGBDsUtilisations dans les SGBDs
ALPHA (Codd, 1978)ALPHA (Codd, 1978)– Jamais implémenté dans un SGBD commercialJamais implémenté dans un SGBD commercial
QUEL (Stonebraker, Wong, Rowe, 1979)QUEL (Stonebraker, Wong, Rowe, 1979)– Le langage initial de INGRESLe langage initial de INGRES
– Plus puissant que SQLPlus puissant que SQL
SQL (Salinger & al)SQL (Salinger & al)– System R System R
– Ranges facultatifs ; éléments de syntaxe algébriqueRanges facultatifs ; éléments de syntaxe algébrique
12
ExemplesExemplesExemplesExemples
Range of s is SRange of s is S
s.SNAME where (NOT s.CITY = 'Paris) ;s.SNAME where (NOT s.CITY = 'Paris) ;
(s.S# s.CITY) where (s. SNAME = 'IBM) ;(s.S# s.CITY) where (s. SNAME = 'IBM) ;
Range of x is SRange of x is S
(s. SNAME , x. SNAME) where (s. SNAME , x. SNAME) where EXISTS s, x EXISTS s, x (s.SNAME (s.SNAME = x.SNAME AND s.CITY < x. CITY) ;= x.SNAME AND s.CITY < x. CITY) ;
Range of sp is SPRange of sp is SP
(s, sp)(s, sp)
13
ExemplesExemplesExemplesExemples
Range of p is PRange of p is PRange of sp is SPRange of sp is SPRange of s is SRange of s is Ss.SNAME WHERE EXISTS sp ( sp.S# = s.S# AND EXISTS p s.SNAME WHERE EXISTS sp ( sp.S# = s.S# AND EXISTS p
(p.COLOR = 'Red' AND p.p# = sp.p#)(p.COLOR = 'Red' AND p.p# = sp.p#)
s.SNAME WHERE EXISTS sp, p ( sp.S# = s.S# AND s.SNAME WHERE EXISTS sp, p ( sp.S# = s.S# AND p.COLOR = 'Red' AND p.p# = sp.p#)p.COLOR = 'Red' AND p.p# = sp.p#)
» Forme normale prenexialeForme normale prenexiale
s. s.SNAME WHERE EXISTS sp (sp.S# = s.S# AND FORALL s. s.SNAME WHERE EXISTS sp (sp.S# = s.S# AND FORALL p (sp.P# = p.P#) p (sp.P# = p.P#)
SUM (sp.QTY) WHERE EXISTS s (s.s# = '123' AND SUM (sp.QTY) WHERE EXISTS s (s.s# = '123' AND s.s# = sp.s# )s.s# = sp.s# )
14
Calcul de domaines Calcul de domaines (les variables de domaine)(les variables de domaine)Calcul de domaines Calcul de domaines
(les variables de domaine)(les variables de domaine)
les variables parcours les les variables parcours les domaines domaines (valeurs d'attributs)(valeurs d'attributs)
S#:SXS#:SX
- tous les S# - tous les S#
- non-supporté par les SGBDs- non-supporté par les SGBDsSX WHERE S ( S# : SX)SX WHERE S ( S# : SX)
SX WHERE S ( S# : SX, CITY = 'Paris')SX WHERE S ( S# : SX, CITY = 'Paris')
NX WHERE EXISTS SX, PX ( S ( S# : SX, SNAME : NX ) NX WHERE EXISTS SX, PX ( S ( S# : SX, SNAME : NX ) AND SP ( S# : SX, P# : PX ) AND P (P# : PX, COLOR = 'RED') )AND SP ( S# : SX, P# : PX ) AND P (P# : PX, COLOR = 'RED') )
15
Equivalence de formalismes relationnelsEquivalence de formalismes relationnelsEquivalence de formalismes relationnelsEquivalence de formalismes relationnels
Calcul de tuple -> SQLCalcul de tuple -> SQL Calcul de domaines -> QBECalcul de domaines -> QBE
– les domaines peuvent être visualisésles domaines peuvent être visualisés» "squelette" de relations"squelette" de relations
– Les conditions et les variables de domaines Les conditions et les variables de domaines peuvent être placée dans les lignes peuvent être placée dans les lignes correspondantescorrespondantes
– une énorme simplification par rapport à SQLune énorme simplification par rapport à SQL
16
QBEQBEQBEQBE Inventé par Moshe Zloof (act. à HPL)Inventé par Moshe Zloof (act. à HPL) Langage de choix pour les utilisateurs ad-hoc et de Langage de choix pour les utilisateurs ad-hoc et de
SGBDPSGBDP implémenté dans tout SGBD relationnel digne de implémenté dans tout SGBD relationnel digne de
ce nomce nom QBE classique (sans souris) : voir livre de Date p. QBE classique (sans souris) : voir livre de Date p.
352352 QBE moderne: MS Access QBE moderne: MS Access
17
Requête QBERequête QBE
QBE3 mouv. de souris +
frappe de3 caractères !
QBE3 mouv. de souris +
frappe de3 caractères !
SQL
SELECT S.SName, SP.Qty, P.WeightFROM S INNER JOIN (P INNER JOIN SP ON P.[P#] =SP.[p#]) ON S.[S#] = SP.[S#]WHERE ((P.Color="red")) ;
SQL
SELECT S.SName, SP.Qty, P.WeightFROM S INNER JOIN (P INNER JOIN SP ON P.[P#] =SP.[p#]) ON S.[S#] = SP.[S#]WHERE ((P.Color="red")) ;
18
Squelettes des tables sourceset jointures implicites
Squelettes des tables sourceset jointures implicites
Squelette du résultatSquelette du résultat
SelectConditions
domaines
Def. de variables de domaine
Def. de variables de domaine
19
SELECT S.SName, S_1.SNameFROM S INNER JOIN S AS S_1 ON S.City = S_1.CityWHERE ((S_1.SName>[s].[sname]))ORDER BY S.SName;
SELECT S.SName, S_1.SNameFROM S INNER JOIN S AS S_1 ON S.City = S_1.CityWHERE ((S_1.SName>[s].[sname]))ORDER BY S.SName;
Un autre exemplesans commentaire
Un autre exemplesans commentaire
20
Fonctions agrégatsFonctions agrégatsFonctions agrégatsFonctions agrégats
21
Nom par défaut
22
Fonction Count(*)Fonction Count(*)Fonction Count(*)Fonction Count(*)
Exceptionnellement il faut la déclarer Exceptionnellement il faut la déclarer dansdans le le champ (ligne champ (ligne fieldfield))– il faut il faut écrireécrire count(*) count(*)– pas sur la ligne pas sur la ligne totaltotal– autrement une erreur est signaléeautrement une erreur est signalée
En fait on peut faire pareille pour les autres fonctionsEn fait on peut faire pareille pour les autres fonctions– AVG (QTY) à la place de QTY dans la ligne AVG (QTY) à la place de QTY dans la ligne fieldfield– mais, c'est moins commodemais, c'est moins commode– et après le petit tour QBE -> SQL -> QBE, AVG et après le petit tour QBE -> SQL -> QBE, AVG
reviendra à sa place habituelle (ligne Total)reviendra à sa place habituelle (ligne Total)
23
SQL versus QBESQL versus QBESQL versus QBESQL versus QBE
Les requêtes + complexes restent + simples à formuler en SQLLes requêtes + complexes restent + simples à formuler en SQL– celles avec des sous-requêtes par ex.celles avec des sous-requêtes par ex.– les sous-requêtes QBE-Access sont les sous-requêtes QBE-Access sont
» requêtes existantesrequêtes existantes» formulées en SQL (!) dans ligne "Criteria"formulées en SQL (!) dans ligne "Criteria"
– sauf le cas de définition de champs par la sous-requêtesauf le cas de définition de champs par la sous-requête
– EXISTS par exempleEXISTS par exemple Certaines requêtes à MsAccess ne peuvent être formulées qu'en Certaines requêtes à MsAccess ne peuvent être formulées qu'en
SQLSQL– avec UNIONavec UNION
» mais QBE en général supporte cet opérateurmais QBE en général supporte cet opérateur
– en dialecte externe de SQLen dialecte externe de SQL» "passe-through queries" "passe-through queries"
SELECT P_1.*FROM P AS P_1WHERE p_1.weight > all (select (py.weight) from P as py where py.color = 'blue');
25
SELECT P_1.*FROM p AS P_1WHERE not exists (select * from P as py where py.color = 'blue' and py.weight >= p_1.weight );
la suite est visible avec la
touche le zoom
26
Expressions de valeurExpressions de valeurExpressions de valeurExpressions de valeur sont écrites directement dans la grillesont écrites directement dans la grille peuvent devenir des peuvent devenir des attributs dynamiquesattributs dynamiques, ,
nommées et imbriquéesnommées et imbriquées mais un critère ne peut porter alors que sur un mais un critère ne peut porter alors que sur un
attribut dynamique dérivé directement d'un attribut attribut dynamique dérivé directement d'un attribut réelréel– sinon l'execution assume que tout attr. dyn. referé par sinon l'execution assume que tout attr. dyn. referé par
celui avec le critère est un paramètre et le résultat n'a celui avec le critère est un paramètre et le résultat n'a pas de sensepas de sense
– pourquoi ?pourquoi ?» une bonne question à Microsoftune bonne question à Microsoft
27
Requêtes valables ?
28
Pour en savoir + sur les Pour en savoir + sur les attributs dynamiquesattributs dynamiques
Pour en savoir + sur les Pour en savoir + sur les attributs dynamiquesattributs dynamiques
Dynamic attributes in the multidatabase system Dynamic attributes in the multidatabase system MRDSM, IEEE-COMPDEC, (Feb. 1986). With MRDSM, IEEE-COMPDEC, (Feb. 1986). With Vigier, Ph. Vigier, Ph.
New Functions for Dynamic Attributes in the New Functions for Dynamic Attributes in the Multidatabase System MRDSM. Honeywell Multidatabase System MRDSM. Honeywell Large Systems Users's Forum, HLSUA XIV, Large Systems Users's Forum, HLSUA XIV, New Orleans, 1987, 467-475.New Orleans, 1987, 467-475.
29
Jointures implicitesJointures implicitesJointures implicitesJointures implicites Générées à partir de correspondances dans le schémaGénérées à partir de correspondances dans le schéma
– de jointurede jointure» interne, externe gauche, externe droiteinterne, externe gauche, externe droite
– d'intégrité référentielled'intégrité référentielle Créent une expression algébrique dans FROMCréent une expression algébrique dans FROM Des jointures peuvent être invisibles sur le graphe Des jointures peuvent être invisibles sur le graphe
QBE généré QBE généré – des jointures en plus de celles du schémades jointures en plus de celles du schéma– il faut voir l'expr. SQL ou déplacer une tableil faut voir l'expr. SQL ou déplacer une table– le résultat peut être faux ou même inexécutablele résultat peut être faux ou même inexécutable
» à moins de supprimer la jointure invisibleà moins de supprimer la jointure invisible
30
Pourquoi ?Pourquoi ?Pourquoi ?Pourquoi ?
C'est un "C'est un "bugbug""– MsAccess 2MsAccess 2
Pourquoi ?Pourquoi ?– bonne question à Microsoftbonne question à Microsoft
Pour en savoir + sur les jointures implicites en généralPour en savoir + sur les jointures implicites en général– Implicit Joins in the Structural Data Model. IEEE-COMPSAC, Implicit Joins in the Structural Data Model. IEEE-COMPSAC,
Kyoto, (Sep. 1991). With Suk Lee, B., Wiederhold, G.Kyoto, (Sep. 1991). With Suk Lee, B., Wiederhold, G.
31
32
33
34
35
36
37
LimitationsLimitationsLimitationsLimitations
Une correspondance déclarée entre les Une correspondance déclarée entre les attributs d'une même relation ne génère pas attributs d'une même relation ne génère pas de jointure implicitede jointure implicite– À vérifier néanmoins sous MsAccess 2000À vérifier néanmoins sous MsAccess 2000
Pourquoi cette limitation ?Pourquoi cette limitation ?– une bonne questionune bonne question– sans bonne réponse de ma partsans bonne réponse de ma part– à adresser à Microsoftà adresser à Microsoft
38
39
Requêtes multibasesRequêtes multibasesRequêtes multibasesRequêtes multibases
Baseouverte
Espace local de travail
40
Requêtes multibasesRequêtes multibasesRequêtes multibasesRequêtes multibases
On peut les faire en QBE MsAccess (!) On peut les faire en QBE MsAccess (!) – En utilisant les tables préalablement En utilisant les tables préalablement
attachées à la base ouverteattachées à la base ouverte
– En indiquant pour les tables en dehors de la En indiquant pour les tables en dehors de la base ouverte la base source dans "Query base ouverte la base source dans "Query Property", Property", » Cette méthode est recommandéeCette méthode est recommandée» Génère les chemin relatifs au lieu de ceux Génère les chemin relatifs au lieu de ceux
absolusabsolus» Les projets sont + portablesLes projets sont + portables
41
Requêtes multibasesRequêtes multibasesRequêtes multibasesRequêtes multibases Ouvre Ouvre Propriétés de la RequêtePropriétés de la Requête (Query Property) (Query Property)
– Avant d'effectuer le choix de la table par Avant d'effectuer le choix de la table par Ajouter une tableAjouter une table– On voit alors la liste des tables et\ou requêtes dans la base On voit alors la liste des tables et\ou requêtes dans la base
source choisiesource choisie– La base locale (celle ouverte) s'appelle (en cours) ou La base locale (celle ouverte) s'appelle (en cours) ou
(current)(current)– Le changement de source n'ouvre pas une autre base !Le changement de source n'ouvre pas une autre base !– Il peut être nécessaire de rétablir le nom de la base source Il peut être nécessaire de rétablir le nom de la base source
dans les dans les Propriétés de la liste des champsPropriétés de la liste des champs (Field List (Field List Properties) d’une table sélectionnée auparavant Properties) d’une table sélectionnée auparavant
– On peut aussi définir des alias dans les On peut aussi définir des alias dans les Propriétés de la liste Propriétés de la liste des champsdes champs
– Attention à la valeur du Attention à la valeur du Dossier de la base de données par Dossier de la base de données par défaut défaut qui est implicitement pris en compte !qui est implicitement pris en compte !
42
Tabulations Croisées Tabulations Croisées Crosstab QueriesCrosstab Queries
Tabulations Croisées Tabulations Croisées Crosstab QueriesCrosstab Queries
On veut voir en On veut voir en même temps même temps pour chaque pour chaque fourniture SP(S#,P#,QTY) par un fournisseur fourniture SP(S#,P#,QTY) par un fournisseur autre que S1 et pour toute pièce autre que P6autre que S1 et pour toute pièce autre que P6– Quantité totale par S#Quantité totale par S#– Quantité individuelle QTY de chaque fourniture Quantité individuelle QTY de chaque fourniture
En somme : En somme : – On veut voir des agrégats et chaque valeur On veut voir des agrégats et chaque valeur
individuelle agrégéeindividuelle agrégéeP1 P2 P4 P5
200 300 400 200300 400
S# Total
S4 900 S3 200S2 700
43
Tabulations Croisées Tabulations Croisées Crosstab QueriesCrosstab Queries
Tabulations Croisées Tabulations Croisées Crosstab QueriesCrosstab Queries
Comment faire ?Comment faire ?
– Si on fait GROUPBY S#, alors on ne voit plus de Si on fait GROUPBY S#, alors on ne voit plus de valeurs individuelles de QTY de chaque fourniturevaleurs individuelles de QTY de chaque fourniture
– Si on fait GROUPBY S#, P#, alors on ne voit plus Si on fait GROUPBY S#, P#, alors on ne voit plus d'agrégats demandésd'agrégats demandés
Solution MsAccess : Solution MsAccess : – Requête à tabulation croiséeRequête à tabulation croisée
– A demander sur le menu ou par un boutonA demander sur le menu ou par un bouton
» La ligne de tabulation (La ligne de tabulation (crosstabcrosstab) ) s’ajoute alors à la s’ajoute alors à la grille QBEgrille QBE
44
On veut la quantité totale et moyenne pour compliquer
45
46
Tabulations Croisées Tabulations Croisées Tabulations Croisées Tabulations Croisées Pour chaque tuple sélectionné :Pour chaque tuple sélectionné :
– On transforme chaque On transforme chaque valeurvaleur V d'un attribut A V d'un attribut A en en attributattribut V V
» On On pivotepivote la colonne A en la colonne A en têtetêtess de colonnes de colonnes» L’attribut A est déclaré L’attribut A est déclaré tête de colonne tête de colonne sur la ligne sur la ligne
« crosstab »« crosstab »» Toute valeur Pi de P# dans SP devient la colonne PiToute valeur Pi de P# dans SP devient la colonne Pi
P #P1P2P4P5
P1 P2 P4 P5
47
Tabulations Croisées Tabulations Croisées Tabulations Croisées Tabulations Croisées
On assigne comme valeurs d’un attribut V les On assigne comme valeurs d’un attribut V les expressions de valeursexpressions de valeurs d'un autre attribut d'un d'un autre attribut d'un même tuple, déclaré même tuple, déclaré valeur valeur sur la ligne sur la ligne « crosstab »« crosstab »
» On donne à chaque attribut Pi les valeurs de On donne à chaque attribut Pi les valeurs de QTY dans les tuples où P# =PiQTY dans les tuples où P# =Pi
» Une fonction agrégat est Une fonction agrégat est obligatoireobligatoire– Sum(QTY) par exemple Sum(QTY) par exemple
P1 P2 P4 P5
200 300 400 200300 400
48
Tabulations CroiséesTabulations CroiséesTabulations CroiséesTabulations Croisées
On calcule les agrégats "horizontaux" On calcule les agrégats "horizontaux" de nouveaux attributsde nouveaux attributs
» Le calcul habituel d’un GROUP BYLe calcul habituel d’un GROUP BY– SUM(QTY), QVG(QTY)...SUM(QTY), QVG(QTY)...
» L’attribut de GROUP BY et les agrégats sont L’attribut de GROUP BY et les agrégats sont déclarées déclarées têtes de lignetêtes de ligne
P1 P2 P4 P5
200 300 400 200300 400
S# Total
S4 900 S3 200S2 700
49
Tabulations Croisées Tabulations Croisées Tabulations Croisées Tabulations Croisées
Corrigent une limitation de SQL standardCorrigent une limitation de SQL standard– Voir aisément l'agrégat et chaque valeur agrégéeVoir aisément l'agrégat et chaque valeur agrégée
» SUM(QTY) et chaque QTY additionné SUM(QTY) et chaque QTY additionné
Offrent une vue "feuille de calcul" de donnéesOffrent une vue "feuille de calcul" de données Fort utiles, mais hors standard SQL à l’heure actuelleFort utiles, mais hors standard SQL à l’heure actuelle Problèmes de conception propreProblèmes de conception propre
– Clause SQL Having (critère sur l'en-tête de ligne agrégée) Clause SQL Having (critère sur l'en-tête de ligne agrégée) impossible malgré son utilité patenteimpossible malgré son utilité patente
» p.e. le critère sur l'en-tête de ligne QTY spécifiant > 200)p.e. le critère sur l'en-tête de ligne QTY spécifiant > 200)
– Pourquoi ? Bonne question à MicrosoftPourquoi ? Bonne question à Microsoft Pour la formulation SQL, voir mon cours sur SQLPour la formulation SQL, voir mon cours sur SQL
50
51
La largeur du tuple est calculée dynamiquement. Danger pour
la beauté d'un rapport
52
53
54
Plaisant à écrire,n'est ce pas ?
55
Requêtes à paramètresRequêtes à paramètresRequêtes à paramètresRequêtes à paramètres
La sélection dépend de valeur externesLa sélection dépend de valeur externes– celle de paramètrescelle de paramètres– dynamiquement définisdynamiquement définis– dans les champs Critères de la grille QBEdans les champs Critères de la grille QBE
Possibilité utile pour des requêtes Possibilité utile pour des requêtes répétitives à des constantes prèsrépétitives à des constantes près– Les fournisseurs d’une ville donnéeLes fournisseurs d’une ville donnée– Les étudiants d’une formation donnéeLes étudiants d’une formation donnée
56
Requêtes à ParamètresRequêtes à ParamètresRequêtes à ParamètresRequêtes à Paramètres Un paramètre peut se référerUn paramètre peut se référer
– A une valeur demandée directement à l'usager, par un A une valeur demandée directement à l'usager, par un messagemessage, dans une expression, dans une expression
» [[City ?City ? ] ]» Like [Like [City ?City ?] & "*"] & "*"» Between [Between [Min. QTYMin. QTY] And [] And [Max. QtyMax. Qty]]
– deux paramètres sont demandés pour un même attributdeux paramètres sont demandés pour un même attribut
– A une valeur dans un contrôle d'une formeA une valeur dans un contrôle d'une forme» [Forms]![S]![City][Forms]![S]![City]
On peut aussi spécifier le type du paramètreOn peut aussi spécifier le type du paramètre– à travers la commande Paramètres de menu Requêteà travers la commande Paramètres de menu Requête
» Peut-être nécessaire pour les expressions de valeurPeut-être nécessaire pour les expressions de valeur
» Voir le cours sur SQLVoir le cours sur SQL
57
58
59
Conflit de nomsConflit de nomsConflit de nomsConflit de noms
Un paramètre [P] tel qu'il y a un attribut P Un paramètre [P] tel qu'il y a un attribut P dans la requête peut générer un conflit de dans la requête peut générer un conflit de nomnom– dans la requête finale (SQL) c'est le nom du dans la requête finale (SQL) c'est le nom du
paramètre qui aura la prioritéparamètre qui aura la priorité Le résultat peut sembler faux à un usager de Le résultat peut sembler faux à un usager de
QBEQBE Voir le cour sur SQLVoir le cour sur SQL Combine à Combine à éviteréviter
– en QBE en tout casen QBE en tout cas
60
ConclusionConclusionConclusionConclusion Les trois formalismes relationnels sont Les trois formalismes relationnels sont
utilesutiles– Algèbre : optimisationAlgèbre : optimisation– SQL : Programmation des applications complexesSQL : Programmation des applications complexes– QBE : requêtes ad-hocQBE : requêtes ad-hoc
Aucun n'est globalement "plus simple" que Aucun n'est globalement "plus simple" que les autresles autres
QBE reste néanmoins globalement le plus QBE reste néanmoins globalement le plus convivialconvivial
61
Limites de QBE / SQLLimites de QBE / SQL(sous MsAccess)(sous MsAccess)
Limites de QBE / SQLLimites de QBE / SQL(sous MsAccess)(sous MsAccess)
Les requêtes suivantes ne sont possibles qu'en Les requêtes suivantes ne sont possibles qu'en SQLSQL– Avec UNIONAvec UNION
– Avec UNION ALLAvec UNION ALL
– Avec les theta-jointures externes Avec les theta-jointures externes » Opérateur de jointure autre que "="Opérateur de jointure autre que "="
Les sous-requêtes QBE ne s'expriment qu'en SQL Les sous-requêtes QBE ne s'expriment qu'en SQL – Dans la ligne Critères ou ChampDans la ligne Critères ou Champ
62
FINFINFINFIN
63