1 SQL Avancé 2011 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs...
158
SQL Avancé 2011 Witold Litwin
1 SQL Avancé 2011 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie
2 Quoi & Pourquoi ? n Possibilits Etendues de Manipulation
de BDs relationnelles n Fondamentales pour lexploration approfondie
Statistiques, prvision de risques, analyse de la tendance Gestion,
Actuariat, ISF
Page 4
3 Exemple canon S P SP
Page 5 Oracle, DB2 mais pas MsAccess n Type d'attribut peut tre
exprim de plusi"> Oracle, DB2 mais pas MsAccess n Type
d'attribut peut tre exprim de plusieurs manires (SQL Oracle):
CHAR(n) VARCHAR(n) FLOAT DECIMAL NUMBER INTEGER SMALLINT LONG LONG
VARCHAR n Types de MsAccess ne sont pas ceux dANSI Revoir mon cours
SQL/QBE de base"> Oracle, DB2 mais pas MsAccess n Type
d'attribut peut tre exprim de plusi" title="4 Synonymes n "Diffrent
de" peut tre exprim de trois manires: != ^= Oracle, DB2 mais pas
MsAccess n Type d'attribut peut tre exprim de plusi">
4 Synonymes n "Diffrent de" peut tre exprim de trois manires:
!= ^= Oracle, DB2 mais pas MsAccess n Type d'attribut peut tre
exprim de plusieurs manires (SQL Oracle): CHAR(n) VARCHAR(n) FLOAT
DECIMAL NUMBER INTEGER SMALLINT LONG LONG VARCHAR n Types de
MsAccess ne sont pas ceux dANSI Revoir mon cours SQL/QBE de
base
Page 6
5 Noms d'attributs n Peuvent contenir des blancs: "Nom de
fournisseur"(Oracle) Dans MSAccess: [Nom de fournisseur] Nom de
fournisseur et Nom de fournisseur dans constantes, clause LIKE Dans
SQL Server [ ] impliquent le respect de la casse n En gnral
interdits: 95BilanCommence avec un chiffre SELECT, DateMots rservs
[A.B] et [A!B] MsAccess Comment faire si besoin ?
Page 7
6 n On peut insrer de tuples dans une vue MsAccess Toute vue
incluant la cl primaire Notamment comme attribut de jointure F Y
compris externe Lien classe sous-classe Le rsultat peut tre
linsertion simultane dans plusieurs tables sources de la vue Le
tuple insr en QBE peut aussi disparatre louverture suivante de la
vue Insertion dans une Vue MsAccess
Page 8
7 n Linsertion en mode QBE (feuille de donnes) dans la vue, de
la cl dun tuple t existant dans une table dont la vue dpend, peut
induire lapparition de tous les autres valeurs dans t n Le tuple
insr en mode QBE peut aussi disparatre louverture suivante de la
vue Insertion dans une Vue MsAccess
Page 9
8 n A exprimenter sur la base S-P Vue SP1 : Select S.[S#],
SNAME, STATUS, CITY, [P#], QTY FROM S, SP Vue SP2 : Select SP.[S#],
SNAME, STATUS, CITY, [P#], QTY FROM S, SP Insertion dans une Vue
MsAccess
Page 10
9 Insertion dans une Vue n Linsertion QBE dun dterminant dans
une vue jointure peut faire apparatre auto la valeur dtermine:
Insertion de Cpostal Ville dans : SELECT P.*, Ville FROM P, C WHERE
P.Cpostal = C.Cpostal ; Avec : P (P#, Nom, CPostal) et C (Cpostal,
Ville) n A exprimenter sur MsAccess Insertion dans une Vue
MsAccess
Page 11
10 n Linsertion QBE dans une vue avec un attribut dynamique,
dune valeur de base de cet attribue, conduit lapparition auto de la
valeur dynamique PrixTTC = PrixHT * 1.2 n Lquivalent des attributs
composs sous SQL Server & autres SGBDs n A exprimenter sur
MsAccess 2007 n Sous MsAccess2010 la table peut avoir les attributs
composs directement. Insertion dans une Vue MsAccess
Page 12
11 MAJ dune Vue MsAccess n On peut mettre jour une vue Toute
vue incluant la cl primaire Notamment comme attribut de jointure F
Y compris externe Lien classe sous-classe Le rsultat peut tre la
MAJ simultane de plusieurs tables sources de la vue n A exprimenter
sur les vues SP1 et SP2
Page 13
12 MAJ dune Vue MsAccess n La MAJ dun dterminant dans une vue
QBE jointure peut faire changer auto le dtermin: MAJ de Cpostal MAJ
Ville dans lexemple avant On peut aussi MAJ Ville Mais on ne peut
pas MAJ Cpostal une valeur qui ne serait pas dans C n A exprimenter
sur les vues prcdentes
Page 14
13 Suppression dans une Vue MsAccess n On peut supprimer des
tuples dans une vue Toute vue mono-table ou un tuple de la vue
correspond un tuple de la table F Pas de DISTINCT, GROUP BY n
Surprise ? On insre un tuple dans une vue V jointure F INSERT V
DELETE V ne peut pas le supprimer n A exprimenter idem
Page 15
14 MsAccess : Lgendes n La lgende a la priorit sur lalias n Si
la lgende de P# dans SP de notre base S-P est Product Id Alors,
lalias Produit est inoprant SELECT SP.[s#], SP.[p#] AS Produit,
SP.qty FROM SP; s#Product IDqty s1p1300 s1p2200 s1p3400 s1p4200
s1p5100 s1p6100 s2p1300
Page 16
15 Expressions de valeur n Peuvent tre des attr. dynamiques,
imbriques dans SQL de MsAccess SELECT Qty, [S#], qty1-4 AS qty2,
qty2/3 AS qty3, 2*qty AS qty1 FROM SP; n Mais ces atttr. ne peuvent
pas tre rfrencs dans la clause WHERE SELECT Qty, [S#], qty1-4 AS
qty2, qty2/3 AS qty3, 2*qty AS qty1 FROM SP where qty1 > 200;
pourquoi ? F Une bonne question pour Microsoft
Page 17
16 Expressions de valeur n Toutefois sous QBE, l'attr. qty1
peut tre rfrenc donc la requte ci-dessus devient lgale F vous avez
dit bizarre ? n Le signe + signifie aussi une concatnation pour les
attributs du type texte, soit a = 2 et b = 3 a+b 23 n Ce qui peu
surprendre dans une requte paramtres Texte est le type par dfaut du
paramtre n Il faut la clause Parameters a int, b int;
Page 18
17 Pour en savoir + sur les attributs dynamiques n Litwin, W.,
Vigier, Ph. Dynamic attributes in the multidatabase system MRDSM,
IEEE-COMPDEC, (Feb. 1986). n Litwin, W., Vigier, Ph. New Functions
for Dynamic Attributes in the Multidatabase System MRDSM. Honeywell
Large Systems Users's Forum, HLSUA XIV, New Orleans, 1987, 467-475.
n Voir le site du CERIA
Page 19
18 UNION et Noms Dattributs SELECT [s#] FROM S Union SELECT
[p#] FROM p Quel nom dattribut sera dans le rsultat Sous MSAccess
Dans SQL Server, MySQL, Oracle
Page 20
19 UNION et ORDER BY SELECT [s#] FROM S Union SELECT [p#] FROM
p Par consquent, o peut-on placer la (ou les) clauses ORDER BY ?
Aprs le 1 er Select et/ou aprs le 2 me ? Quels nom(s) y employer ?
Quel serait le rsultat de ORDER BY [S#] aprs le 2 me SELECT ?
Page 21
20 ORDER BY et expressions de valeur Les expressions de valeur
peuvent tre dans ORDER BY clause: ORDER BY SAL - COMM Exceptions :
UNION, MINUS, INTERSECT Cette clause peut rfrencer l'attribut par
position: Select ENAME SAL 0.75 * (SAL + 500) FROM EMP ORDER BY 3 ;
Un must dans UNION, MINUS, INTERSECT dans Oracle Un alias dans le
1r Select est acceptable dans MsAccess
Page 22
21 ORDER BY et expressions de valeur n ORDER BY clause peut
aussi rfrencer un attribut et une expression qui n'est pas dans
SELECT clause: Select S#, CITY FROM S ORDER BY SNAME STATUS+50 ;
exceptions: UNION, MINUS, INTERSECT DB2 SQL n'avait pas ces
possibilits Aux dernires nouvelles ORDER BY et DISTINCT peuvent tre
en conflit Essayez: SELECT distinct sp.[s#] FROM sp ORDER BY
sp.qty;
Page 23
22 Ordre de priorit d'oprations n 1. Oprateurs de comparaison
logique: = != >= >
43 Sous-requtes n Skyline Tout objet non-domin (cach
totalement) par un autre SELECT X.[s#], X.[p#], qty, delay FROM SP
X where not exists (select * from SP as Y where (Y.qty >= X.Qty
and Y.Delay < X.Delay or Y.qty > X.Qty and Y.Delay
45Sous-requtes n Skyline Il y a une autre formulation utile de
la mme requte Comment formuler ce type de requtes sur n > 2
critres ? F Prix, dlai, dure de garantie Lautre formulation peut
tre un canevas plus commode dans ce but n Loptimisation de requtes
skyline a t la mode dans la recherche sur les BDs il y a quelques
annes.
Page 47
46Sous-requtes n On peut avoir une sous-requte dans la clause
FROM (voir aussi + loin) SELECT Count(*) AS TotalQty FROM (select
distinct qty from sp); n On peut aussi avoir une sous-requte dans
le SELECT SELECT SP.[s#], SP.[p#], qty, (select sum(qty) from sp as
X where X.[s#] = SP.[s#]) AS TotalQty, round(qty/TotalQty, 3) AS
Fraction FROM SP order by [s#];
49 Application aux Probabilits n Que ce que lon calcule ici ?
SELECT (select count(qty) from SP where qty >= [seuil svp ?]) /
count(*) as rsultat FROM SP; n Comment cette requte traite les nuls
? n Comment la modifier pour la probabilit conditionnelle ?
Page 51
50 Clause FROM imbrique n Dfinit une table dans la clause FROM
dune expression de slection SQL (SQL-Select) Cette dernire peut-tre
imbrique son tour Select attrsFROM [tbls], (SQL-Select) Where . ; n
Clause non-documente sous MsAccess La traduction SQL-QBE est bogue
F essayer
Page 52
51 Clause FROM imbrique Possibilits: Agrgations par-dessus
UNION ou UNION ALL Imbrication des expressions de valeur Calcul du
TOP k global Calcul de COUNT (DISTINCT) F MsAccess Rcursivit limite
Pas de tabulation croise dans FROM F Mais la rfrence au nom de la
requte OK
Page 53
52 Clause FROM imbrique SELECT sum(weight) AS [poids-total]
FROM (SELECT weight, p.city FROM P WHERE City like 'l*' UNION ALL
SELECT weight, s.city FROM p, SP, S WHERE p.[p#]=sp.[p#] and
sp.[s#]=s.[s#] and s.City like 'p*');
Page 54
53 Clause FROM imbrique select avg(moy1) as
[moyenne-des-moyennes] FROM (SELECT avg(weight) as moy1 FROM P
WHERE City like 'l*' UNION ALL SELECT avg(weight) as moy1 FROM p,
SP, S WHERE p.[p#]=sp.[p#] and sp.[s#]=s.[s#] and s.City like
'p*');
Page 55
54 Clause FROM imbrique n Totaux partiels et Total Gnral select
Total Gnral' as Total_Id, sum(Sqty) as TotalQty from (SELECT
SP.[s#] as S_Id, Sum(SP.qty) AS Sqty FROM SP GROUP BY SP.[s#])
union all SELECT SP.[s#] as S_Id, Sum(SP.qty) AS Sqty FROM SP GROUP
BY SP.[s#] order by 1 n On peut bien + simple. Comment ?
Page 56
55 Clause FROM imbrique n Totaux partiels et Total Gnral totaux
partiels et total gnral Total_IdTotalQty s11300 s2300 s3400 s4400
Total Gnral 2400
Page 57
56 Valeurs nulles n Si le SGBD value x = y et trouve x,y nuls,
alors l'expression est vraie ou fausse ? n En d'autres termes:
Est-ce que deux nuls peuvent tre gaux ?
Page 58
57 Valeurs nulles n DB2: Oui : UNIQUE, DISTINCT, ORDER BY,
GROUP BY Non : WHERE, HAVING, GROUP BY n Standard: Oui: DISTINCT,
ORDER BY, GROUP BY Non: WHERE HAVING GROUP BY Undefined : UNIQUE n
MsAccess: Oui DISTINCT ? Autres clauses
Page 59
58 Valeurs nulles n Si x est nul et y nest pas, alors: (1) x
> y ou (2) x = y ou (3) x < y ? ex. pour valuer ORDER BY ou
TOP k n DB2 : oui pour (1) ? MsAccess n Standard: soit (1) soit
(3), selon implmentation
Page 60
60 Valeurs nulles n SELECT P_1.* FROM P AS P_1 WHERE p_1.weight
> all (select (py.weight) from P as py where py.color = 'blue');
n SELECT P_1.* FROM p AS P_1 WHERE not exists (select * from P as
py where py.color = 'blue' and py.weight >= p_1.weight ); ?Ces
requtes, sont-elles quivalentes ? ?Test color et weight nuls
?Remplace all par any et vois le rsultat
Page 62
61 Valeurs nulles n Fonctions scalaires peuvent sappliquer aux
nuls ABS, INT, LCASE... (nul) = nul peuvent gnrer une erreur F LOG
(nul) -> #Error n A voir cas par cas
Page 63
62 Fonctions Scalaires Date/Temps SELECT Now() AS now,
Weekday(#30/10/06#) AS [weekday of 30/10/06],
Weekday(#30/10/06#+15) AS [weekday + 15], weekdayname(2) AS
[weekdaynameerror for 30/10/06],
WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for
now ()] FROM S; n Une erreur de calcul du nom du jour de la semaine
existe en version franaise de MsAccess 2003+ La semaine US de
weekday commence le dimanche, celle franaise de weekdayname : le
lundi Donc 2 ci-dessus doit donner lieu au lundi (la ralit pour
30/10/06)
Page 64
63 Fonctions Scalaires Date/Temps SELECT Now() AS now,
TimeValue(Now()) AS timevalue, TimeValue(Now())+TimeValue(Now()) AS
[adding timevalues], hour(now()) AS [hour], month(now()) AS
[month], weekday(datevalue(now())) AS datevalue,
monthname(month(now())) AS monthname, weekday(day(now())-1) AS
[day] FROM S; Notez lerreur non-signale daddition de
date-temps.Notez lerreur non-signale daddition de date-temps (anne
1899).
65 Fonctions Scalaires Date/Temps SELECT now() as now,
#11/07/2009 09:40:09# as DateTest, DateDiff("n", now, DateTest) as
DiffMin, DateDiff("h", now, DateTest) as DiffHour; Test DateDiff
nowDateTestDiffMinDiffHour 07/11/2009 12:03:2607/11/2009
09:40:09-143-3 Voir le Web pour les paramtres optionnels de
DateDiff (DiffDate en mode cration (QBE)
Page 67
66 Fonctions Scalaires Date/Temps Clause LIKE supporte un
format spcifique pour les dates DateV Like Jan/*/2009 Liste tous
les tuples o DateV est de Janvier 2009 DateV Like */15/2009 Liste
tous les tuples o DateV est le 15 dun mois de 2009 On peut se
dbrouiller autrement Comment ?
Page 68
67 Fonction Scalaire RND Permet faire lchantillonnage Trois
fournisseurs avec les fournitures au hasard (on montre RND aussi,
pour lex.) SELECT TOP 3 [s#], rnd(qty) AS rank FROM SP ORDER BY
rnd(qty) DESC; chantillon s#rank S15,02628087997437E-02
S40,518015921115875 s30,75702953338623
Page 69
68 Fonction Scalaire RND Et si on crivait ? SELECT TOP 3 [s#],
rnd() AS rank FROM SP ORDER BY rnd(qty) DESC; Ou SELECT TOP 3 [s#],
rnd([S#]) AS rank FROM SP ORDER BY rnd(qty) DESC; Votre commentaire
ici:
Page 70
69 Fonctions Financires n Fonction DDB n Calcule
l'amortissement dgressif pendant une priode selon un taux spcifi.
DDB(cot, VRsiduelle, VieUtile, Priode [, taux] )
Page 71
70 Fonctions Financires n Fonction DDB n Calcule
l'amortissement dgressif pendant une priode selon un taux spcifi.
DDB(cot, VRsiduelle, VieUtile, Priode [, taux] ) n Valeur rsiduelle
est une valeur dsire seulement Lamortissement devient zro si lon
latteint
Page 72
71 Fonction DDB insert into DDB (cost, salvage, life, factor,
amortiss, period) select 100 as cost, 70 as salvage, 5 as life, 1
as factor, DDB(cost, salvage, life, period, factor) as amortiss,
period ; Rsultat dexcutions pour les priodes = 15 Ordre de choix de
valeurs na pas dimportance Comment calculer aussi la valeur
rsiduelle relle la fin de chaque priode ?
Page 73
72 Fonction DDB INSERT INTO DDB ( cost, salvage, life, factor,
amortiss, period ) SELECT 100 AS cost, 20 AS salvage, 5 AS life,
0.5 AS factor, DDB(cost,salvage,life,period,factor) AS amortiss,
period; Rsultat dexcutions pour les priodes = 15 Ordre de choix de
valeurs na pas dimportance Exprimentez avec dautres taux, notamment
>= life
Page 74
73 n Fonction PMT = Payment de SQL n Fonction Valeur de
Payement VPM en QBE franais Donc dans le Gnrateur dExpressions n
Calcule les annuits dun emprunt dure et taux donnes. Les annuits
apparaissent comme nombres ngatifs Fonction PMT
Page 75
74 Fonction PMT SELECT int(Pmt([rate],[nper],[pv])) AS Annuite,
rate as taux_annuel, nper as nbre_annes, pv as [valeur prsente],
int(Annuite*nper) as valeur_paye, valeur_paye + pv as surprime
Fonction PMT calcul d'annuit d'emprunt Annuitetaux_annuelnbre_annes
valeur prsente valeur_payesurprime
-160490,0520200000-320980-120980
Page 76
75 Placement taux variable n Somme et Fin sont les paramtres
Expression indirecte de lagrgat PRODUCT SELECT
somme*exp(sum(log(1+taux/100))) FROM [placement taux variable]
WHERE [anne relative] between 1 and fin; n Et les nuls que log ne
supporte pas ? Anne relative Taux 14 24 33 45 55 Voir + dans le
livre SQL Design Patterns
Page 77
76 GROUP BY n Est une clause redondante avec le SELECT sous-
requtes n La requte SELECT P#, MAX(QTY) FROM SP GROUP BY P# ; est
quivalente SELECT DISTINCT P#, (SELECT MAX(QTY) FROM SP AS X WHERE
X.P# = SP.P#) FROM SP ; n Testez ! n Ca sapplique toute fonction
agrgat ?Que faire avec les clauses WHERE et HAVING
Page 78
77 LIST n La requte SELECT P#, MAX(QTY), LIST(S#, QTY) FROM SP
GROUP BY P# ; Donne la valeur agrge et les dtails par fournisseur n
Comme les tabulations croises Mais en + simple n LIST nexiste en
standard que sur SQL Anywhere DBMS En mono attribut (2004) n En
MsAccess, LIST (limit) peut tre ralis par : un formulaire avec des
sous-formulaires UNION comme dans Roll Up plus loin
Page 79
78 LIST n Pour en savoir + Litwin, W. Explicit and Implicit
LIST Aggregate Function for Relational Databases. IASTED Intl.
Conf. On Databases & Applications, 2004
Page 80
79 GROUP BY avec WHERE n Clause WHERE SELECT P#, MAX(QTY),
MIN(QTY) FROM SP WHERE S# S1 GROUP BY P# ; est quivalente : SELECT
DISTINCT P#, (SELECT MAX(QTY) FROM SP AS X WHERE X.S# S1 AND X.P# =
SP.P#) AS MAXQ, (SELECT MIN(QTY) FROM SP AS X WHERE X.S# S1 AND
X.P# = SP.P#) AS MINQ FROM SP WHERE S# S1 ; n Peut servir pour
raliser T-GROUP BY (voir plus loin)
Page 81
80 GROUP BY n Les deux formulations ne sont pas toujours
quivalentes SELECT MAX(QTY) FROM SP GROUP BY P# ; nest pas (tout
fait) quivalent : SELECT DISTINCT P#, (SELECT MAX(QTY) FROM SP AS X
WHERE X.P# = SP.P#) FROM SP ; ?Pourquoi
Page 82
81 GROUP BY avec HAVING n La clause HAVING est galement
redondante SELECT P# FROM SP GROUP BY P# HAVING COUNT(*) > 1;
est quivalent : SELECT DISTINCT P# FROM SP, WHERE (SELECT COUNT(*)
FROM SP AS X WHERE X.P# = SP.P#) > 1 ; ?Pourquoi ?Et si on
ajoutait la clause WHERE S# S1
Page 83
82 T-GROUP BY n Propos pour SQL n Permettrait de faire les
groupes par rapport = n Le rle de -join par rapport equi-join n
Ainsi la requte hypothtique: SELECT P#, AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2 FROM SP T-GROUP (QT1 BY P#, QT2 BY P#)
donnerait la quantit moyenne de toute pice autre que la pice P#
avec la quantit moyenne de la pice P#, pour la comparaison
loquente
Page 84
83 T-GROUP BY n On peut raliser la requte prcdente lheure
actuelle sous MsAccess comme: SELECT DISTINCT SP.[p#] AS part,
(SELECT int(avg(QTY)) FROM SP AS X WHERE X.[P#] SP.[P#]) AS
avg_qty_other_parts, (SELECT avg(QTY) FROM SP AS X WHERE X.[P#] =
SP.[P#]) AS part_avg_qty FROM SP; n Vrai ou Faux ?
Page 85
84 T-GROUP BY n Rsultat: partavg_qty_other_partspart_avg_qty
p1250300 p2262250 p3245400 p4260250 p5260250 p6272100
Page 86
85 T-GROUP BY n En savoir +: Litwin, W. Galois Connections,
T-CUBES, & P2P Database Mining. 3rd Intl. Workshop on
Databases, Information Systems and Peer-to-Peer Computing (DBISP2P
2005), VLDB 2005 Springer Verlag (publ.) VLDB 2005
Page 87
86 Rangs Non-Denses (Non Dense Ranking) SELECT [s#], [p#], qty,
(select count(*) from SP as X where X.qty > sp.qty)+1 as [non
dense rank] FROM SP order by qty desc, [s#] asc s#p#qty ND- rank
s4p54001 s3p24001 s1p34001 s4p43004 s2p23004 s1p13004 s4p22007
s1p42007 s1p22007 s4p12007 s1p610011 s1p510011
88 Rangs Denses (Dense Ranking) SELECT [s#], [p#], qty, (select
count(qty) from (select distinct qty from SP as y) as X where X.qty
> sp.qty)+1 AS [D-rank], FROM SP ORDER BY qty DESC, [s#];
s#p#qty D- rank s1p34001 s3p24001 s4p54001 s1p13002 s2p23002
s4p43002 s1p42003 s1p22003 s4p22003 s4p12003 s1p61004 s1p51004
90 Distribution n La probabilit quune pice soit fournie par un
fournisseur Arrondie 3 chiffres dcimaux SELECT DISTINCT SP.[s#],
round((select sum(qty) from SP X where X.[s#] = SP.[s#])/(select
sum(qty) from SP as Y), 3) AS Distribution FROM SP;
92 Distribution Cumulative n La probabilit cumulative quune
pice soit fournie par un fournisseur Arrondie 3 chiffres dcimaux
SELECT DISTINCT SP.[s#], round((select sum(qty) from SP X where
X.[s#] 13 union select P.pname, weight, "Q">
96 Catgorisation n Emploi alternatif dUNION SELECT P.pname,
weight, "Very Heavy" as Warning FROM P where weight > 13 union
select P.pname, weight, "Quite Heavy" as w from p where weight
between 10 and 16 UNION select P.pname, weight, "Light" as warn
from p where weight < 10 ORDER BY warning DESC, weight DESC;
pnameweightWarning cam19Very Heavy cog19Very Heavy bolt17Very Heavy
nut14Very Heavy screw14Very Heavy nut14Quite Heavy screw14Quite
Heavy screw12Quite Heavy Table P est dans S-P du cours
Catgorisation flue (voir nut ) Noms w et warn sont sans imp.
Page 98
97 UNION Prdictions de Valeurs Inconnues n On considre
AVG(Qty1) pour Qty SELECT qty, "predicted value" as [for part],
Avg(Qty1) as [predicted or unknown Qty1] FROM SP group by qty union
SELECT qty, [p#], Qty1 FROM SP as SP1 where qty1 is null order by
qty SP s#p#qtyQty1 s1p1300400 s1p2200 s1p3400600 s1p4200300 s1p5100
s1p6100200 s2p2300500 s3p2400 s4p1200100 s4p2200 s4p4300
s4p5400
Page 99
98 UNION Prdiction de Valeurs Inconnues On peut complter SP par
UPDATE SP Rsultat SP s#p#qtyQty1 s1p1300400 s1p2200 s1p3400600
s1p4200300 s1p5100 s1p6100200 s2p2300500 s3p2400 s4p1200100 s4p2200
s4p4300 s4p5400 qtyfor part predicted or unknown Qty1 100p5
100predicted value200 p2 200predicted value200 300p4 300predicted
value450 400p2 400p5 400predicted value600
Page 100
99 Tendance qtyQty1 100200 300 400 600 SELECT SP.qty, SP.Qty1
FROM SP WHERE (((SP.Qty1) Is Not Null)) ORDER BY SP.qty; SP est
suppos avec la DF entre Qty et Qty1 Tendance : Qty1 est toujours
> Qty, + dcart pour Qty > 300 Graph 3D avec Qty en
abscisses
Page 101
100 Moyenne Glissante SELECT DISTINCT S.date_t, (select
int(avg(prix)) from [serie] X where X.date_t between
S.date_t-jours+1 and S.date_t) AS MoyenneGlisante, date_t-jours+1
as date_d, jours as k FROM [serie] S ORDER BY date_t DESC; Moyenne
Glissante Paramtre date_tMoyGlissdate_dk 30/10/200812027/10/20084
25/10/200813122/10/20084 23/10/200812720/10/20084
17/10/200826914/10/20084 15/10/20086012/10/20084
11/10/200829508/10/20084 09/10/200834006/10/20084
08/10/200832405/10/20084 06/10/200831503/10/20084
Page 102
101 Moyenne Glissante SELECT DISTINCT S.date_t, (select
int(avg(prix)) from [serie] X where X.date_t between
S.date_t-jours+1 and S.date_t) AS MoyenneGlisante, date_t-jours+1
as date_d, jours as k FROM [serie] S ORDER BY date_t DESC;
Graphique avec une info-bulle
Page 103
102 Moyenne Glissante La construction sapplique dautres
fonctions glissantes CSUM (Cumulative (Running) Sums) MAVG MSUM
MDIFF Voir Teradata + loin
Page 104
103 Value at Risk (VaR) Lanalyse de risques Voir le poly et Web
Exemples pour les prts catgoriss Nombre des prts non-rembourss
totalement (par cat.) / Nbre Total Ratio ( 1 X / Y) X somme des
remboursements Y somme attendue des ceux-ci
Page 105
104 Value at Risk Table Prt
Page 106
105 Value at Risk SELECT Prt.Cat AS Cat, Sum(Prt.MAR) AS
TotalMAR, Sum(Prt.MR) AS TotalMR,
Round(1-[TotalMR]/[TotalMAR],3)*100 AS Risque1, (select
Count([Status]) from Prt as X where X.cat = Prt.Cat and status =
-1)/count(*) AS Risque2 FROM Prt GROUP BY Prt.Cat;
Page 107
106 Value at Risk Notez lopposition mutuelle des facteurs de
risque Rsultat
Page 108
107 Sries financires n A partir de valeur(s) donnes on veut
gnrer une srie chronologique 1.Valeur dun placement 2.Taux dintrt n
On veut la valeur aprs 1,220 ans F Pour le taux indiqu, soit T1 F
Pour, soit 1% de plus, soit T2 n On veut voir aussi le gain que T2
offrirait par rapport au T1
Page 109
108 Sries financires SELECT capital, taux, n,
int(capital*(1+taux)^n) as [val aprs n ans], round(taux+0.01,2) as
taux1, int(capital*(1+taux1)^n) as [val1 aprs n ans], [val1 aprs n
ans]- [val aprs n ans] as GainAbs, GainAbs/capital*100 as
[GainRel%] FROM Entiers UNION SELECT capital, taux, n+10 as n1,
int(capital*(1+taux)^n1) as [val aprs n ans], round(taux+0.01,2) as
t, int(capital*(1+t)^n1) as x, x- [val aprs n ans] as z,
z/capital*100 FROM Entiers; Entiers est une table aux. avec la
colonne de1,210
Page 110
109 Sries financires capitaltauxn val aprs n ans taux1 val1
aprs n ans GainAbsGainRel% 1000,0511050,0610611
1000,0521100,0611222 1000,0531150,0611944 1000,0541210,0612655
1000,0551270,0613366 1000,0561340,0614177 1000,0571400,0615010
1000,0581470,0615912 1000,0591550,0616813 1000,05101620,0617917
1000,05111710,0618918 1000,05121790,0620122 1000,05131880,0621325
1000,05141970,0622629 1000,05152070,0623932 1000,05162180,0625436
1000,05172290,0626940 1000,05182400,0628545 1000,05192520,0630250
1000,05202650,0632055
Page 111
110 Sries financires
Page 112
111 Cration dun Portefeuille On veut acheter une collection de
produits financiers de la table Produits Dans la limite L de la
somme donne Jusqu n produit (n = 3 p.ex.) par ensemble On veut
examiner jusqu k collections (k = 20 p.ex.) de prix (cumul) le plus
proche de L En ordre descendant de prix On peut choisir un mme
produit plusieurs fois pour former une collection Plusieurs
actions
113 Cration dun Portefeuille Parameters [Investissement ?]
Integer; select TOP 20 * FROM (SELECT P.[p#] as Produit1, "" as
Produit2, "" as Produit3, P.prix as PrixCumul, "" as Prix1, "" as
Prix2, "" as Prix3, 1 as Nbre, [Investissement ?] as Investissement
FROM Produits P where p.prix 100 ; n Problmes avec des nuls que lon
verra plus tard
Page 121
120 Rollup, Cube, Grouping Sets sous MsAccess n Il y en a pas n
On peut simuler ces manipulations en utilisant GROUP BY UNION ALL
ORDER BY n Peut tre laborieux pour le CUBE
Page 122
121 ROLLUP Remarquez le null as city
Page 123
122 ROLLUP
Page 124
123 ROLLUP Et le CUBE ? Une solution pour l ambigut de certains
nuls ?
Page 125
124 Autres Oprations Utiles Chasse aux valeurs inconnues
Dpendances Fonctionnelles -Interpolation (linaire) Echelle
logarithmique dabscisses -Fonctions scalaires log, int, floor..
Livre de Tropashko (cours 1) Symbolic Data Analysis. Billiard &
Diday Wiley (publ.)
Page 126
125 Sous-Tables Paramtres n La requte de sous-table de MsAccess
peut tre paramtre n On voit, par exemple pour SP, la fraction que
reprsente la pice examine, soit P2, par rapport au total QTY,
galement visible, pour chaque fournisseur de la pice n Seulement
pour les fractions plus grandes quun minimum paramtr
Page 127
126 Sous-Tables Paramtres n Dfinition de la sous-table Noter le
champs de liaison pre/fils
Page 128
127 Sous-Tables Paramtres
Page 129
128 Sous-Tables Paramtres
Page 130
129 Sous-Tables Paramtres
Page 131
130 Sous-Tables Paramtres
Page 132
131 Sous-Tables Paramtres n La requte elle-mme est un peu
complexe Voir le cours SQL Avanc
Page 133
132 Sous-Tables Paramtres n Excution autonome
Page 134
133 Liste de Choix Multibase Liste de choix dans la dfinition
dun attribut peut tre multibase Un fournisseur dans la base S-P ne
pourrait tre choisi que dans une ville dun client de Northwind Un
code postal dans la base Clients devrait tre dans la base nationale
de codes postaux .
Page 135
134 Liste de Choix Multibase Requte : Test-liste-de-choix mdb
SELECT C.[City], C.ContactName FROM [northwind2000].customers AS C
ORDER BY C.City, C.ContactName;
Page 136
135 Liste de Choix Multibase Rsultat On ne peut pas dclarer la
requte MBD directement Pourqoui ? Trs bonne question Microsoft
Page 137
136 Clauses COMPUTE & FOR BROWSE (SQL Server ) n expression
gnrale de slection: SELECT [DISTINCT] attribut(s) FROM table(s)
[WHERE condition] [GROUP BY [ROLLUP | CUBE] field(s) ] [HAVING
condition ] [ORDER BY attribute(s)] [COMPUTE row-agg (colonne),
[row-agg (colonne)]... BY (colonne), [(colonne)]...] [FOR BROWSE]
Clause FOR BROWSE permet une MAJ de donnes dynamiquement
visualises
Page 138
137 Compute n select title, type, price, advance from titles
where ytd_sales is not null order by type desc compute AVG(price),
SUM(advance) by type compute SUM(price), SUM(advance) go n title
typepriceadvance fifty years...trad_cook11.954000 Onions..trad_cook
20.957000 Sushi...trad_cook 14.998000 avg 15.96sum 19000 title
typepriceadvance Computer...psychology21.957000...
psychology........ avg 15.96sum 19000 sum sum 236.0088400 n select
title, type, price, advance from titles where ytd_sales is not null
order by type desc compute AVG(price), SUM(advance) by type compute
SUM(price), SUM(advance) go n title typepriceadvance fifty
years...trad_cook11.954000 Onions..trad_cook 20.957000
Sushi...trad_cook 14.998000 avg 15.96sum 19000 title
typepriceadvance Computer...psychology21.957000...
psychology........ avg 15.96sum 19000 sum sum 236.0088400
Page 139
138 Fonctions Agrgat pour OLAP DB2 n CountBig Pour le nombre de
tuples > 2**31 n Covariance entre des attributs ou des
expressions de valeur n Correlation entre des attributs ou des
expressions de valeur n Regression functions 10 fonctions Les
paramtres de la droite de rgression entre des attributs ou des
expressions de valeur n Rank, Dense_Rank Rank en prsence de
duplicata : 1,2,2,4,4,6 Dense_Rank en prsence de duplicata :
1,2,2,3,3,4
Page 140
139 Fonctions Agrgat pour OLAP DB2 n Fonctions spcifiques DB2
Data Warehouse Center: Analyse de la variance (ANOVA) F
Distributions de Fisher-F F Valeur P Sous-totaux par priode de
temps Test de Chi-carr Statistique T pour n paires de valeurs et
partir du coeff. de corrlation r T = r * ((n 2 ) / (1 - r 2 )) 0.5
T 0 indique une corrlation entre les attributs
Page 141
140 Fonctions Agrgat pour OLAP Teradata n RANK n CSUM
(Cumulative (Running) Sums) n MAVG and MSUM n MDIFF (Moving
Difference) n QUANTILE n QUALIFY n SAMPLE
Page 142
141 SELECT EmployeeName, (HireDate - DATE) AS ServiceDays, RANK
( ServiceDays ) as Seniority FROM Employee ORDER BY EmployeeName;
EmployeeName Service Days Seniority Robyn Baker 9931 2 Nick
Garrison 9931 2 Kyle McVicker 9408 5 Eva OMalley 10248 1 Norma
Powers 9409 4
Page 143
142 SELECT Item, SalesDate, CSUM(Revenue,Item,SalesDate) as
CumulativeSales FROM (SELECT Item, SalesDate, Sum( Sales ) as
Revenue FROM DailySales WHERE StoreId=5 AND SalesDate Between
1/1/1999 and 1/31/1999 GROUP BY Item, SalesDate) AS ItemSales ORDER
BY SalesDate ; Item SalesDate CumulativeSales InstantCOW 01/01/1999
972.99 InstantCOW 01/02/1999 2361.99 InstantCOW 01/03/1999 5110.97
InstantCOW 01/04/1999 7793.91
148 Fermeture transitive n Considre la table COURS (CNOM, PNOM,
NMIN) contenant les cours et leur pr-requis avec les notes
minimales pour l admission en cours ex. (BDs, Str-Ph, 15) n Tout
PNOM est une cl trangre avec CNOM comme cl primaire ailleurs dans
COURS n Un cours peut avoir plusieurs pr-requis n Trouver les noms
de tous les pr-requis de cours CNAME = BDs y compris les pr-requis
de pr-requis etc. n C est le calcul de la fermeture transitive n
Impossible encore sous MsAccess, SQL Server =< 6.5, Oracle,
Informix n Possible sous DB2, partir de V 5.0
Page 150
149 Fermeture transitive (DB2) WITH PRQ (CNOM, PNOM) AS
((SELECT CNOM, PNOM FROM COURS WHERE CNOM = BDs ) UNION ALL (SELECT
C.CNOM, C.PNOM FROM PRQ AS P, COURS AS C WHERE C.CNOM = P.PNOM))
SELECT DISTINCT PNOM FROM PRQ n La requte rcursive s excute tant
que la slection dans PRQ avec PRQ courant nest pas vide. Requte
initiale Requte rcursive Requte finale
Page 151
150 Fermeture transitive Requte initiale (prreq. de BDs 1ere
excution de la Requte rcursive (prreq. de BDs) COURS 2eme excution
de la Requte rcursive (prreq. de prreq. de BDs) 3eme exc. de la RR
(prreq. de prreq. de prreq. de BDs) etc.
155 Fermeture transitive ?Trouver aussi les notes minimales
ncessaires kAutres applications k Tous les subordonnes d un chef
EMPL (E#, ENOM, CHEF) kToutes les composantes PMIN de pices
composes COMP (PMAJ#, PMIN#) kTous les descendants / ascendants d
une personne k Toutes les participations d une entreprise kLimite
dapplication k Pas de cycles entre les attributs slectionnes kpour
que l on a la fermeture transitive (point fixe) kex. pas de
participations rciproques
Page 157
156 Fermeture transitive MsAccess n Il faut simuler par CREATE
TABLE PRQ F avec la cration de cl primaire Insert into PRQ.. select
from COURS... Insert into PRQ.. select from PRQ, COURS F excut
interactivement ou par programme jusqu' ce que le point fixe est
atteint Select FROM PRQ n A complter par vos soins