1 sql avancé 2010 witold litwin 2 quoi & pourquoi ? n possibilités etendues de manipulation de...

128
SQL Avancé 2010 Witold Litwin

Upload: valere-foucault

Post on 04-Apr-2015

106 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 2: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 3: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 4: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 5: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 6: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 7: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 8: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 9: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 10: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 11: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 12: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 13: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 14: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 15: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 16: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 17: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 18: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 19: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 20: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 21: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 22: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 23: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 24: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 25: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 26: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 27: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 28: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 29: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 30: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 31: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 32: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 33: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 34: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 35: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 36: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 37: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 38: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 39: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 40: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 41: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 42: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 43: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 44: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 45: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 46: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 47: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 48: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 49: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 50: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 51: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 52: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 53: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 54: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 55: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 56: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 57: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 58: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 59: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 60: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 61: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 62: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 63: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 64: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 65: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 66: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 67: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 68: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 69: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 70: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 71: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 72: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 73: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 74: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 75: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 76: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 77: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 78: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 79: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 80: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 81: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 82: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 83: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 84: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 85: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 86: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 87: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 88: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 89: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 90: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 91: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 92: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 93: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 94: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 95: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 96: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 97: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 98: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 99: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 100: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 101: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 102: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 103: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 104: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 105: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 106: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 107: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 108: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 109: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 110: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 111: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 112: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 113: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 114: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 115: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 116: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 117: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 118: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 119: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 120: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 121: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 122: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 123: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 124: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 125: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

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

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 126: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

126

Liste de Choix MultibaseReacutesultat

On ne peut pas deacuteclarer la requecircte MBD directementPourqoui

Tregraves bonne question agrave Microsoft

148

FIN

149

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 127: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

148

FIN

149

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149
Page 128: 1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie

149

  • SQL Avanceacute 2010
  • Quoi amp Pourquoi
  • Slide 3
  • Synonymes
  • Noms dattributs
  • Slide 6
  • Slide 7
  • Slide 8
  • Insertion dans une Vue
  • Insertion dans une Vue (2)
  • MAJ drsquoune Vue MsAccess
  • MAJ drsquoune Vue MsAccess (2)
  • Suppression dans une Vue MsAccess
  • MsAccess Leacutegendes
  • Expressions de valeur
  • Expressions de valeur (2)
  • Pour en savoir + sur les attributs dynamiques
  • UNION et Noms Drsquoattributs
  • UNION et ORDER BY
  • ORDER BY et expressions de valeur
  • ORDER BY et expressions de valeur (2)
  • Ordre de prioriteacute dopeacuterations
  • Preacutedicat TOP
  • Preacutedicat TOP (2)
  • Clause BETWEEN
  • Limitations de NOT
  • ANY et ALL
  • Injection SQL
  • Injection SQL (2)
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries)
  • Tabulations Croiseacutees
  • Tabulations Croiseacutees (Crosstab queries Pivot Queries) (2)
  • Tabulations Croiseacutees (2)
  • Tabulations Croiseacutees (3)
  • Tabulations Croiseacutees (4)
  • Tabulations Croiseacutees (5)
  • XOR
  • IMP
  • Sous-requecirctes
  • Sous-requecirctes (2)
  • Sous-requecirctes (3)
  • Sous-requecirctes (4)
  • Sous-requecirctes (5)
  • Sous-requecirctes (6)
  • Sous-requecirctes (7)
  • Application aux Probabiliteacutes
  • Clause FROM imbriqueacutee
  • Clause FROM imbriqueacutee (2)
  • Clause FROM imbriqueacutee (3)
  • Clause FROM imbriqueacutee (4)
  • Clause FROM imbriqueacutee (5)
  • Clause FROM imbriqueacutee (6)
  • Valeurs nulles
  • Valeurs nulles (2)
  • Valeurs nulles (3)
  • Valeurs nulles (4)
  • Fonctions Scalaires DateTemps
  • Fonctions Scalaires DateTemps (2)
  • Fonctions Scalaires DateTemps (3)
  • Fonctions Scalaires DateTemps (4)
  • Fonctions Scalaires DateTemps (5)
  • Fonction Scalaire RND
  • Fonction Scalaire RND (2)
  • Fonctions Financiegraveres
  • Fonctions Financiegraveres (2)
  • Fonction DDB
  • Fonction DDB (2)
  • Fonction PMT
  • Fonction PMT (2)
  • Placement agrave taux variable
  • GROUP BY
  • LIST Function
  • LIST Function (2)
  • GROUP BY avec WHERE
  • GROUP BY (2)
  • GROUP BY avec HAVING
  • T-GROUP BY
  • T-GROUP BY (2)
  • T-GROUP BY (3)
  • T-GROUP BY (4)
  • Rangs Non-Denses (Non Dense Ranking)
  • Rangs Non-Denses (Graphique MsAccess)
  • Rangs Denses (Dense Ranking)
  • Rangs Denses Graphique MsAccess
  • Distribution
  • Reacutesultat
  • Distribution Cumulative
  • Reacutesultat (2)
  • Cateacutegorisation
  • Cateacutegorisation (2)
  • Cateacutegorisation (3)
  • UNION Preacutedictions de Valeurs Inconnues
  • UNION Preacutediction de Valeurs Inconnues
  • Tendance
  • Moyenne Glissante
  • Moyenne Glissante (2)
  • Moyenne Glissante (3)
  • Seacuteries financiegraveres
  • Seacuteries financiegraveres (2)
  • Seacuteries financiegraveres (3)
  • Seacuteries financiegraveres (4)
  • Creacuteation drsquoun Portefeuille
  • Creacuteation drsquoun Portefeuille (2)
  • Creacuteation drsquoun Portefeuille (3)
  • Creacuteation drsquoun Portefeuille (4)
  • Creacuteation drsquoun Portefeuille Discussion
  • Creacuteation drsquoun Portefeuille Discussion (2)
  • ROLLUP (DB2 amp SQL-Server)
  • CUBE (DB2 amp SQL-Server)
  • GROUPING SETS
  • Rollup Cube Grouping Sets sous MsAccess
  • Slide 112
  • Slide 113
  • Slide 114
  • Autres Opeacuterations Utiles
  • Sous-Tables Parameacutetreacutees
  • Sous-Tables Parameacutetreacutees (2)
  • Sous-Tables Parameacutetreacutees (3)
  • Sous-Tables Parameacutetreacutees (4)
  • Sous-Tables Parameacutetreacutees (5)
  • Sous-Tables Parameacutetreacutees (6)
  • Sous-Tables Parameacutetreacutees (7)
  • Sous-Tables Parameacutetreacutees (8)
  • Liste de Choix Multibase
  • Liste de Choix Multibase (2)
  • Liste de Choix Multibase Reacutesultat
  • FIN
  • Slide 149