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

Embed Size (px)

Citation preview

  • Page 1
  • Page 2
  • 1 SQL Avanc 2011 Witold Litwin
  • Page 3
  • 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#];
  • Page 48
  • 47 Sous-requtes Rsultat SP s#p#qty s1p1300 s1p2200 s1p3400 s1p4200 s1p5100 s1p6100 s2p2300 s3p2400 s4p1200 s4p2200 s4p4300 s4p5400
  • Page 49
  • 48 Sous-requtes En Mode Graphique
  • Page 50
  • 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).
  • Page 65
  • 64 Fonctions Scalaires Date/Temps DateDiff ( interval, date1, date2, [firstdayofweek], [firstweekofyear]); IntervalExplanation YyyyYear qQuarter mMonth yDay of year dDay wWeekday wwWeek hHour nMinute sSecond
  • Page 66
  • 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
  • Page 88
  • 87 Rangs Non-Denses (Graphique MsAccess) s#p#qty ND- rank s4p54001 s3p24001 s1p34001 s4p43004 s2p23004 s1p13004 s4p22007 s1p42007 s1p22007 s4p12007 s1p610011 s1p510011
  • Page 89
  • 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
  • Page 90
  • 89 Rangs Denses Graphique MsAccess s#p#qtyD-rank s1p34001 s3p24001 s4p54001 s1p13002 s2p23002 s4p43002 s1p42003 s1p22003 s4p22003 s4p12003 s1p61004 s1p51004
  • Page 91
  • 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;
  • Page 92
  • 91 Rsultat s#Distribution s10,419 s20,097 s30,129 s40,355
  • Page 93
  • 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
  • Page 113
  • 112 Cration dun Portefeuille Produits P#prix p3200 p1200 p2400 p3200 p4100 p6100 p5300 p8300 p7400 p10200 p12300 p13300
  • Page 114
  • 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
  • Page 144
  • 143 SELECT MarketDay,ClosingPrice, MAVG(ClosingPrice,50,MarketDay) as XYZAverage FROM MarketDailyClosing WHERE Ticker = XYZ ORDERBY MarketDay; MarketDay ClosingPrice XYZAverage 12/27/1999 89 1/16 85 1/2 12/28/1999 91 1/8 86 1/16 12/29/1999 92 3/4 86 1/2 12/30/1999 94 1/2 87
  • Page 145
  • 144 SELECT MarketWeek, WeekVolume, MDIFF (WeekVolume,1,MarketWeek)asXYZVolumeDiff FROM (SELECT MarketWeek, SUM(Volume) as WeekVolume FROM MarketDailyClosing WHERE Ticker = XYZ GROUP BY MarketWeek) ORDERBY MarketWeek; MarketWeek WeekVolume XYZVolumeDiff 11/29/1999 9817671 ? 12/06/1999 9945671 128000 12/13/1999 10099459 153788 12/20/1999 10490732 391273 12/27/1999 11045331 554599
  • Page 146
  • 145 SELECT Item, Profit, QUANTILE( 10, Profit ) as Decile FROM (SELECTItem,Sum(Sales)(Count(Sales)*ItemCost) asProfit FROM DailySales, Items WHERE DailySales.Item = Items.Item GROUP BY Item) AS ItemProfit; Item Profit Decile High Tops 97112 9 Low Tops 74699 7 Running 69712 6 Casual 28912 3 Xtrain 100129 9
  • Page 147
  • 146 SELECT Item, Profit, QUANTILE( 100, Profit ) AS Percentile FROM (SELECT Item,Sum(Sales) (Count(Sales)* Items.ItemCost) as Profit FROM DailySales, Items WHERE DailySales.Item = Items.Item GROUP BY Item) AS ItemProfit QUALIFY Percentile = 99; Item Profit Percentile Fat Free Ice Cream 10.79 99 Sugar Free Ice Cream -100.55 99 Fake Chocolate Ice Cream -1110.67 99 Fat/Sugar Free Ice Cream -2913.88 99 Fake Ice Cream -4492.12 99
  • Page 148
  • 147 SELECT customer_id, age, income, marital_status, , SAMPLEID FROM customer_table SAMPLE 0.6, 0.25, 0.15 customer_id age income marital_status... SAMPLEID 1362549 17 0 1 1 1362650 21 17804 2 1 1362605 34 16957 2 1 1362672 50 16319 2 3 1362486 76 10701 3 1 1362500 40 56708 1 3 1362489 35 55888 3 2 1362498 60 9849 2 1 1362551 27 23085 1 1 1362503 18 5787 1.. 2
  • Page 149
  • 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.
  • Page 152
  • 151 Fermeture transitive CNOMPNOM BDsStPh BdsLprg CNOMPNOMNMIN BDsStPh15 BDsLPrg12 StPhInfG13 InfGMath11 LprgInfG12
  • Page 153
  • 152 Fermeture transitive CNOMPNOM BDsStPh BdsLprg CNOMPNOMNMIN BDsStPh15 BDsLPrg12 StPhInfG13 InfGMath11 LprgInfG12 StPhInfG LprgInfG
  • Page 154
  • 153 Fermeture transitive CNOMPNOM BDsStPh BdsLprg CNOMPNOMNMIN BDsStPh15 BDsLPrg12 StPhInfG13 InfGMath11 LprgInfG12 StPhInfG LprgInfG InfGMath
  • Page 155
  • 154 Fermeture transitive CNOMPNOM BDsStPh BdsLprg CNOMPNOMNMIN BDsStPh15 BDsLPrg12 StPhInfG13 InfGMath11 LprgInfG12 StPhInfG LprgInfG InfGMath PNOM StPh InfG Math
  • Page 156
  • 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
  • Page 158
  • 157 FIN FIN
  • Page 159
  • 158