Upload
marvin-albert
View
48
Download
0
Embed Size (px)
DESCRIPTION
SQL Avancé 2010. Witold Litwin. Quoi & Pourquoi ?. Possibilités Etendues de Manipulation de BDs relationnelles Fondamentales pour l’exploration approfondie Statistiques, prévision de risques, analyse de la tendance… Gestion, Actuariat, ISF…. Exemple canon. SP. S. P. Synonymes. - PowerPoint PPT Presentation
Citation preview
1
SQL Avanceacute2010
Witold Litwin
2
Quoi amp Pourquoi
Possibiliteacutes Etendues de Manipulation de BDs relationnelles
Fondamentales pour lrsquoexploration approfondiendash Statistiques preacutevision de risques analyse
de la tendancehellipndash Gestion Actuariat ISFhellip
3
S SNAME STATUS CITYS1 Smith 20 London
S2 Jones 10 Paris
S3 Blake 30 Paris
S4 Clark 20 London
S5 Adams 30 Athens
P PNAME COLOR WEIGHT CITYP1 Nut Red 12 London
P2 Bolt Green 17 Paris
P3 Screw Blue 14 Rome
P4 Screw Red 12 London
P5 Cam Blue 19 Paris
P6 Cog Red 19 London
S P QTYS1 P1 300
S1 P2 200
S1 P3 400
S1 P4 200
S1 P5 100
S1 P6 100
S2 P1 300
S2 P2 400
S3 P2 200
S4 P2 200
S4 P4 300
S4 P5 400
Exemple canon
S
P
SP
4
Synonymes Diffeacuterent de peut ecirctre exprimeacute de trois
maniegraveres= ^= ltgt
ndash Oracle DB2 mais pas MsAccess Type dattribut peut ecirctre exprimeacute de plusieurs
maniegraveres (SQL Oracle)CHAR(n) VARCHAR(n)FLOAT DECIMALNUMBER INTEGER SMALLINTLONG LONG VARCHAR
Types de MsAccess ne sont pas ceux drsquoANSIndash Revoir mon cours SQLQBE de base
5
Noms dattributs Peuvent contenir des blancs
Nom de fournisseur (Oracle) Dans MSAccess
[Nom de fournisseur]lsquorsquoNom de fournisseur rsquorsquo et lsquoNom de
fournisseur rsquo dans constantes clause LIKEhellip Dans SQL Server [ ] impliquent le respect de la
casse En geacuteneacuteral interdits
95Bilan Commence avec un chiffreSELECT Datehellip Mots reacuteserveacutes[AB] et [AB] MsAccess ndash Comment faire si besoin
6
On peut inseacuterer de tuples dans une vue MsAccessndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre lrsquoinsertion simultaneacutee dans plusieurs tables sources de la vue
ndash Le tuple inseacutereacute en QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
7
Lrsquoinsertion en mode QBE (feuille de donneacutees) dans la vue de la cleacute drsquoun tuple t existant dans une table dont la vue deacutepend peut induire lrsquoapparition de tous les autres valeurs dans t
Le tuple inseacutereacute en mode QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
8
A expeacuterimenter sur la base S-P ndash Vue SP1 Select S[S] SNAME STATUS
CITY [P] QTY FROM S SP ndash Vue SP2 Select SP[S] SNAME STATUS
CITY [P] QTY FROM S SP
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
9
Insertion dans une Vue Lrsquoinsertion QBE drsquoun deacuteterminant dans
une vue agrave jointure peut faire apparaicirctre auto la valeur deacutetermineacuteendash Insertion de Cpostal Ville dans
SELECT P Ville FROM P C WHERE PCpostal = CCpostal
Avec
P (P Nom CPostal) et C (Cpostal Ville) A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
10
Insertion dans une Vue Lrsquoinsertion QBE dans une vue avec un
attribut dynamique drsquoune valeur de base de cet attribue conduit agrave lrsquoapparition auto de la valeur dynamiquendash PrixTTC = PrixHT 12
Lrsquoeacutequivalent des attributs composeacutes sous SQL Server amp autres SGBDs
A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
11
MAJ drsquoune Vue MsAccess On peut mettre agrave jour une vue
ndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre la MAJ simultaneacutee de plusieurs tables sources de la vue
A expeacuterimenter sur les vues SP1 et SP2
12
MAJ drsquoune Vue MsAccess La MAJ drsquoun deacuteterminant dans une vue
QBE agrave jointure peut faire changer auto le deacutetermineacutendash MAJ de Cpostal MAJ Ville dans lrsquoexemple
avantndash On peut aussi MAJ Villendash Mais on ne peut pas MAJ Cpostal agrave une
valeur qui ne serait pas dans C A expeacuterimenter sur les vues preacuteceacutedentes
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
2
Quoi amp Pourquoi
Possibiliteacutes Etendues de Manipulation de BDs relationnelles
Fondamentales pour lrsquoexploration approfondiendash Statistiques preacutevision de risques analyse
de la tendancehellipndash Gestion Actuariat ISFhellip
3
S SNAME STATUS CITYS1 Smith 20 London
S2 Jones 10 Paris
S3 Blake 30 Paris
S4 Clark 20 London
S5 Adams 30 Athens
P PNAME COLOR WEIGHT CITYP1 Nut Red 12 London
P2 Bolt Green 17 Paris
P3 Screw Blue 14 Rome
P4 Screw Red 12 London
P5 Cam Blue 19 Paris
P6 Cog Red 19 London
S P QTYS1 P1 300
S1 P2 200
S1 P3 400
S1 P4 200
S1 P5 100
S1 P6 100
S2 P1 300
S2 P2 400
S3 P2 200
S4 P2 200
S4 P4 300
S4 P5 400
Exemple canon
S
P
SP
4
Synonymes Diffeacuterent de peut ecirctre exprimeacute de trois
maniegraveres= ^= ltgt
ndash Oracle DB2 mais pas MsAccess Type dattribut peut ecirctre exprimeacute de plusieurs
maniegraveres (SQL Oracle)CHAR(n) VARCHAR(n)FLOAT DECIMALNUMBER INTEGER SMALLINTLONG LONG VARCHAR
Types de MsAccess ne sont pas ceux drsquoANSIndash Revoir mon cours SQLQBE de base
5
Noms dattributs Peuvent contenir des blancs
Nom de fournisseur (Oracle) Dans MSAccess
[Nom de fournisseur]lsquorsquoNom de fournisseur rsquorsquo et lsquoNom de
fournisseur rsquo dans constantes clause LIKEhellip Dans SQL Server [ ] impliquent le respect de la
casse En geacuteneacuteral interdits
95Bilan Commence avec un chiffreSELECT Datehellip Mots reacuteserveacutes[AB] et [AB] MsAccess ndash Comment faire si besoin
6
On peut inseacuterer de tuples dans une vue MsAccessndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre lrsquoinsertion simultaneacutee dans plusieurs tables sources de la vue
ndash Le tuple inseacutereacute en QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
7
Lrsquoinsertion en mode QBE (feuille de donneacutees) dans la vue de la cleacute drsquoun tuple t existant dans une table dont la vue deacutepend peut induire lrsquoapparition de tous les autres valeurs dans t
Le tuple inseacutereacute en mode QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
8
A expeacuterimenter sur la base S-P ndash Vue SP1 Select S[S] SNAME STATUS
CITY [P] QTY FROM S SP ndash Vue SP2 Select SP[S] SNAME STATUS
CITY [P] QTY FROM S SP
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
9
Insertion dans une Vue Lrsquoinsertion QBE drsquoun deacuteterminant dans
une vue agrave jointure peut faire apparaicirctre auto la valeur deacutetermineacuteendash Insertion de Cpostal Ville dans
SELECT P Ville FROM P C WHERE PCpostal = CCpostal
Avec
P (P Nom CPostal) et C (Cpostal Ville) A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
10
Insertion dans une Vue Lrsquoinsertion QBE dans une vue avec un
attribut dynamique drsquoune valeur de base de cet attribue conduit agrave lrsquoapparition auto de la valeur dynamiquendash PrixTTC = PrixHT 12
Lrsquoeacutequivalent des attributs composeacutes sous SQL Server amp autres SGBDs
A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
11
MAJ drsquoune Vue MsAccess On peut mettre agrave jour une vue
ndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre la MAJ simultaneacutee de plusieurs tables sources de la vue
A expeacuterimenter sur les vues SP1 et SP2
12
MAJ drsquoune Vue MsAccess La MAJ drsquoun deacuteterminant dans une vue
QBE agrave jointure peut faire changer auto le deacutetermineacutendash MAJ de Cpostal MAJ Ville dans lrsquoexemple
avantndash On peut aussi MAJ Villendash Mais on ne peut pas MAJ Cpostal agrave une
valeur qui ne serait pas dans C A expeacuterimenter sur les vues preacuteceacutedentes
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
3
S SNAME STATUS CITYS1 Smith 20 London
S2 Jones 10 Paris
S3 Blake 30 Paris
S4 Clark 20 London
S5 Adams 30 Athens
P PNAME COLOR WEIGHT CITYP1 Nut Red 12 London
P2 Bolt Green 17 Paris
P3 Screw Blue 14 Rome
P4 Screw Red 12 London
P5 Cam Blue 19 Paris
P6 Cog Red 19 London
S P QTYS1 P1 300
S1 P2 200
S1 P3 400
S1 P4 200
S1 P5 100
S1 P6 100
S2 P1 300
S2 P2 400
S3 P2 200
S4 P2 200
S4 P4 300
S4 P5 400
Exemple canon
S
P
SP
4
Synonymes Diffeacuterent de peut ecirctre exprimeacute de trois
maniegraveres= ^= ltgt
ndash Oracle DB2 mais pas MsAccess Type dattribut peut ecirctre exprimeacute de plusieurs
maniegraveres (SQL Oracle)CHAR(n) VARCHAR(n)FLOAT DECIMALNUMBER INTEGER SMALLINTLONG LONG VARCHAR
Types de MsAccess ne sont pas ceux drsquoANSIndash Revoir mon cours SQLQBE de base
5
Noms dattributs Peuvent contenir des blancs
Nom de fournisseur (Oracle) Dans MSAccess
[Nom de fournisseur]lsquorsquoNom de fournisseur rsquorsquo et lsquoNom de
fournisseur rsquo dans constantes clause LIKEhellip Dans SQL Server [ ] impliquent le respect de la
casse En geacuteneacuteral interdits
95Bilan Commence avec un chiffreSELECT Datehellip Mots reacuteserveacutes[AB] et [AB] MsAccess ndash Comment faire si besoin
6
On peut inseacuterer de tuples dans une vue MsAccessndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre lrsquoinsertion simultaneacutee dans plusieurs tables sources de la vue
ndash Le tuple inseacutereacute en QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
7
Lrsquoinsertion en mode QBE (feuille de donneacutees) dans la vue de la cleacute drsquoun tuple t existant dans une table dont la vue deacutepend peut induire lrsquoapparition de tous les autres valeurs dans t
Le tuple inseacutereacute en mode QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
8
A expeacuterimenter sur la base S-P ndash Vue SP1 Select S[S] SNAME STATUS
CITY [P] QTY FROM S SP ndash Vue SP2 Select SP[S] SNAME STATUS
CITY [P] QTY FROM S SP
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
9
Insertion dans une Vue Lrsquoinsertion QBE drsquoun deacuteterminant dans
une vue agrave jointure peut faire apparaicirctre auto la valeur deacutetermineacuteendash Insertion de Cpostal Ville dans
SELECT P Ville FROM P C WHERE PCpostal = CCpostal
Avec
P (P Nom CPostal) et C (Cpostal Ville) A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
10
Insertion dans une Vue Lrsquoinsertion QBE dans une vue avec un
attribut dynamique drsquoune valeur de base de cet attribue conduit agrave lrsquoapparition auto de la valeur dynamiquendash PrixTTC = PrixHT 12
Lrsquoeacutequivalent des attributs composeacutes sous SQL Server amp autres SGBDs
A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
11
MAJ drsquoune Vue MsAccess On peut mettre agrave jour une vue
ndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre la MAJ simultaneacutee de plusieurs tables sources de la vue
A expeacuterimenter sur les vues SP1 et SP2
12
MAJ drsquoune Vue MsAccess La MAJ drsquoun deacuteterminant dans une vue
QBE agrave jointure peut faire changer auto le deacutetermineacutendash MAJ de Cpostal MAJ Ville dans lrsquoexemple
avantndash On peut aussi MAJ Villendash Mais on ne peut pas MAJ Cpostal agrave une
valeur qui ne serait pas dans C A expeacuterimenter sur les vues preacuteceacutedentes
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
4
Synonymes Diffeacuterent de peut ecirctre exprimeacute de trois
maniegraveres= ^= ltgt
ndash Oracle DB2 mais pas MsAccess Type dattribut peut ecirctre exprimeacute de plusieurs
maniegraveres (SQL Oracle)CHAR(n) VARCHAR(n)FLOAT DECIMALNUMBER INTEGER SMALLINTLONG LONG VARCHAR
Types de MsAccess ne sont pas ceux drsquoANSIndash Revoir mon cours SQLQBE de base
5
Noms dattributs Peuvent contenir des blancs
Nom de fournisseur (Oracle) Dans MSAccess
[Nom de fournisseur]lsquorsquoNom de fournisseur rsquorsquo et lsquoNom de
fournisseur rsquo dans constantes clause LIKEhellip Dans SQL Server [ ] impliquent le respect de la
casse En geacuteneacuteral interdits
95Bilan Commence avec un chiffreSELECT Datehellip Mots reacuteserveacutes[AB] et [AB] MsAccess ndash Comment faire si besoin
6
On peut inseacuterer de tuples dans une vue MsAccessndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre lrsquoinsertion simultaneacutee dans plusieurs tables sources de la vue
ndash Le tuple inseacutereacute en QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
7
Lrsquoinsertion en mode QBE (feuille de donneacutees) dans la vue de la cleacute drsquoun tuple t existant dans une table dont la vue deacutepend peut induire lrsquoapparition de tous les autres valeurs dans t
Le tuple inseacutereacute en mode QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
8
A expeacuterimenter sur la base S-P ndash Vue SP1 Select S[S] SNAME STATUS
CITY [P] QTY FROM S SP ndash Vue SP2 Select SP[S] SNAME STATUS
CITY [P] QTY FROM S SP
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
9
Insertion dans une Vue Lrsquoinsertion QBE drsquoun deacuteterminant dans
une vue agrave jointure peut faire apparaicirctre auto la valeur deacutetermineacuteendash Insertion de Cpostal Ville dans
SELECT P Ville FROM P C WHERE PCpostal = CCpostal
Avec
P (P Nom CPostal) et C (Cpostal Ville) A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
10
Insertion dans une Vue Lrsquoinsertion QBE dans une vue avec un
attribut dynamique drsquoune valeur de base de cet attribue conduit agrave lrsquoapparition auto de la valeur dynamiquendash PrixTTC = PrixHT 12
Lrsquoeacutequivalent des attributs composeacutes sous SQL Server amp autres SGBDs
A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
11
MAJ drsquoune Vue MsAccess On peut mettre agrave jour une vue
ndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre la MAJ simultaneacutee de plusieurs tables sources de la vue
A expeacuterimenter sur les vues SP1 et SP2
12
MAJ drsquoune Vue MsAccess La MAJ drsquoun deacuteterminant dans une vue
QBE agrave jointure peut faire changer auto le deacutetermineacutendash MAJ de Cpostal MAJ Ville dans lrsquoexemple
avantndash On peut aussi MAJ Villendash Mais on ne peut pas MAJ Cpostal agrave une
valeur qui ne serait pas dans C A expeacuterimenter sur les vues preacuteceacutedentes
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
5
Noms dattributs Peuvent contenir des blancs
Nom de fournisseur (Oracle) Dans MSAccess
[Nom de fournisseur]lsquorsquoNom de fournisseur rsquorsquo et lsquoNom de
fournisseur rsquo dans constantes clause LIKEhellip Dans SQL Server [ ] impliquent le respect de la
casse En geacuteneacuteral interdits
95Bilan Commence avec un chiffreSELECT Datehellip Mots reacuteserveacutes[AB] et [AB] MsAccess ndash Comment faire si besoin
6
On peut inseacuterer de tuples dans une vue MsAccessndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre lrsquoinsertion simultaneacutee dans plusieurs tables sources de la vue
ndash Le tuple inseacutereacute en QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
7
Lrsquoinsertion en mode QBE (feuille de donneacutees) dans la vue de la cleacute drsquoun tuple t existant dans une table dont la vue deacutepend peut induire lrsquoapparition de tous les autres valeurs dans t
Le tuple inseacutereacute en mode QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
8
A expeacuterimenter sur la base S-P ndash Vue SP1 Select S[S] SNAME STATUS
CITY [P] QTY FROM S SP ndash Vue SP2 Select SP[S] SNAME STATUS
CITY [P] QTY FROM S SP
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
9
Insertion dans une Vue Lrsquoinsertion QBE drsquoun deacuteterminant dans
une vue agrave jointure peut faire apparaicirctre auto la valeur deacutetermineacuteendash Insertion de Cpostal Ville dans
SELECT P Ville FROM P C WHERE PCpostal = CCpostal
Avec
P (P Nom CPostal) et C (Cpostal Ville) A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
10
Insertion dans une Vue Lrsquoinsertion QBE dans une vue avec un
attribut dynamique drsquoune valeur de base de cet attribue conduit agrave lrsquoapparition auto de la valeur dynamiquendash PrixTTC = PrixHT 12
Lrsquoeacutequivalent des attributs composeacutes sous SQL Server amp autres SGBDs
A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
11
MAJ drsquoune Vue MsAccess On peut mettre agrave jour une vue
ndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre la MAJ simultaneacutee de plusieurs tables sources de la vue
A expeacuterimenter sur les vues SP1 et SP2
12
MAJ drsquoune Vue MsAccess La MAJ drsquoun deacuteterminant dans une vue
QBE agrave jointure peut faire changer auto le deacutetermineacutendash MAJ de Cpostal MAJ Ville dans lrsquoexemple
avantndash On peut aussi MAJ Villendash Mais on ne peut pas MAJ Cpostal agrave une
valeur qui ne serait pas dans C A expeacuterimenter sur les vues preacuteceacutedentes
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
6
On peut inseacuterer de tuples dans une vue MsAccessndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre lrsquoinsertion simultaneacutee dans plusieurs tables sources de la vue
ndash Le tuple inseacutereacute en QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
7
Lrsquoinsertion en mode QBE (feuille de donneacutees) dans la vue de la cleacute drsquoun tuple t existant dans une table dont la vue deacutepend peut induire lrsquoapparition de tous les autres valeurs dans t
Le tuple inseacutereacute en mode QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
8
A expeacuterimenter sur la base S-P ndash Vue SP1 Select S[S] SNAME STATUS
CITY [P] QTY FROM S SP ndash Vue SP2 Select SP[S] SNAME STATUS
CITY [P] QTY FROM S SP
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
9
Insertion dans une Vue Lrsquoinsertion QBE drsquoun deacuteterminant dans
une vue agrave jointure peut faire apparaicirctre auto la valeur deacutetermineacuteendash Insertion de Cpostal Ville dans
SELECT P Ville FROM P C WHERE PCpostal = CCpostal
Avec
P (P Nom CPostal) et C (Cpostal Ville) A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
10
Insertion dans une Vue Lrsquoinsertion QBE dans une vue avec un
attribut dynamique drsquoune valeur de base de cet attribue conduit agrave lrsquoapparition auto de la valeur dynamiquendash PrixTTC = PrixHT 12
Lrsquoeacutequivalent des attributs composeacutes sous SQL Server amp autres SGBDs
A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
11
MAJ drsquoune Vue MsAccess On peut mettre agrave jour une vue
ndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre la MAJ simultaneacutee de plusieurs tables sources de la vue
A expeacuterimenter sur les vues SP1 et SP2
12
MAJ drsquoune Vue MsAccess La MAJ drsquoun deacuteterminant dans une vue
QBE agrave jointure peut faire changer auto le deacutetermineacutendash MAJ de Cpostal MAJ Ville dans lrsquoexemple
avantndash On peut aussi MAJ Villendash Mais on ne peut pas MAJ Cpostal agrave une
valeur qui ne serait pas dans C A expeacuterimenter sur les vues preacuteceacutedentes
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
7
Lrsquoinsertion en mode QBE (feuille de donneacutees) dans la vue de la cleacute drsquoun tuple t existant dans une table dont la vue deacutepend peut induire lrsquoapparition de tous les autres valeurs dans t
Le tuple inseacutereacute en mode QBE peut aussi disparaicirctre agrave lrsquoouverture suivante de la vue
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
8
A expeacuterimenter sur la base S-P ndash Vue SP1 Select S[S] SNAME STATUS
CITY [P] QTY FROM S SP ndash Vue SP2 Select SP[S] SNAME STATUS
CITY [P] QTY FROM S SP
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
9
Insertion dans une Vue Lrsquoinsertion QBE drsquoun deacuteterminant dans
une vue agrave jointure peut faire apparaicirctre auto la valeur deacutetermineacuteendash Insertion de Cpostal Ville dans
SELECT P Ville FROM P C WHERE PCpostal = CCpostal
Avec
P (P Nom CPostal) et C (Cpostal Ville) A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
10
Insertion dans une Vue Lrsquoinsertion QBE dans une vue avec un
attribut dynamique drsquoune valeur de base de cet attribue conduit agrave lrsquoapparition auto de la valeur dynamiquendash PrixTTC = PrixHT 12
Lrsquoeacutequivalent des attributs composeacutes sous SQL Server amp autres SGBDs
A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
11
MAJ drsquoune Vue MsAccess On peut mettre agrave jour une vue
ndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre la MAJ simultaneacutee de plusieurs tables sources de la vue
A expeacuterimenter sur les vues SP1 et SP2
12
MAJ drsquoune Vue MsAccess La MAJ drsquoun deacuteterminant dans une vue
QBE agrave jointure peut faire changer auto le deacutetermineacutendash MAJ de Cpostal MAJ Ville dans lrsquoexemple
avantndash On peut aussi MAJ Villendash Mais on ne peut pas MAJ Cpostal agrave une
valeur qui ne serait pas dans C A expeacuterimenter sur les vues preacuteceacutedentes
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
8
A expeacuterimenter sur la base S-P ndash Vue SP1 Select S[S] SNAME STATUS
CITY [P] QTY FROM S SP ndash Vue SP2 Select SP[S] SNAME STATUS
CITY [P] QTY FROM S SP
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
9
Insertion dans une Vue Lrsquoinsertion QBE drsquoun deacuteterminant dans
une vue agrave jointure peut faire apparaicirctre auto la valeur deacutetermineacuteendash Insertion de Cpostal Ville dans
SELECT P Ville FROM P C WHERE PCpostal = CCpostal
Avec
P (P Nom CPostal) et C (Cpostal Ville) A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
10
Insertion dans une Vue Lrsquoinsertion QBE dans une vue avec un
attribut dynamique drsquoune valeur de base de cet attribue conduit agrave lrsquoapparition auto de la valeur dynamiquendash PrixTTC = PrixHT 12
Lrsquoeacutequivalent des attributs composeacutes sous SQL Server amp autres SGBDs
A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
11
MAJ drsquoune Vue MsAccess On peut mettre agrave jour une vue
ndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre la MAJ simultaneacutee de plusieurs tables sources de la vue
A expeacuterimenter sur les vues SP1 et SP2
12
MAJ drsquoune Vue MsAccess La MAJ drsquoun deacuteterminant dans une vue
QBE agrave jointure peut faire changer auto le deacutetermineacutendash MAJ de Cpostal MAJ Ville dans lrsquoexemple
avantndash On peut aussi MAJ Villendash Mais on ne peut pas MAJ Cpostal agrave une
valeur qui ne serait pas dans C A expeacuterimenter sur les vues preacuteceacutedentes
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
9
Insertion dans une Vue Lrsquoinsertion QBE drsquoun deacuteterminant dans
une vue agrave jointure peut faire apparaicirctre auto la valeur deacutetermineacuteendash Insertion de Cpostal Ville dans
SELECT P Ville FROM P C WHERE PCpostal = CCpostal
Avec
P (P Nom CPostal) et C (Cpostal Ville) A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
10
Insertion dans une Vue Lrsquoinsertion QBE dans une vue avec un
attribut dynamique drsquoune valeur de base de cet attribue conduit agrave lrsquoapparition auto de la valeur dynamiquendash PrixTTC = PrixHT 12
Lrsquoeacutequivalent des attributs composeacutes sous SQL Server amp autres SGBDs
A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
11
MAJ drsquoune Vue MsAccess On peut mettre agrave jour une vue
ndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre la MAJ simultaneacutee de plusieurs tables sources de la vue
A expeacuterimenter sur les vues SP1 et SP2
12
MAJ drsquoune Vue MsAccess La MAJ drsquoun deacuteterminant dans une vue
QBE agrave jointure peut faire changer auto le deacutetermineacutendash MAJ de Cpostal MAJ Ville dans lrsquoexemple
avantndash On peut aussi MAJ Villendash Mais on ne peut pas MAJ Cpostal agrave une
valeur qui ne serait pas dans C A expeacuterimenter sur les vues preacuteceacutedentes
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
10
Insertion dans une Vue Lrsquoinsertion QBE dans une vue avec un
attribut dynamique drsquoune valeur de base de cet attribue conduit agrave lrsquoapparition auto de la valeur dynamiquendash PrixTTC = PrixHT 12
Lrsquoeacutequivalent des attributs composeacutes sous SQL Server amp autres SGBDs
A expeacuterimenter sur MsAccess
Insertion dans une Vue MsAccessInsertion dans une Vue MsAccess
11
MAJ drsquoune Vue MsAccess On peut mettre agrave jour une vue
ndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre la MAJ simultaneacutee de plusieurs tables sources de la vue
A expeacuterimenter sur les vues SP1 et SP2
12
MAJ drsquoune Vue MsAccess La MAJ drsquoun deacuteterminant dans une vue
QBE agrave jointure peut faire changer auto le deacutetermineacutendash MAJ de Cpostal MAJ Ville dans lrsquoexemple
avantndash On peut aussi MAJ Villendash Mais on ne peut pas MAJ Cpostal agrave une
valeur qui ne serait pas dans C A expeacuterimenter sur les vues preacuteceacutedentes
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
11
MAJ drsquoune Vue MsAccess On peut mettre agrave jour une vue
ndash Toute vue incluant la cleacute primairendash Notamment comme attribut de jointure
Y compris externendash Lien classe ndash sous-classe
ndash Le reacutesultat peut ecirctre la MAJ simultaneacutee de plusieurs tables sources de la vue
A expeacuterimenter sur les vues SP1 et SP2
12
MAJ drsquoune Vue MsAccess La MAJ drsquoun deacuteterminant dans une vue
QBE agrave jointure peut faire changer auto le deacutetermineacutendash MAJ de Cpostal MAJ Ville dans lrsquoexemple
avantndash On peut aussi MAJ Villendash Mais on ne peut pas MAJ Cpostal agrave une
valeur qui ne serait pas dans C A expeacuterimenter sur les vues preacuteceacutedentes
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
12
MAJ drsquoune Vue MsAccess La MAJ drsquoun deacuteterminant dans une vue
QBE agrave jointure peut faire changer auto le deacutetermineacutendash MAJ de Cpostal MAJ Ville dans lrsquoexemple
avantndash On peut aussi MAJ Villendash Mais on ne peut pas MAJ Cpostal agrave une
valeur qui ne serait pas dans C A expeacuterimenter sur les vues preacuteceacutedentes
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
13
Suppression dans une Vue MsAccess On peut supprimer des tuples dans une
vuendash Toute vue mono-table ou agrave un tuple de la vue
correspond un tuple de la table Pas de DISTINCT GROUP BYhellip
Surprise ndash On insegravere un tuple dans une vue V agrave jointure
INSERT Vhellip
ndash DELETE V hellip ne peut pas le supprimer A expeacuterimenter idem
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
14
MsAccess LeacutegendesMsAccess Leacutegendes
La leacutegende a la prioriteacute sur lrsquoalias Si la leacutegende de P dans SP de notre base S-P est
Product Idndash Alors lrsquoalias Produit est inopeacuterantSELECT SP[s] SP[p] AS Produit SPqty FROM
SP
s Product ID qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p1 300
hellip hellip hellip
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
15
Expressions de valeur Peuvent ecirctre des attr dynamiques
imbriqueacutees dans SQL de MsAccessSELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP
Mais ces atttr ne peuvent pas ecirctre reacutefeacuterenceacutes dans la clause WHERE
SELECT Qty [S] qty1-4 AS qty2 qty23 AS qty3 2qty AS qty1 FROM SP where qty1 gt 200 ndash pourquoi
Une bonne question pour Microsoft
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
16
Expressions de valeur Toutefois sous QBE lattr qty1 peut ecirctre
reacutefeacuterenceacutendash donc la requecircte ci-dessus devient leacutegale
vous avez dit bizarre Le signe + signifie aussi une concateacutenation pour
les attributs du type texte soit a = 2 et b = 3ndash a+b 23
Ce qui peu surprendre dans une requecircte agrave paramegravetresndash Texte est le type par deacutefaut du paramegravetre
Il faut la clause Parameters a int b int
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
17
Pour en savoir + sur les attributs dynamiques
Litwin W Vigier Ph Dynamic attributes in the multidatabase system MRDSM IEEE-COMPDEC (Feb 1986)
Litwin W Vigier Ph New Functions for Dynamic Attributes in the Multidatabase System MRDSM Honeywell Large Systems Userss Forum HLSUA XIV New Orleans 1987 467-475
Voir le site du CERIA
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
18
UNION et Noms Drsquoattributs
SELECT [s] FROM S
Union
SELECT [p] FROM p
Quel nom drsquoattribut sera dans le reacutesultat
Sous MSAccess Dans SQL Server MySQL Oraclehellip
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
19
UNION et ORDER BY
SELECT [s] FROM S
Union
SELECT [p] FROM p Par conseacutequent ougrave peut-on placer la (ou
les) clauses ORDER BY Apregraves le 1er Select etou apregraves le 2egraveme
Quels nom(s) y employer Quel serait le reacutesultat de ORDER BY [S]
apregraves le 2egraveme SELECT
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
20
ORDER BY et expressions de valeur Les expressions de valeur peuvent ecirctre dans
ORDER BY clauseORDER BY SAL - COMM
Exceptions UNION MINUS INTERSECT
Cette clause peut reacutefeacuterencer lattribut par position
Select ENAME SAL 075 (SAL + 500)FROM EMPORDER BY 3
Un must dans UNION MINUS INTERSECT dans Oracle Un alias dans le 1egraver Select est acceptable dans
MsAccess
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
21
ORDER BY et expressions de valeur ORDER BY clause peut aussi reacutefeacuterencer un attribut et
une expression qui nest pas dans SELECT clauseSelect S CITY
FROM SORDER BY SNAME STATUS+50
exceptions UNION MINUS INTERSECT DB2 SQL navait pas ces possibiliteacutes
Aux derniegraveres nouvelles ORDER BY et DISTINCT peuvent ecirctre en conflit
Essayez
SELECT distinct sp[s]
FROM sp
ORDER BY spqty
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
22
Ordre de prioriteacute dopeacuterations
1 Opeacuterateurs de comparaison logique= = gt= gt lt= lt BETWEENAND IN LIKE IS NULL
2 NOT 3 AND 4 OR De gauche agrave droite Les parenthegraveses priment sur lordre ci-dessus
[e][e]
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
23
Preacutedicat TOP
SELECT TOP 3 b cSELECT TOP 10 b c Pas la mecircme seacutemantique pour Access amp
SQL Serverndash Ce dernier ne tient pas compte drsquoex-equos
SQL Server eacutequivalent de TOP drsquoAccess
SELECT TOP hellip WITH TIES
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
24
Preacutedicat TOP
Sous MySQL and PostgreSQL crsquoest une clause seacutepareacutee dite LIMITndash Select hellip FROMhellip WHEREhellipORDERBYLIMIT 3
La syntaxe est par ailleurs eacutetendue agrave la seacutelection apregraves les 1egravers eacuteleacutements
Pour seacutelectionner les tuples 303132
LIMIT 29 3 ou LIMIT 3 OFFSET 29 Traitement des ex-equos
Voir la doc Peut-on faire comme fait OFFSET sous MsAccess
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
25
Clause BETWEEN
Peut ecirctre appliqueacutee au texte Mais ne connaicirct pas de caractegraveres
geacuteneacuteriques ndash contrairement agrave LIKE
Quel sera le reacutesultat pour Jones et pourquoi
SELECT FROM S where sname between b and J
Et si on eacutecrit
SELECT FROM S where sname between J and b
ndash Le reacutesultat s rsquoapplique aussi aux valeurs numeacuteriques
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
26
Limitations de NOT
Trouver tous les fournisseurs qui ne sont pas dans une ville dun fournisseur dans SSELECT FROM S WHERE CITY NOT IN
(SELECT CITY FROM S)
Que veut dire cette reacuteponse (vide) ndash Il ny a pas de tels fournisseurs
Hypothegravese de Monde fermeacutendash Ils ne sont pas connus de S
Hypothegravese de Monde ouvert
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
27
ANY et ALL
All peut surprendre dune maniegravere aleacuteatoireSELECT FROM S WHERE STATUS = ALL
(SELECT STATUS FROM S WHERE SNAME = BNP)
si le reacutesultat interne est (x x) le reacutesultat peut ecirctre non-vide
si le reacutesultat interne est (xy ltgt x x) le reacutesultat est vide
Souvent lintention de telles requecirctes est SELECT FROM S WHERE STATUS = ANY
(SELECT STATUS FROM S WHERE SNAME = BNP)
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
28
Injection SQL On ajoute en fraude agrave une requecircte a priori en
restriction une condition qui annule cette restriction
Gros deacutegacircts sur le WEB notammentSELECT
FROM S
WHERE city=london Or True
SQL Injection
S SName Status City
s1 smith Paris
s2 Jones 100 london
s3 Blake 30 Paris
s4 Clark 10 london
s5 Adams 30 Athens
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
29
Injection SQL La clause ajouteacutee deacutesigne une colonne virtuelle dite
True dont le preacutedicat eacutevalue toujours agrave vrai Quelle est la diffeacuterence entre les deux requecirctes
SELECT
FROM S
WHERE status= 100 Or 200
SELECT
FROM S
WHERE status= 100 Or status = 200 Pourrait-on faire lrsquoinjection par ce qui suit
SELECT
FROM S
WHERE city=london Or 100
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
30
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Preacutesentent les reacutesultat sous forme habituelle de feuilles de calculsndashLes agreacutegats SUM AVG de GROUP
BY et les valeurs individuelles en mecircme temps
ndash Impossible avec SQL standard
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
31
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
32
Tabulations Croiseacutees(Crosstab queries Pivot Queries)
Transforment les valeurs dattributs en attributsndash Par exemple
les valeurs de P trouveacutes pour un mecircme S deviennent les attributs P1 P2
les valeurs de P1 P2 sont les QTY (par ex) correspondants
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
33
S Total Qty p1 p2 p3 p4 p5 p6
s1 1300 300 200 400 200 100 100
s2 700 300 400
s3 200 200
s4 900 200 300 400
Lintituleacute Total Qty est mis par deacutefaut par MsAccess
Tabulations Croiseacutees
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
34
TRANSFORM Sum(SPQty) SELECT SP[S] Sum(SPQty) AS [Total
Qty]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
Nouvellescolonnes
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
35
La fonction agreacutegat dans la clause TRANSFORM est obligatoirendash bien que SUM(QTY) = AVG(QTY) = QTYndash mais COUNT(QTY) = 1
On peut geacuteneacuterer une expression de valeur TRANSFORM SUM(05QTY) AS [Q2]SELECT Sum(SP[Q2]) AS [Qte tot dans 1 mois] Avg(P[Q2]) AS [Qte moy dans 1 mois]FROM SPGROUP BY SP[S]PIVOT SP[p]
Tabulations Croiseacutees
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
36
On peut utiliser la clause WHEREWHERE P IN (P1 P2)
Alors les fonctions ne calculent les agreacutegats que sur P1 et P2
On peut aussi restreindre la tabulation seulement PIVOT SP[p] IN (P1 P2)
Mais cette clause naffecte pas les calculs des agreacutegats
Peut-on appliquer la clause ORDER BY Si oui quel serait lrsquoeffet sur les valeurs pivoteacutees Peut-on ordonner par rapport agrave une fonction agreacutegat
Comme on a fait pour les requecirctes agrave GROUP BY Peut-on appliquer la clause HAVING
Tabulations Croiseacutees
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
37
XORSELECT S[S] SStatus SCity
FROM S
WHERE Status=10 Xor city=paris
bull A noter le traitement du nul dans City
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
38
IMPSELECT S[S] SStatus SCityFROM SWHERE Status=10 imp city=paris
bull A noter le traitement du nul dans City
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
39
Sous-requecirctes
A utiliser quandndash Il y a une fonction dagreacutegat agrave mettre dans la
clause WHEREndash Il y des quantificateursndash Enfin lrsquoon sait quune telle formulation serait plus
rapide quen utilisant les jointures car la sous-requecircte est eacutevalueacutee en premiegravere de moins en moins vrai Mais vous ne risquez rien en utilisant une
sous-requecircte
SELECT FROM EMP WHERE SAL lt(SELECT AVG(SAL) FROM EMP)
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
40
Sous-requecirctes
Eleacutements Dominant (Skyline)ndash Tout fournisseur drsquoune piegravece X pour
laquelle il nrsquoy a pas drsquoun autre fournisseur qui Livrerait au moins la mecircme quantiteacute mais plus
vite ou Livrerait au moins aussi vite mais en quantiteacute
plus grande
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
41
Sous-requecirctes
Skylinendash Tout objet non-domineacute (cacheacute
totalement) par un autre
SELECT X[s] X[p] qty delay
FROM SP X
where not exists
(select from SP as Y
where (Yqty gt= XQty and YDelay lt XDelay or
Yqty gt XQty and YDelay lt= XDelay) and X[p] = Y[p])
order by X[p]
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
42
Sous-requecirctes Reacutesultat
s p qty delay
s1 p1 300 15
s4 p1 200 13
s3 p2 400 15
s2 p2 300 12
s1 p3 400 17
s4 p4 300 11
s4 p5 400 7
s1 p6 100 8
s p qty Delay
s1 p1 300 15
s1 p2 200 12
s1 p3 400 17
s1 p4 200 11
s1 p5 100 7
s1 p6 100 8
s2 p2 300 12
s3 p2 400 15
s4 p1 200 13
s4 p2 200 15
s4 p4 300 11
s4 p5 400 7
S
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
43
Sous-requecirctes
On peut avoir une sous-requecircte dans la clause FROM (voir aussi + loin)
SELECT Count() AS TotalQty
FROM (select distinct qty from sp)
On peut aussi avoir une sous-requecircte dans la clause SELECT
SELECT SP[s] SP[p] qty
(select sum(qty) from sp as X where X[s] = SP[s]) AS TotalQty
round(qtyTotalQty 3) AS Fraction
FROM SP order by [s]
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
44
Sous-requecirctes
s p qty TotalQty Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
bull ReacutesultatSP
s p qty
s1 p1 300
s1 p2 200
s1 p3 400
s1 p4 200
s1 p5 100
s1 p6 100
s2 p2 300
s3 p2 400
s4 p1 200
s4 p2 200
s4 p4 300
s4 p5 400
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
45
Sous-requecirctesbull En Mode Graphique
s p qtyTotalQty
Fraction
s1 p1 300 1300 0231
s1 p6 100 1300 0077
s1 p5 100 1300 0077
s1 p4 200 1300 0154
s1 p3 400 1300 0308
s1 p2 200 1300 0154
s2 p2 300 300 1
s3 p2 400 400 1
s4 p5 400 1100 0364
s4 p4 300 1100 0273
s4 p2 200 1100 0182
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
46
Application aux Probabiliteacutes Que ce que lrsquoon calcule ici
SELECT (select count(qty) from SP
where qty gt= [seuil svp ]) count() as reacutesultat
FROM SP Comment traite-on les nuls ici Comment modifier la requecircte pour calculer une
probabiliteacute conditionnelle
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
47
Clause FROM imbriqueacutee
Deacutefinit une table dans la clause FROM drsquoune expression de seacutelection SQL (SQL-Select) ndash Cette derniegravere peut-ecirctre imbriqueacutee agrave son tour
Select attrshellipFROM [tbls] (SQL-Select) Where hellip
Clause non-documenteacutee sous MsAccessndash La traduction SQL-QBE est bogueacutee
Agrave essayer
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
48
Clause FROM imbriqueacuteePossibiliteacutes
ndash Agreacutegations par-dessus UNION ou UNION ALL
ndash Imbrication des expressions de valeurndash Calcul de COUNT (DISTINCT)
MsAccess
ndash Reacutecursiviteacute limiteacutee ndash Pas de tabulation croiseacutee dans FROM
Mais la reacutefeacuterence au nom de la requecircte OK
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
49
Clause FROM imbriqueacutee
SELECT sum(weight) AS [poids-total]
FROM (SELECT weight pcity FROM P WHERE City like l
UNION ALL SELECT weight scity FROM p SP S WHERE p[p]=sp[p] and sp[s]=s[s] and sCity like p)
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
50
Clause FROM imbriqueacutee
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 sCity like p)
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
51
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
select total Geacuteneacuteral as total_Id sum(Sqty) as TotalQty from (SELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s])union allSELECT SP[s] as S_Id Sum(SPqty) AS SqtyFROM SPGROUP BY SP[s]order by 1
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
52
Clause FROM imbriqueacutee Totaux partiels et Total Geacuteneacuteral
totaux partiels et total geacuteneacuteral
total_Id TotalQty
s1 1300
s2 300
s3 400
s4 400
total Geacuteneacuteral
2400
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
53
Valeurs nulles
Si le SGBD eacutevalue x = y et trouve xy nuls alors lexpression est vraie ou fausse
En dautres termes est-ce que deux nuls peuvent ecirctre eacutegaux
DB2 Oui UNIQUE DISTINCT ORDER BY GROUP BY (rel 2)
Non WHERE HAVING GROUP BY (rel 1)
Standard Oui DISTINCT ORDER BY GROUP BY (lev 2)Non WHERE HAVING GROUP BY (lev 1)Undefined UNIQUE
MsAccess Oui DISTINCT Autres clauses
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
54
Valeurs nulles Si x est nul et y nrsquoest pas alors
1 x gt y est vrai ou faux
2 x lt y est vrai ou faux ndash ex pour eacutevaluer ORDER BY
DB2 oui pour (1) MsAccess Standard oui pour (1) oui pour (2) selon impleacutementation Est-il vrai que
SELECT FROM S WHERE CITY =Paris
UNION
SELECT FROM S WHERE NOT CITY = Paris
est toujours pourquoi faire simpleSELECT FROM S
si on peut faire compliqueacute
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
55
Valeurs nullesValeurs nulles
SELECT P_1FROM P AS P_1WHERE p_1weight gt all (select (pyweight) from P as py where pycolor = blue)
SELECT P_1FROM p AS P_1WHERE not exists (select from P as py where pycolor = blue and pyweight gt= p_1weight )
Requecirctes eacutequivalentes test color et weight nuls remplace all par any et vois le reacutesultat
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
56
Valeurs nulles
Fonctions scalairesndashpeuvent srsquoappliquer aux nuls ndashABS INT LCASE (nul) = nulndashpeuvent geacuteneacuterer une erreur
LOG (nul) -gt Error A voir cas par cas
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
57
Fonctions Scalaires DateTemps
SELECT Now() AS now Weekday(301006) AS [weekday of 301006] Weekday(301006+15) AS [weekday + 15] weekdayname(2) AS [weekdaynameerror for 301006] WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()]
FROM S Une erreur de calcul du nom du jour de la semaine existe en version
franccedilaise de MsAccess 2003endash La semaine US de weekday commence le dimanche celle franccedilaise de
weekdayname le lundindash Donc laquo 2 raquo ci-dessus doit donner lieu au lundi (la reacutealiteacute pour 301006)
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
58
Fonctions Scalaires DateTemps
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
bull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-tempsbull Notez lrsquoerreur non-signaleacutee drsquoaddition de date-temps (anneacutee 1899)
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
59
Fonctions Scalaires DateTemps
DateDiff ( interval date1 date2 [firstdayofweek] [firstweekofyear])
Interval Explanation
Yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
60
Fonctions Scalaires DateTemps
SELECT now() as now 11072009 094009 as DateTest DateDiff(n now DateTest) as DiffMin DateDiff(h now DateTest) as DiffHour
Test DateDiff
now DateTest DiffMin DiffHour07112009 120326 07112009 094009 -143 -3
bull Voir le Web pour les paramegravetres optionnels de DateDiff (DiffDate en mode creacuteation (QBE)
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
61
Fonctions Scalaires DateTemps
bull Clause LIKE supporte un format speacutecifique pour les dates hellip DateV lsquoLike Jan2009rsquohellip
Liste tous les tuples ougrave DateV est de Janvier 2009
hellip DateV lsquoLike 152009rsquohellip Liste tous les tuples ougrave DateV est le 15
drsquoun mois de 2009 On peut se deacutebrouiller autrement Comment
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
62
Fonction Scalaire RND
bull Permet faire lrsquoeacutechantillonnagebull Trois fournisseurs avec les fournitures au
hasard (on montre RND aussi pour lrsquoex) SELECT TOP 3 [s] rnd(qty) AS rank
FROM SPORDER BY rnd(qty) DESC
echantillon s rank
s1 502628087997437E-02
s4 0518015921115875
s3 075702953338623
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
63
Fonction Scalaire RND
bull Et si on eacutecrivait SELECT TOP 3 [s] rnd() AS rank
FROM SPORDER BY rnd(qty) DESC
OuSELECT TOP 3 [s] rnd([S]) AS rankFROM SPORDER BY rnd(qty) DESC
Votre commentaire ici
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
64
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
65
Fonctions Financiegraveres
Fonction DDB Calcule lamortissement deacutegressif
pendant une peacuteriode selon un taux speacutecifieacute ou double par deacutefaut
DDB(coucirct VReacutesiduelle VieUtile Peacuteriode [ taux] )
Valeur reacutesiduelle est une valeur deacutesireacutee seulementndash Lrsquoamortissement devient zeacutero si lrsquoon lrsquoatteint
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
66
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
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
Comment calculer aussi la valeur reacutesiduelle reacuteelle agrave la fin de chaque peacuteriode
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
67
Fonction DDB
INSERT INTO DDB ( cost salvage life factor amortiss period )
SELECT 100 AS cost 20 AS salvage 5 AS life 05 AS factor
DDB(costsalvagelifeperiodfactor) AS amortiss period
Reacutesultat drsquoexeacutecutions pour les peacuteriodes = 1hellip5 Ordre de choix de valeurs nrsquoa pas drsquoimportance
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
68
Fonction laquo Payment raquo SQL Fonction laquo Valeur de Payement laquo VPM
en QBE franccedilaisndash Donc dans le Geacuteneacuterateur drsquoExpressions
Calcule les annuiteacutes drsquoun emprunt agrave dureacutee et taux donneacuteesndash Les annuiteacutes apparaissent comme
nombres neacutegatifs
Fonction PMT
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
69
Fonction PMT
SELECT int(Pmt([rate][nper][pv])) AS Annuiteacutee rate as taux_annuel nper as nbre_anneacutees pv as [valeur preacutesente] int(Annuiteacuteenper) as valeur_payeacutee valeur_payeacutee + pv as surprime
Fonction PMT calcul dannuiteacute demprunt
Annuiteacutee taux_annuel nbre_anneacuteesvaleur
preacutesentevaleur_payeacutee surprime
-16049 005 20 200000 -320980 -120980
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
70
Placement agrave taux variable Somme et Fin sont les paramegravetres
ndash Expression indirecte de lrsquoagreacutegat PRODUCT
SELECT sommeexp(sum(log(1+taux100)))FROM [placement agrave taux variable]WHERE [anneacutee relative] between 1 and fin
Et les nuls que log ne supporte pas
Anneacutee relative
Taux
1 4
2 4
3 3
4 5
5 5
Voir + dans le livre laquo SQL Design Patterns raquo
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
71
GROUP BY Est une clause redondante avec le SELECT agrave sous-
requecirctes La requecircteSELECT P MAX(QTY) FROM SP GROUP BY P
est eacutequivalente agrave
SELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X
WHERE XP = SPP) FROM SP
Testez
Ca srsquoapplique agrave toute fonction agreacutegat Que faire avec les clauses WHERE et HAVING
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
72
LIST Function La requecircte
SELECT P MAX(QTY) LIST(S QTY) FROM SP GROUP BY P
Donne la valeur agreacutegeacutee et les deacutetails par fournisseur
Comme les tabulations croiseacutees
ndash Mais en + simple
LIST nrsquoexiste en standard que sur SQL Anywhere DBMS
ndash En mono attribut (2004)
En MsAccess LIST peut ecirctre reacutealiseacute par un formulaire avec les
sous-formulaires
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
73
LIST Function
Pour en savoir +ndash Litwin W Explicit and Implicit LIST Aggregate Function
for Relational Databases IASTED Intl Conf On Databases amp Applications 2004
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
74
GROUP BY avec WHERE
Clause WHERESELECT P MAX(QTY) MIN(QTY) FROM SP WHERE S ltgt lsquo S1 rsquo GROUP BY P
est eacutequivalente agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MAXQ(SELECT MIN(QTY) FROM SP AS X WHERE XS ltgt lsquo S1 rsquo AND XP = SPP) AS MINQ FROM SP WHERE S ltgt lsquo S1 rsquo
Peut servir pour reacutealiser T-GROUP BY (voir plus loin)
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
75
GROUP BY
Les deux formulations ne sont pas toujours eacutequivalentesSELECT MAX(QTY)FROM SPGROUP BY P
nrsquoest pas (tout agrave fait) eacutequivalent agraveSELECT DISTINCT P (SELECT MAX(QTY) FROM SP AS X WHERE XP = SPP) FROM SP
Pourquoi
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
76
GROUP BY avec HAVING
La clause HAVING est eacutegalement redondanteSELECT PFROM SPGROUP BY P HAVING COUNT() gt 1
est eacutequivalent agraveSELECT DISTINCT P FROM SP WHERE (SELECT COUNT() FROM SP AS X WHERE XP = SPP) gt 1
Pourquoi Et si on ajoutait la clause WHERE S ltgt lsquo S1 rsquo
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
77
T-GROUP BY Proposeacute pour SQL
Permettrait de faire les groupes par rapport agrave ne lsquo=lsquo
Le rocircle de -join par rapport agrave equi-join
Ainsi la requecircte hypotheacutetiqueSELECT P AVG(QTY) AS QTY1
INT(AVG(QTY)) AS QTY2FROM SP
T-GROUP (QT1 BY P QT2 BY ltgt P)
donnerait la quantiteacute moyenne de toute piegravece autre que la piegravece P avec la quantiteacute moyenne de la piegravece P pour la comparaison eacuteloquente
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
78
T-GROUP BY On peut reacutealiser la requecircte preacuteceacutedente agrave
lrsquoheure actuelle sous MsAccess commeSELECT DISTINCT SP[p] AS part
(SELECT int(avg(QTY)) FROM SP AS X WHERE X[P] ltgt 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 Vrai ou Faux
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
79
T-GROUP BY
Reacutesultat
part avg_qty_other_parts part_avg_qty
p1 250 300
p2 262 250
p3 245 400
p4 260 250
p5 260 250
p6 272 100
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
80
T-GROUP BY
En savoir + ndash Litwin W Galois Connections T-CUBES amp P2P
Database Mining 3rd Intl Workshop on Databases Information Systems and Peer-to-Peer Computing (DBISP2P 2005) VLDB 2005Springer Verlag (publ)
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
81
Rangs Non-Denses(Non Dense Ranking)
SELECT [s] [p] (select count() from SP as X where Xqty gt spqty)+1 as [non dense rank] qtyFROM SP order by qty desc [s] asc
s p qtyND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
82
Rangs Non-Denses(Graphique MsAccess)
s p qty ND-rank
s4 p5 400 1
s3 p2 400 1
s1 p3 400 1
s4 p4 300 4
s2 p2 300 4
s1 p1 300 4
s4 p2 200 7
s1 p4 200 7
s1 p2 200 7
s4 p1 200 7
s1 p6 100 11
s1 p5 100 11
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
83
Rangs Denses(Dense Ranking)
SELECT [s] [p] (select count(qty) from (select distinct qty from SP as y) as X where Xqty gt spqty)+1 AS [D-rank] qtyFROM SPORDER BY qty DESC [s]
s p qtyD-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
84
Rangs DensesGraphique MsAccess
s p qty D-rank
s1 p3 400 1
s3 p2 400 1
s4 p5 400 1
s1 p1 300 2
s2 p2 300 2
s4 p4 300 2
s1 p4 200 3
s1 p2 200 3
s4 p2 200 3
s4 p1 200 3
s1 p6 100 4
s1 p5 100 4
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
85
Distribution
La probabiliteacute qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
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
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
86
Reacutesultat
s Distribution
s1 0419
s2 0097
s3 0129
s4 0355
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
87
Distribution Cumulative
La probabiliteacute cumulative qursquoune piegravece soit fournie par un fournisseurndash Arrondie agrave 3 chiffres deacutecimaux
SELECT DISTINCT SP[s] round((select sum(qty) from SP X where X[s] lt= SP[s])(select sum(qty) from SP as Y) 3) AS [Distribution Cumuleacutee]
FROM SP
ORDER BY SP[s]
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
88
Reacutesultat
sDistribution Cumuleacutee
s1 0419
s2 0516
s3 0645
s4 1
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
89
Cateacutegorisation- On attribue une valeur drsquoune cateacutegorie agrave une
plage de valeurs drsquoun attribut- Status lt 30 Cateacutegorie OK- Autrement Cateacutegorie Good- hellip
- Un outil - Fonction scalaire IIF de SQL Access
- VraiFaux en QBE Franccedilais- Peut ecirctre imbriqueacutee
- On peut alternativement utiliser UNION ou UNION ALL
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
90
CateacutegorisationSELECT S[S] SSName SStatus SCity
IIf([status]lt30OKgood) AS IIfSimple
IIf([status]lt30OKIIf([status]=100VGoodgood)) AS IIFImbrique
FROM S
GROUP BY S[S] SSName SStatus SCity
IIF et IFF Imbriqueacute dans la requecircte SQL de MsAccessS SName Status City IIfSimple IIFImbrique
s1 Smith Paris good good
s2 Jones 100 london good VGood
s3 Blake 30 Paris good good
s4 Clark 10 london OK OK
s5 Adams 30 Athens good good
bull Notez le traitement du null
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
91
Cateacutegorisation Emploi alternatif drsquoUNION
SELECT Ppname weight Very Heavy as Warning
FROM P where weight gt 13
union
select Ppname weight Quite Heavy as w from p where weight between 10 and 16
UNION
select Ppname weight Light as warn from p where weight lt 10
ORDER BY warning DESC weight DESC
pname weight Warning
cam 19 Very Heavy
cog 19 Very Heavy
bolt 17 Very Heavy
nut 14 Very Heavy
screw 14 Very Heavy
nut 14 Quite Heavy
screw 14 Quite Heavy
screw 12 Quite Heavy
bull Table P est dans S-P du coursbull Cateacutegorisation flue (voir laquo nut raquo)bull Noms w et warn sont sans imp
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
92
UNIONPreacutedictions de Valeurs Inconnues
On considegravere AVG(Qty1) pour Qty
SELECT qty predicted value as [for part] Avg(Qty1) as [predicted or unknown Qty1]
FROM SPgroup by qtyunionSELECT qty [p] Qty1FROM SP as SP1 where qty1 is nullorder by qty
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
93
UNIONPreacutediction de Valeurs Inconnues
On peut compleacuteter SP par UPDATE SPReacutesultat
SP
s p qtyQty1
s1 p1 300 400
s1 p2 200
s1 p3 400 600
s1 p4 200 300
s1 p5 100
s1 p6 100 200
s2 p2 300 500
s3 p2 400
s4 p1 200 100
s4 p2 200
s4 p4 300
s4 p5 400
qty for partpredicted or
unknown Qty1
100 p5
100 predicted value 200
200 p2
200 predicted value 200
300 p4
300 predicted value 450
400 p2
400 p5
400 predicted value 600
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
94
Tendance
qty Qty1
100 200
200 300
300 400
400 600
SELECT SPqty SPQty1FROM SPWHERE (((SPQty1) Is Not Null))ORDER BY SPqty
SP est supposeacute avec la DF entre Qty et Qty1
Tendance Qty1 est toujours gt Qty + drsquoeacutecart pour Qty gt 300
Graph 3D avec Qty en abscisses
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
95
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Moyenne Glissante Parameacutetreacuteedate_t MoyGliss date_d k
30102008 120 27102008 4
25102008 131 22102008 4
23102008 127 20102008 4
17102008 269 14102008 4
15102008 60 12102008 4
11102008 295 08102008 4
09102008 340 06102008 4
08102008 324 05102008 4
06102008 315 03102008 4
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
96
Moyenne GlissanteMoyenne GlissanteSELECT DISTINCT Sdate_t (select int(avg(prix)) from [serie] X where Xdate_t between Sdate_t-jours+1 and Sdate_t) AS MoyenneGlisante date_t-jours+1 as date_d jours as kFROM [serie] SORDER BY date_t DESC
Graphique avec une info-bulle
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
97
Moyenne GlissanteMoyenne Glissantebull La construction srsquoapplique agrave drsquoautres fonctions
glissantes
bull CSUM (Cumulative (Running) Sums)
bull MAVG
bull MSUM
bull MDIFF
bull Voir Teradata + loin
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
98
Seacuteries financiegraveres A partir de valeur(s) donneacutees on veut
geacuteneacuterer une seacuterie chronologique1 Valeur drsquoun placement
2 Taux drsquointeacuterecirct On veut la valeur apregraves 12hellip20 ans
Pour le taux indiqueacute soit T1 Pour soit 1 de plus soit T2
On veut voir aussi le gain que T2 offrirait par rapport au T1
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
99
Seacuteries financiegraveresSELECT capital taux n int(capital(1+taux)^n) as [val apregraves n ans] round(taux+0012) as taux1 int(capital(1+taux1)^n) as [val1 apregraves n ans] [val1 apregraves n ans]- [val apregraves n ans] as GainAbs GainAbscapital100 as [GainRel]FROM EntiersUNION
SELECT capital taux n+10 as n1 int(capital(1+taux)^n1) as [val apregraves n ans] round(taux+0012) as t int(capital(1+t)^n1) as x x- [val apregraves n ans] as z zcapital100 FROM Entiers
Entiers est une table aux avec la colonne de12hellip10
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
100
Seacuteries financiegraveres
capital taux nval apregraves n ans
taux1val1 apregraves n ans
GainAbs GainRel
100 005 1 105 006 106 1 1
100 005 2 110 006 112 2 2
100 005 3 115 006 119 4 4
100 005 4 121 006 126 5 5
100 005 5 127 006 133 6 6
100 005 6 134 006 141 7 7
100 005 7 140 006 150 10 10
100 005 8 147 006 159 12 12
100 005 9 155 006 168 13 13
100 005 10 162 006 179 17 17
100 005 11 171 006 189 18 18
100 005 12 179 006 201 22 22
100 005 13 188 006 213 25 25
100 005 14 197 006 226 29 29
100 005 15 207 006 239 32 32
100 005 16 218 006 254 36 36
100 005 17 229 006 269 40 40
100 005 18 240 006 285 45 45
100 005 19 252 006 302 50 50
100 005 20 265 006 320 55 55
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
101
Seacuteries financiegraveres
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
102
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille bull On veut acheter une collection de produits
financiers de la table Produits
bull Dans la limite L de la somme donneacutee
bull Jusqursquoagrave k produit (k = 3 pex) par ensemble
bull On veut examiner jusqursquoagrave i collections (i = 20 pex) de prix (cumuleacute) le plus proche de L
bull En ordre descendant de prix
bull On peut choisir un mecircme produit plusieurs fois pour former une collection
bull Plusieurs actionshellip
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
103
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Produits
P prix
p3 200
p1 200
p2 400
p3 200
p4 100
p6 100
p5 300
p8 300
p7 400
p10 200
p12 300
p13 300
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
104
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille Parameters [Investissement ] Integer
select TOP 20 FROM (SELECT P[p] as Produit1 as Produit2 as Produit3 Pprix as PrixCumuleacute as Prix1 as Prix2 as Prix3 1 as Nbre [Investissement ] as Investissement FROM Produits P where pprix lt= [Investissement ]
UnionSELECT X[p] as Produit1 Y[p] as Produit2 as Produit3 Xprix+Yprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 as Prix3 2 as Nbre [Investissement ] FROM Produits X Produits Y where Xprix+Yprix lt= [Investissement ] and X[p] lt= Y[p] )
UNIONSELECT X[p] as Produit1 Y[p] as Produit2 Z[p] as Produit3 Xprix+Yprix+Zprix as PrixCumuleacute Xprix as Prix1 Yprix as Prix2 Zprix as Prix3 3 as Nbre [Investissement ] FROM Produits X Produits Y Produits Z where Xprix+Yprix+Zprix lt= [Investissement ] and X[p] lt= Y[p] and Y[p] lt= Z[p]
ORDER BY 4 desc 8 123
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
105
Creacuteation drsquoun Portefeuille Creacuteation drsquoun Portefeuille
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
106
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Pourquoi la requecircte est comme elle est bull Comment elle changerait
bull Si lrsquoon ne pouvait pas choisir un mecircme produit dans la collection
bull Si lrsquoon devait preacutesenter au max X meilleures proposition drsquoun produit Y de 2 et Z de 3 agrave la fois
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
107
Creacuteation drsquoun Portefeuille Discussion
Creacuteation drsquoun Portefeuille Discussion
bull Si Produit a 10 000 produits combien drsquoopeacuterations drsquoaccegraves agrave un tuple faudrait-t-il agrave 1egravere vue
bull Peut-on espeacuterer k = 4 ou 5 bull Autres domaines drsquoapplications du problegraveme
bull Avez-vous entendu du problegraveme dit du laquo sac agrave dos raquo
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
108
ROLLUP(DB2 amp SQL-Server)
ROLLUP(DB2 amp SQL-Server)
Groupements multiples (super-groupes) selon une dimensionndash l rsquoordre des attributs dans la clause a l rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY ROLLUP (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nulls que lrsquoon verra plus tard
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
109
CUBE(DB2 amp SQL-Server)
CUBE(DB2 amp SQL-Server)
Groupements multiples selon toutes les dimensionsndash l rsquoordre des attributs dans la clause n rsquoa pas
d rsquoimportancendash les attributs sont progressivement laquo oublies raquo de
droite agrave gauche Remplace plusieurs requecirctes GROUP BYSELECT p sum (qty) as tot-qty from SSP P WHERE SP P = PP AND SP S = SSGROUP BY CUBE (P SCITY COLOR)HAVING tot-qty gt 100 Problegravemes avec des nuls que lrsquoon verra plus tard Opeacuteration bien plus chegravere que Rollupe N pour N attributs
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
110
GROUPING SETS
On indique explicitement les groupesndash entre ()
le groupe () est constitueacute de toute la table
SELECT p sum (qty) as tot-qty from SSP P
WHERE SP P = PP AND SP S = SS
GROUP BY GROUPING SETS ((P SCITY COLOR) (P COLOR) ())
HAVING tot-qty gt 100
Problegravemes avec des nuls que lrsquoon verra plus tard
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
111
Rollup Cube Grouping Setssous MsAccess
Il y en a pas On peut simuler ces manipulations en
utilisant ndash GROUP BYndash UNION ALLndash ORDER BY
Peut ecirctre laborieux pour le CUBE
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
112
ROLLUP
Remarquez le laquo null as cityraquo
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
113
ROLLUP
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
114
ROLLUP
Et le CUBE
Une solution pour l ambiguiumlteacute
de certains nuls
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
115
Autres Opeacuterations Utiles Chasse aux valeurs inconnues
ndash Deacutependances Fonctionnelles- Interpolation (lineacuteairehellip)
Echelle logarithmique drsquoabscisses- Fonctions scalaires log int floor
Livre de Tropashko (cours 1) Symbolic Data Analysis Billiard amp Diday
Wiley (publ)
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
116
Sous-Tables Parameacutetreacutees
La requecircte de sous-table de MsAccess peut ecirctre parameacutetreacutee
On voit par exemple pour SP la fraction que repreacutesente la piegravece examineacutee soit P2 par rapport au total QTY eacutegalement visible pour chaque fournisseur de la piegravece
Seulement pour les fractions plus grandes qursquoun minimum parameacutetreacute
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
117
Sous-Tables Parameacutetreacutees
Deacutefinition de la sous-tablendash Noter le champs de liaison pegraverefils
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
118
Sous-Tables Parameacutetreacutees
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
119
Sous-Tables Parameacutetreacutees
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
120
Sous-Tables Parameacutetreacutees
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
121
Sous-Tables Parameacutetreacutees
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
122
Sous-Tables Parameacutetreacutees
La requecircte elle-mecircme est un peu complexendash Voir le cours SQL Avanceacute
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
123
Sous-Tables Parameacutetreacutees
Exeacutecution autonome
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
124
Liste de Choix Multibase laquo Liste de choix raquo dans la deacutefinition drsquoun attribut peut ecirctre multibase Un fournisseur dans la base S-P ne pourrait
ecirctre choisi que dans une ville drsquoun client de Northwind
Un code postal dans la base Clients devrait ecirctre dans la base nationale de codes postaux
hellip
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
125
Liste de Choix Multibase
bull Requecircte Test-liste-de-choix mdb
SELECT C[City] CContactNameFROM [northwind2000]customers AS CORDER BY CCity CContactName
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
126
Liste de Choix MultibaseReacutesultat
On ne peut pas deacuteclarer la requecircte MBD directementPourqoui
Tregraves bonne question agrave Microsoft
148
FIN
149
148
FIN
149
149