1 SQL Manipulations Avancées Witold Litwin 2 Exemple canon S P SPSP.

Slides:



Advertisements
Présentations similaires
Bases de Données Avancées: Bases de Données Relationnelles
Advertisements

Calcul de tuple, de domaine et QBE
PL/SQL : Le Langage PL/SQL est une extension du SQL, qui offre
Benoît Piranda Équipe SISAR Université de Marne La Vallée Bases de données Algèbre relationnelle, opérations Requêtes SQL.
Le langage de requêtes SPARQL SPARQL Protocol And RDF Query Language
SQL - Subtilités.
STS2 - Révision des requêtes de sélection2/9/2003 Forme d'une requête de Sélection nSELECT nFROM nWHERE nGROUP BY nHAVING nORDER BY.
Algèbre relationnelle
Optimisation algébrique de requêtes relationnelles
1 SQL Subtilités Witold Litwin. 2 Synonymes n "Différent de" peut être exprimé de trois manières: != ^= –Oracle, DB2 mais pas MsAccess n Type d'attribut.

Programme Introduction aux BD et aux SGBD Le modèle relationnel
LE LANGAGE SQL : LDD La création de tables L’ordre CREATE CREATE TABLE nom_de_table (Nom_colonne Type_colonne, Nom_colonne Type_colonne,
1 SQL Avancé 2011 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie.
LE LANGAGE SQL Langage de manipulation de données (LMD)
SYSTÈME DE GESTION DE BASES DE DONNÉES
Bases de données et SGBD relationnels
2 Ils associent les rangées de 2 requêtes UNION [ALL] INTERSECT MINUS.
Algèbre relationnelle
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections 15.5.
SQL: Contraintes et Triggers
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie.
Bases de Données Avancées - TP2: SQL
1 SQL Manipulations Avancées (08-09) Witold Litwin.
1 SQL Manipulations Avancées (08-09) Witold Litwin.
Manipulation des données Requêtes simples
PL/SQL Noreddine GHERABI 1.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections 15.5.
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
OPTIMISATION DE BASE DE DONNEES ORACLE
Procédures Stockées Schedule: Timing Topic 60 minutes Lecture
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL jointure PHILIPPE BANCQUART.
LE LANGAGE DE REQUETES SQL2
Limiter et trier des données
MySQL.
Traduction des opérations sous MySQL
Access Les requêtes Table médias Table (*) Requêtes simples.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
1 BDs Orientées Objets Witold LITWIN. 2 Pourquoi ? F Les BDs relationnelles ne sont pas adaptées aux applications CAD/CAM, cartes géo... F le problème.
Optimisation de requêtes
Sous-Interrogations.
DEFINITION DES DONNEES : schéma conceptuel. Schéma conceptuel instructiondescription CREATE TABLEcréation d'une relation ALTER TABLEmodification de la.
Sélection de colonnes (la projection)
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
BASES DE DONNÉES RELATIONNELLES
Révision du langage PL/SQL
Afficher des Données Issues de Plusieurs Tables
Copyright  Oracle Corporation, Tous droits réservés. 2 Sélection et Tri des Lignes Retournées par un SELECT.
Création et Gestion de Tables
Le langage SQL. Voir polycopié: Introduction à SQL SQL.
Structured Query Language 1/34. SQL Types de données Langage de Définition de Données (LDD) Langage de Manipulation de Données (LDM) Langage de Contrôle.
Le langage SQL.
NIVEAU LOGIQUE Vues. Fenêtre dynamique sur la base Ses données proviennent d'autres tables ou d'autres vues.
Complément sous-requêtes
Op é rateurs ensemblistes Module 4. 2 La clause GROUP BY La clause GROUP BY est nécessaire dès que l'on utilise des fonctions de calculs statistiques.
Cours n°2 Implémentation et exploitation
Introduction au langage PL/SQL
Bases de données – Cours 3
CONCEPTS BD - Synthèse journée 1 :
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
1 Les bases de données Séance 6 L ’extraction de données Le SELECT.
Les sous-requêtes ou requêtes imbriquées B.T.S. S.I.O – SI3 – 1.
SQL query - 1 / D. Berrabah SQL : interrogation de BD Requêtes d'interrogation simples Requêtes complexes Agrégats et groupement.
Algèbre relationnelle
Transcription de la présentation:

1 SQL Manipulations Avancées Witold Litwin

2 Exemple canon S P SPSP

3 Synonymes n "Différent de" peut être exprimé de trois manières: != ^= <> –Oracle, DB2 mais pas MsAccess n Type d'attribut peut être exprimé de plusieurs manières (SQL Oracle): CHAR(n) VARCHAR(n) FLOAT DECIMAL NUMBER INTEGER SMALLINT LONG LONG VARCHAR

4 Noms d'attributs n Peuvent contenir des blancs: "Nom de fournisseur"(Oracle) Dans MSAccess: [Nom de fournisseur] n En général interdits: 95BilanCommence avec un chiffre SELECTMot réservé

5 Expressions de valeur n Peuvent être des attr. dynamiques, imbriquées dans SQL de MsAccess SELECT Qty, [S#], qty1-4 AS qty2, qty2/3 AS qty3, 2*qty AS qty1 FROM SP; n Mais ces atttr. ne peuvent pas être référencés dans la clause WHERE SELECT Qty, [S#], qty1-4 AS qty2, qty2/3 AS qty3, 2*qty AS qty1 FROM SP where qty1 > 200; –pourquoi ? F Une bonne question pour Microsoft n Toutefois sous QBE, l'attr. qty1 peut être référencé –donc la requête ci-dessus devient légale F vous avez dit bizarre ?

6 Pour en savoir + sur les attributs dynamiques n Litwin, W., Vigier, Ph. Dynamic attributes in the multidatabase system MRDSM, IEEE-COMPDEC, (Feb. 1986). n Litwin, W., Vigier, Ph. New Functions for Dynamic Attributes in the Multidatabase System MRDSM. Honeywell Large Systems Users's Forum, HLSUA XIV, New Orleans, 1987, n Voir le site du CERIA

7 ORDER BY et expressions de valeur Dans SQL Oracle, les expressions de valeur peuvent être dans ORDER BY clause: ORDER BY SAL - COMM exceptions: UNION, MINUS, INTERSECT Cette clause peut référencer l'attribut par position: Select ENAME SAL 0.75 * (SAL + 500) FROM EMP ORDER BY 3 ; Un must dans UNION, MINUS, INTERSECT dans Oracle Nom d'attribut de la 1-ère clause dans MSAccess

8 ORDER BY et expressions de valeur n ORDER BY clause peut aussi référencer un attribut et une expression qui n'est pas dans SELECT clause: Select S#, CITY FROM S ORDER BY SNAME STATUS+50 ; exceptions: UNION, MINUS, INTERSECT DB2 SQL n'avait pas ces possibilités (au dernières nouvelles) ORDER BY et DISTINCT peuvent être en conflit Essayez: SELECT distinct sp.[s#] FROM sp ORDER BY sp.qty;

9 Ordre de priorité d'opérations n 1. Opérateurs de comparaison logique: = != >= > <= < BETWEEN...AND IN LIKE IS NULL n 2. NOT n 3. AND n 4. OR n De gauche à droite n Les parenthèses priment sur l'ordre ci-dessus

10 Clause BETWEEN n Peut être appliquée au texte n Mais ne connaît pas de caractères génériques –contrairement à LIKE ?Quel sera le résultat pour Jones et pourquoi SELECT * FROM S where sname between 'b*' and 'J*'; ?Et si on écrit: SELECT * FROM S where sname between 'J*' and 'b*'; –Le résultat s applique aussi aux valeurs numériques

11 Limitations de NOT n Trouver tous les fournisseurs qui ne sont pas dans une ville d'un fournisseur dans S SELECT * FROM S WHERE CITY NOT IN (SELECT CITY FROM S) ; n Que veut dire cette réponse (vide) ? –Il n'y a pas de tels fournisseurs F Hypothèse de Monde fermé –Ils ne sont pas connus de S F Hypothèse de Monde ouvert

12 ANY et ALL n All peut surprendre d'une manière aléatoire: SELECT * FROM S WHERE STATUS = ALL (SELECT STATUS FROM S WHERE SNAME = 'BNP"); si le résultat interne est (x,... x) le résultat peut être non-vide si le résultat interne est (x,..y <> x, x) le résultat est vide n Souvent l'intention de telles requêtes est: SELECT * FROM S WHERE STATUS = ANY (SELECT STATUS FROM S WHERE SNAME = 'BNP");

13 Tabulations Croisées (Crosstab queries, Pivot Queries) n Présentent les résultat sous forme habituelle de feuilles de calculs –Les agrégats SUM, AVG.. de GROUP BY et les valeurs individuelles en même temps –Impossible avec SQL standard

14 S# Total Qty p1p2p3p4p5p6 s s s s L'intitulé Total Qty est mis par défaut par MsAccess Tabulations Croisées

15 Tabulations Croisées (Crosstab queries, Pivot Queries) n Transforment les valeurs d'attributs en attributs –Par exemple F les valeurs de P# trouvés pour un même S# deviennent les attributs P1, P2,... F les valeurs de P1, P2.. sont les QTY (par ex.) correspondants

16 S# Total Qty p1p2p3p4p5p6 s s s s L'intitulé Total Qty est mis par défaut par MsAccess Tabulations Croisées

17 TRANSFORM Sum(SP.Qty) SELECT SP.[S#], Sum(SP.Qty) AS [Total Qty] FROM SP GROUP BY SP.[S#] PIVOT SP.[p#]; Tabulations Croisées Nouvelles colonnes

18 n La fonction agrégat dans la clause TRANSFORM est obligatoire –bien que SUM(QTY) = AVG(QTY) = QTY –mais, COUNT(QTY) = 1 n On peut générer une expression de valeur TRANSFORM SUM(0.5*QTY) AS [Q2] SELECT Sum(SP.[Q2]) AS [Qte tot. dans 1 mois], Avg(P.[Q2]) AS [Qte moy. dans 1 mois] FROM SP GROUP BY SP.[S#] PIVOT SP.[p#]; Tabulations Croisées

19 On peut utiliser la clause WHERE WHERE P# IN ('P1', 'P2') n Alors les fonctions ne calculent les agrégats que sur P1 et P2. n On peut aussi restreindre la tabulation seulement PIVOT SP.[p#] IN ('P1', P2') n Mais, cette clause n'affecte pas les calculs des agrégats Peut-on appliquer la clause ORDER BY ? Si oui, quel serait leffet sur les valeurs pivotées ? Peut-on ordonner par rapport à une fonction agrégat ? Comme on a fait pour les requêtes à GROUP BY ? Peut-on appliquer la clause HAVING ? Tabulations Croisées

20 XOR SELECT S.[S#], S.Status, S.City FROM S WHERE Status=10 Xor city="paris"; A noter le traitement du nul dans City

21 IMP SELECT S.[S#], S.Status, S.City FROM S WHERE Status=10 imp city="paris"; A noter le traitement du nul dans City

22 Sous-requêtes n A utiliser quand: –Il y a une fonction d'agrégat à mettre dans la clause WHERE –Il y des quantificateurs –Enfin, lon sait qu'une telle formulation serait plus rapide qu'en utilisant les jointures, car la sous-requête est évaluée en première F de moins en moins vrai F Mais vous ne risquez rien en utilisant une sous-requête SELECT * FROM EMP WHERE SAL < (SELECT AVG(SAL) FROM EMP) ;

23 Sous-requêtes n Eléments Dominant (Skyline) –Tout fournisseur dune pièce X pour laquelle il ny a pas dun autre fournisseur qui : F Livrerait au moins la même quantité mais plus vite, ou F Livrerait au moins aussi vite, mais en quantité plus grande

24 Sous-requêtes n Skyline –Objets non-dominé par aucun autre SELECT X.[s#], X.[p#], qty, delay FROM SP X where not exists (select * from SP as Y where (Y.qty >= X.Qty and Y.Delay < X.Delay or Y.qty > X.Qty and Y.Delay <= X.Delay) and X.[p#] = Y.[p#]) order by X.[p#];

25 Sous-requêtes n Résultat s#p#qtydelay s1p s4p s3p s2p s1p s4p s4p54007 s1p61008 s#p#qtyDelay s1p s1p s1p s1p s1p51007 s1p61008 s2p s3p s4p s4p s4p s4p54007 S

26 Sous-requêtes n On peut avoir une sous-requête dans la clause FROM SELECT Count(*) AS TotalQty FROM (select distinct qty from sp); n On peut aussi avoir une sous-requête 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(qty/TotalQty, 3) AS Fraction FROM SP order by [s#];

27 Sous-requêtes Résultat SP s#p#qty s1p1300 s1p2200 s1p3400 s1p4200 s1p5100 s1p6100 s2p2300 s3p2400 s4p1200 s4p2200 s4p4300 s4p5400

28 Sous-requêtes En Mode Graphique

29 Clause FROM imbriquée n Définit une table dans la clause FROM dune expression de sélection SQL (SQL-Select) –Cette dernière peut-être imbriquée à son tour Select attrs…FROM [tbls], (SQL-Select) Where …. ; n Clause non-documentée sous MsAccess –La traduction SQL-QBE est boguée F À essayer

30 Clause FROM imbriquée Possibilités: –Agrégations par-dessus UNION ou UNION ALL –Imbrication des expressions de valeur –Calcul de COUNT (DISTINCT) F MsAccess –Récursivité limitée

31 Clause FROM imbriquée SELECT sum(weight) AS [poids-total] FROM (SELECT weight, p.city FROM P WHERE City like 'l*' UNION ALL SELECT weight, s.city FROM p, SP, S WHERE p.[p#]=sp.[p#] and sp.[s#]=s.[s#] and s.City like 'p*');

32 Clause FROM imbriquée select avg(moy1) as [moyenne-des-moyennes] FROM (SELECT avg(weight) as moy1 FROM P WHERE City like 'l*' UNION ALL SELECT avg(weight) as moy1 FROM p, SP, S WHERE p.[p#]=sp.[p#] and sp.[s#]=s.[s#] and s.City like 'p*');

33 Valeurs nulles n Si le SGBD évalue x = y et trouve x,y nuls, alors l'expression est vraie ou fausse ? n En d'autres termes est-ce que deux nuls peuvent être égaux ? n DB2: Oui : UNIQUE DISTINCT ORDER BY GROUP BY (rel. 2...) Non : WHERE HAVING GROUP BY (rel. 1) n Standard: Oui: DISTINCT ORDER BY GROUP BY (lev. 2) Non: WHERE HAVING GROUP BY (lev. 1) Undefined : UNIQUE n MsAccess: Oui DISTINCT ? Autres clauses

34 Valeurs nulles n Si x est nul et y nest pas, alors: 1. x > y est vrai ou faux ? 2. x < y est vrai ou faux ? –ex. pour évaluer ORDER BY n DB2 : oui pour (1) ? MsAccess n Standard: oui pour (1) oui pour (2), selon implémentation n Est-il vrai que: SELECT * FROM S WHERE CITY ='Paris' UNION SELECT * FROM S WHERE NOT CITY = 'Paris' ; est toujours "pourquoi faire simple: SELECT * FROM S ; si on peut faire compliqué" ?

35 Valeurs nulles n SELECT P_1.* FROM P AS P_1 WHERE p_1.weight > all (select (py.weight) from P as py where py.color = 'blue'); n SELECT P_1.* FROM p AS P_1 WHERE not exists (select * from P as py where py.color = 'blue' and py.weight >= p_1.weight ); ?Requêtes équivalentes ? ?test color et weight nuls ?remplace all par any et vois le résultat

36 Valeurs nulles n Fonctions scalaires –peuvent sappliquer aux nuls –ABS, INT, LCASE... (nul) = nul –peuvent générer une erreur F LOG (nul) -> #Error n A voir cas par cas

37 Fonctions Scalaires Date/Temps SELECT Now() AS now, Weekday(#30/10/06#) AS [weekday of 30/10/06], Weekday(#30/10/06#+15) AS [weekday + 15], weekdayname(2) AS [weekdaynameerror for 30/10/06], WeekdayName(weekday(datevalue(now())-1)) AS [weekdaynamecorrig for now ()] FROM S; n Une erreur de calcul du nom du jour de la semaine existe en version française de MsAccess 2003 –En ang. le dimanche est le 1èr jour de la semaine –Donc « 2 » ci-dessus doit donner lieu au lundi

38 Fonctions Scalaires Date/Temps SELECT Now() AS now, TimeValue(Now()) AS timevalue, TimeValue(Now())+TimeValue(Now()) AS [adding timevalues], hour(now()) AS [hour], month(now()) AS [month], weekday(datevalue(now())) AS datevalue, monthname(month(now())) AS monthname, weekday(day(now())-1) AS [day] FROM S; Notez lerreur non-signalée daddition de date-temps.

39 Fonctions scalaires n Echelle Logarithmique SELECT SP.[s#] AS X, Round((Log(Sum([qty])))/Log(10),1) AS [Echelle log10 Y(cm)], Sum(SP.qty) AS Y, Mid([s#],2,2) AS [Echelle lin X(cm)] FROM SP GROUP BY SP.[s#], Mid([s#],2,2); X Echelle log10 Y(cm) Y Echelle lin X(cm) s13, s22,53002 s32,64003 s

40 Fonctions scalaires n Peuvent aider à créer des agrégations –Par exemple : Produit n Le tuple (S1, p2, 10) indique que pour toute pièce P1 de S1, il faut 10 pièces P2. –Etc pour S1 et P3…, S4 et P1 et P2… n Quelle quantité totale il faut commander chez chaque fournisseur ? s# Product ID qty s1p130 s1p210 s1p34 s1p45 s1p510 s1p610 s2p230 s3p240 s4p120 s4p220 s4p430 s4p540

41 Fonctions scalaires SELECT [s#], round(exp(Sum(Log([qty]))), 0) AS Produit FROM SP1 where [P#] >= 'P1' group by [s#] s# Product ID qty s1p130 s1p210 s1p34 s1p45 s1p510 s1p610 s2p230 s3p240 s4p120 s4p220 s4p430 s4p540 s#Produit s s230 s340 s

42 GROUP BY n Est une clause redondante avec le SELECT à sous- requêtes n La requête SELECT P#, MAX(QTY) FROM SP GROUP BY P# ; est équivalente à SELECT DISTINCT P#, (SELECT MAX(QTY) FROM SP AS X WHERE X.P# = SP.P#) FROM SP ; n Testez ! n Ca sapplique à toute fonction agrégat ?Que faire avec les clauses WHERE et HAVING

43 HAVING avec Une Sous-requête SELECT TOP 2 SP.[S#], Avg(SP.Qty) AS Moyenne FROM SP GROUP BY SP.[S#] HAVING (((Avg(SP.Qty))> (select avg(qty) from sp where sp.[s#] = 's4'))) ORDER BY avg(Qty) DESC; S#Moyenne s3400 s2300

44 LIST Function n La requête SELECT P#, MAX(QTY), LIST(S#, QTY) FROM SP GROUP BY P# ; Donne la valeur agrégée et les détails par fournisseur n Comme les tabulations croisées –Mais en + simple n LIST nexiste en standard que sur SQL Anywhere DBMS –En mono attribut (2004) n En MsAccess, LIST peut être réalisé par un formulaire avec les sous-formulaires

45 LIST Function n Pour en savoir + –Litwin, W. Explicit and Implicit LIST Aggregate Function for Relational Databases. IASTED Intl. Conf. On Databases & Applications, 2004

46 GROUP BY avec WHERE n Clause WHERE SELECT P#, MAX(QTY), MIN(QTY) FROM SP WHERE S# <> S1 GROUP BY P# ; est équivalente à: SELECT DISTINCT P#, (SELECT MAX(QTY) FROM SP AS X WHERE X.S# <> S1 AND X.P# = SP.P#) AS MAXQ, (SELECT MIN(QTY) FROM SP AS X WHERE X.S# <> S1 AND X.P# = SP.P#) AS MINQ FROM SP WHERE S# <> S1 ; n Peut servir pour réaliser T-GROUP BY (voir plus loin)

47 GROUP BY n Les deux formulations ne sont pas toujours équivalentes SELECT MAX(QTY) FROM SP GROUP BY P# ; nest pas (tout à fait) équivalent à: SELECT DISTINCT P#, (SELECT MAX(QTY) FROM SP AS X WHERE X.P# = SP.P#) FROM SP ; ?Pourquoi

48 GROUP BY avec HAVING n La clause HAVING est également redondante SELECT P# FROM SP GROUP BY P# HAVING COUNT(*) > 1; est équivalent à: SELECT DISTINCT P# FROM SP, WHERE (SELECT COUNT(*) FROM SP AS X WHERE X.P# = SP.P#) > 1 ; ?Pourquoi ?Et si on ajoutait la clause WHERE S# <> S1

49 T-GROUP BY n Proposé pour SQL n Permettrait de faire les groupes par rapport à = n Le rôle de -join par rapport à equi-join n Ainsi la requête hypothétique: SELECT P#, AVG(QTY) AS QTY1 INT(AVG(QTY)) AS QTY2 FROM SP T-GROUP (QT1 BY P#, QT2 BY <> P#) donnerait la quantité moyenne de toute pièce autre que la pièce P# avec la quantité moyenne de la pièce P#, pour la comparaison éloquente

50 T-GROUP BY n On peut réaliser la requête précédente à lheure actuelle sous MsAccess comme: SELECT DISTINCT SP.[p#] AS part, (SELECT int(avg(QTY)) FROM SP AS X WHERE X.[P#] <> SP.[P#]) AS avg_qty_other_parts, (SELECT avg(QTY) FROM SP AS X WHERE X.[P#] = SP.[P#]) AS part_avg_qty FROM SP; n Vrai ou Faux ?

51 T-GROUP BY n Résultat: partavg_qty_other_partspart_avg_qty p p p p p p

52 T-GROUP BY n En savoir +: –Litwin, W. Galois Connections, T-CUBES, & P2P Database Mining. 3rd Intl. Workshop on Databases, Information Systems and Peer-to-Peer Computing (DBISP2P 2005), VLDB 2005 Springer Verlag (publ.) VLDB 2005

53 Rangs Non-Denses (Non Dense Ranking) SELECT [s#], [p#], (select count(*) from SP as X where X.qty > sp.qty)+1 as [non dense rank], qty FROM SP order by qty desc, [s#] asc s#p#qty ND- rank s4p54001 s3p24001 s1p34001 s4p43004 s2p23004 s1p13004 s4p22007 s1p42007 s1p22007 s4p12007 s1p s1p510011

54 Rangs Non-Denses (Graphique MsAccess) s#p#qty ND- rank s4p54001 s3p24001 s1p34001 s4p43004 s2p23004 s1p13004 s4p22007 s1p42007 s1p22007 s4p12007 s1p s1p510011

55 Rangs Denses (Dense Ranking) SELECT [s#], [p#], (select count(qty) from (select distinct qty from SP as y) as X where X.qty > sp.qty)+1 AS [D-rank], qty FROM SP ORDER BY qty DESC, [s#]; s#p#qty D- rank s1p34001 s3p24001 s4p54001 s1p13002 s2p23002 s4p43002 s1p42003 s1p22003 s4p22003 s4p12003 s1p61004 s1p51004

56 Rangs Denses Graphique MsAccess s#p#qtyD-rank s1p34001 s3p24001 s4p54001 s1p13002 s2p23002 s4p43002 s1p42003 s1p22003 s4p22003 s4p12003 s1p61004 s1p51004

57 Distribution n La probabilité quune pièce soit fournie par un fournisseur –Arrondie à 3 chiffres décimaux 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;

58 Résultat s#Distribution s10,419 s20,097 s30,129 s40,355

59 Distribution Cumulative n La probabilité cumulative quune pièce soit fournie par un fournisseur –Arrondie à 3 chiffres décimaux 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 Cumulée] FROM SP ORDER BY SP.[s#];

60 Résultat s# Distribution Cumulée s10,419 s20,516 s30,645 s41

61 Autres Opérations Utiles Chasse aux valeurs inconnues –Dépendances Fonctionnelles -Interpolation (linéaire…) Echelle logarithmique dabscisses -Fonctions scalaires log, int, floor.. Voir le livre de Tropashko (cours 1)

62 Liste de Choix Multibase « Liste de choix » dans la définition dun attribut peut être multibase Un fournisseur dans la base S-P ne pourrait être choisi que dans une ville dun client de Northwind Un code postal dans la base Clients devrait être dans la base nationale de codes postaux ….

63 Liste de Choix Multibase Requête : Test-liste-de-choix mdb SELECT C.[City], C.ContactName FROM [northwind2000].customers AS C ORDER BY C.City, C.ContactName;

64 Liste de Choix Multibase Résultat On ne peut pas déclarer la requête MBD directement Pourqoui ? Très bonne question à Microsoft

65 UNION Prédictions de Valeurs Inconnues n On considère la DF entre Qty et Qty1 SELECT Qty1, qty, [s#], [p#] FROM SP as SP1 where qty1 = (select min(qty1) from SP where qty = sp1.qty) union SELECT Qty1, qty, [s#], [p#] FROM SP as SP1 where qty1 is null order by qty, qty1 desc SP s#p#qtyQty1 s1p s1p2200 s1p s1p s1p5100 s1p s2p2300 s3p2400 s4p1200 s4p2200 s4p4300 s4p5400

66 UNION Prédiction de Valeurs Inconnues SP s#p#qtyQty1 s1p s1p2200 s1p s1p s1p5100 s1p s2p2300 s3p2400 s4p1200 s4p2200 s4p4300 s4p5400 Qty1qtys#p# s1p6 100s1p s1p4 200s1p2 200s4p1 200s4p s1p1 300s2p2 300s4p s1p3 400s3p2 400s4p5 On peut compléter SP par UPDATE SP Résultat

67 UNION Prédictions de Valeurs Inconnues n On considère AVG(Qty1) pour Qty SELECT qty, "predicted value" as [for part], Avg(Qty1) as [predicted or unknown Qty1] FROM SP group by qty, "p#" union SELECT qty, [p#], Qty1 FROM SP as SP1 where qty1 is null order by qty SP s#p#qtyQty1 s1p s1p2200 s1p s1p s1p5100 s1p s2p s3p2400 s4p s4p2200 s4p4300 s4p5400

68 UNION Prédiction de Valeurs Inconnues On peut compléter SP par UPDATE SP Résultat SP s#p#qtyQty1 s1p s1p2200 s1p s1p s1p5100 s1p s2p s3p2400 s4p s4p2200 s4p4300 s4p5400 qtyfor part predicted or unknown Qty1 100p5 100predicted value200 p2 200predicted value p4 300predicted value p2 400p5 400predicted value600

69 Tendance qtyQty SELECT SP.qty, SP.Qty1 FROM SP WHERE (((SP.Qty1) Is Not Null)) ORDER BY SP.qty; SP est celui avec la DF entre Qty et Qty1

70 Fonctions Agrégat pour OLAP DB2 n CountBig –Pour le nombre de tuples > 2**31 n Covariance –entre des attributs ou des expressions de valeur –Facile à mettre en œuvre sous MsAccess F Cov (X,Y) = E (XY) – E(X)*E(Y) n Correlation –entre des attributs ou des expressions de valeur F idem pour MsAccess n Regression functions –10 fonctions –Les paramètres de la droite de régression entre des attributs ou des expressions de valeur n Rank, Dense_Rank –Rank en présence de duplicata : 1,2,2,4,4,6… –Dense_Rank en présence de duplicata : 1,2,2,3,3,4…

71 Fonctions Agrégat pour OLAP DB2 n Fonctions spécifiques à DB2 Data Warehouse Center: –Analyse de la variance (ANOVA) F Distributions de Fisher-F F Valeur P –Sous-totaux par période de temps –Test de Chi-carré –Statistique T pour n paires de valeurs et à partir du coeff. de corrélation r T = r * ((n – 2 ) / (1 - r 2 )) 0.5 –T 0 indique une corrélation entre les attributs

72 Fonctions Agrégat pour OLAP Teradata n RANK n CSUM (Cumulative (Running) Sums) n MAVG and MSUM n MDIFF (Moving Difference) n QUANTILE n QUALIFY n SAMPLE

73 SELECT EmployeeName, (HireDate - DATE) AS ServiceDays, RANK ( ServiceDays ) as Seniority FROM Employee ORDER BY EmployeeName; EmployeeName Service Days Seniority Robyn Baker Nick Garrison Kyle McVicker Eva OMalley Norma Powers

74 SELECT Item, SalesDate, CSUM(Revenue,Item,SalesDate) as CumulativeSales FROM (SELECT Item, SalesDate, Sum( Sales ) as Revenue FROM DailySales WHERE StoreId=5 AND SalesDate Between 1/1/1999 and 1/31/1999 GROUP BY Item, SalesDate) AS ItemSales ORDER BY SalesDate ; Item SalesDate CumulativeSales InstantCOW 01/01/ InstantCOW 01/02/ InstantCOW 01/03/ InstantCOW 01/04/

75 SELECT MarketDay,ClosingPrice, MAVG(ClosingPrice,50,MarketDay) as XYZAverage FROM MarketDailyClosing WHERE Ticker = XYZ ORDERBY MarketDay; MarketDay ClosingPrice XYZAverage 12/27/ / /2 12/28/ /8 86 1/16 12/29/ /4 86 1/2 12/30/ /2 87

76 SELECT MarketWeek, WeekVolume, MDIFF (WeekVolume,1,MarketWeek)asXYZVolumeDiff FROM (SELECT MarketWeek, SUM(Volume) as WeekVolume FROM MarketDailyClosing WHERE Ticker = XYZ GROUP BY MarketWeek) ORDERBY MarketWeek; MarketWeek WeekVolume XYZVolumeDiff 11/29/ ? 12/06/ /13/ /20/ /27/

77 SELECT Item, Profit, QUANTILE( 10, Profit ) as Decile FROM (SELECTItem,Sum(Sales)(Count(Sales)*ItemCost) asProfit FROM DailySales, Items WHERE DailySales.Item = Items.Item GROUP BY Item) AS ItemProfit; Item Profit Decile High Tops Low Tops Running Casual Xtrain

78 ROLLUP (DB2 & SQL-Server) n Groupements multiples (super-groupes) selon une dimension –l ordre des attributs dans la clause a l importance –les attributs sont progressivement « oublies » de droite à gauche n Remplace plusieurs requêtes GROUP BY SELECT p#, sum (qty) as tot-qty from S,SP, P WHERE SP. P# = P.P# AND SP. S# = S.S# GROUP BY ROLLUP (P#, S.CITY, COLOR) HAVING tot-qty > 100 ; n Problèmes avec des nulls que lon verra plus tard

79 CUBE (DB2 & SQL-Server) n Groupements multiples selon toutes les dimensions –l ordre des attributs dans la clause n a pas d importance –les attributs sont progressivement « oublies » de droite à gauche n Remplace plusieurs requêtes GROUP BY SELECT p#, sum (qty) as tot-qty from S,SP, P WHERE SP. P# = P.P# AND SP. S# = S.S# GROUP BY CUBE (P#, S.CITY, COLOR) HAVING tot-qty > 100 ; n Problèmes avec des nuls que lon verra plus tard n Opération bien plus chère que Rollup –2 N requêtes générées au lieu de N, pour N attributs

80 GROUPING SETS n On indique explicitement les groupes –entre (..) F le groupe () est constitué de toute la table SELECT p#, sum (qty) as tot-qty from S,SP, P WHERE SP. P# = P.P# AND SP. S# = S.S# GROUP BY GROUPING SETS ((P#, S.CITY, COLOR), (P#, COLOR), ()) HAVING tot-qty > 100 ; n Problèmes avec des nuls que lon verra plus tard

81 Rollup, Cube, Grouping Sets sous MsAccess n Il y en a pas n On peut simuler ces manipulations en utilisant –GROUP BY –UNION ALL –ORDER BY n Peut être laborieux pour le CUBE

82 ROLLUP Remarquez le « null as city»

83 ROLLUP

84 ROLLUP Et le CUBE ? Une solution pour l ambiguïté de certains nuls ?

85 Fermeture transitive (DB2) n Considère la table COURS (CNOM, PNOM, NMIN) contenant les cours et leur pré-requis avec les notes minimales pour l admission en cours –ex. (BDs, Str-Ph, 15) n Tout PNOM est une clé étrangère avec CNOM comme clé primaire ailleurs dans COURS n Un cours peut avoir plusieurs pré-requis n Trouver les noms de tous les pré-requis de cours CNAME = BDs –y compris les pré-requis de pré-requis etc. n C est le calcul de la fermeture transitive n Impossible encore sous MsAccess, SQL Server =< 6.5, Oracle, Informix… n Possible sous DB2, à partir de V 5.0

86 Fermeture transitive (DB2) WITH PRQ (CNOM, PNOM) AS ((SELECT CNOM, PNOM FROM COURS WHERE CNOM = BDs ) UNION ALL (SELECT C.CNOM, C.PNOM FROM PRQ AS P, COURS AS C WHERE C.CNOM = P.PNOM)) SELECT DISTINCT PNOM FROM PRQ n La requête récursive s exécute tant que la sélection dans PRQ avec PRQ courant nest pas vide. Requête initiale Requête récursive Requête finale

87 Fermeture transitive (DB2) Requête initiale (préreq. de BDs 1ere exécution de la Requête récursive (préreq. de BDs) COURS 2eme exécution de la Requête récursive (préreq. de préreq. de BDs) 3eme exéc. de la RR (préreq. de préreq. de préreq. de BDs) etc.

88 Fermeture transitive (DB2) CNOMPNOM BDsStPh BdsLprg CNOMPNOMNMIN BDsStPh15 BDsLPrg12 StPhInfG13 InfGMath11 LprgInfG12

89 Fermeture transitive (DB2) CNOMPNOM BDsStPh BdsLprg CNOMPNOMNMIN BDsStPh15 BDsLPrg12 StPhInfG13 InfGMath11 LprgInfG12 StPhInfG LprgInfG

90 Fermeture transitive (DB2) CNOMPNOM BDsStPh BdsLprg CNOMPNOMNMIN BDsStPh15 BDsLPrg12 StPhInfG13 InfGMath11 LprgInfG12 StPhInfG LprgInfG InfGMath

91 Fermeture transitive (DB2) CNOMPNOM BDsStPh BdsLprg CNOMPNOMNMIN BDsStPh15 BDsLPrg12 StPhInfG13 InfGMath11 LprgInfG12 StPhInfG LprgInfG InfGMath PNOM StPh InfG Math

92 Fermeture transitive ?Trouver aussi les notes minimales nécessaires kAutres applications k Tous les subordonnées d un chef EMPL (E#, ENOM, CHEF) kToutes les composantes PMIN de pièces composées COMP (PMAJ#, PMIN#) kTous les descendants / ascendants d une personne k Toutes les participations d une entreprise kLimite dapplication k Pas de cycles entre les attributs sélectionnes kpour que l on a la fermeture transitive (point fixe) kex. pas de participations réciproques

93 Fermeture transitive MsAccess n Il faut simuler –par CREATE TABLE PRQ F avec la création de clé primaire –Insert into PRQ.. select … from COURS... –Insert into PRQ.. select … from PRQ, COURS… F exécuté interactivement ou par programme jusqu'à ce que le point fixe est atteint –Select … FROM PRQ… n A compléter par vos soins

94 FIN FIN

95