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.

Slides:



Advertisements
Présentations similaires
[number 1-100].
Advertisements

26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom.
Calcul de tuple, de domaine et QBE
Les Prepositions.
Jeudi 24/09 Correction TP du mardi 22/09
SQL - Subtilités.
Algèbre relationnelle
1 Créer les Applications de BDs : SQL Imbriqué Witold Litwin.
Georges Gardarin 1 LE LANGAGE DE REQUETES SQL l Origines et Evolutions l SQL1 86: la base l SQL1 89: l'intégrité l SQL2 92: la nouvelle norme l SQL3 98:
Programme Introduction aux BD et aux SGBD Le modèle relationnel
Minimisation Techniques 1 Assimilation Algorithms: Minimisation Techniques Yannick Trémolet ECMWF Data Assimilation Training Course March 2006.
Les Requêtes S.Q.L « Structured Query Language)
Les fonctions.
Français I Leçon 2B Une semaine au lycée Au Debut #7 (for the dates of November 5 and 6) Please Translate the Following: 1. I love the math course. (Adorer.
1 SQL Avancé 2011 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie.
LMD: Langage de Manipulation de Données
Développement d’applications web
Le Langage d’Interrogation de Données LID Multi-table Jointures
1 of 46 2 of 46 UPDATE UPDATE ON TV ANTENNAS SINCE LAST BOARD MEETING SINCE LAST BOARD MEETING HELD ON FEBRUARY 25, 2010, YOUR BOARD HAS MADE MORE PROGRESS.
10 Copyright © Oracle Corporation, Tous droits réservés. Autres concepts relatifs aux déclencheurs.
Regrouper les Données avec les Fonctions de Groupe
Mise en œuvre du langage MDX - 1 ère partie- Présentation de lexemple et des outils utilisés -1-
1 of of 40 UPDATE UPDATE ON TV ANTENNAS SINCE LAST BOARD MEETING SINCE LAST BOARD MEETING HELD ON FEBRUARY 25, 2010, YOUR BOARD HAS MADE MORE PROGRESS.
Langages du Web Sémantique
LUNDI – MARDI – MERCREDI – JEUDI – VENDREDI – SAMEDI – DIMANCHE
Cours N°2 Base de Données & Langage SQL
1 SQL : Un Langage Relationnel Witold LITWIN 2 Langage de base de données (Database Language) n Un sous-langage de programmation n Consiste traditionnellement.
1 LE LANGAGE DE REQUETES SQL Origines et Evolutions SQL1 86: la base SQL1 89: l'intégrité.
THE DAYS MondayTuesday WednesdayThursday Friday Saturday Sunday.
La Saint-Valentin Par Matt Maxwell.
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Contraintes et Triggers Chapitre 5,
Notre calendrier français MARS 2014
Mon anniversaire est le 29 juin. J’ai trente-huit ans!
1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie.
Annexe 1 VISITE SUR
Quelle heure est-il ??. THE TIME: OCLOCK IL EST HEURE IL EST + + HEURES etc.
1 SQL Manipulations Avancées (08-09) Witold Litwin.
1 SQL Manipulations Avancées (08-09) Witold Litwin.
1 SQL Manipulations Avancées Witold Litwin 2 Exemple canon S P SPSP.
Manipulation des données Requêtes simples
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
C'est pour bientôt.....
Veuillez trouver ci-joint
Copyright 2011 – Les Chiffres Copyright 2011 –
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL jointure PHILIPPE BANCQUART.
Limiter et trier des données
LUNDI – MARDI – MERCREDI – JEUDI – VENDREDI – SAMEDI – DIMANCHE
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Le langage SQL LDD : Langage de Définition de Données
Study & revise the numbers carefully.
10 paires -. 9 séries de 3 étuis ( n° 1 à 27 ) 9 positions à jouer 5 tables Réalisé par M..Chardon.
Modélisation des données Niveau conceptuel DON-2 V0-0.
CALENDRIER-PLAYBOY 2020.
USAM BRIDGE H O W E L L -CLASSIQUE
01. Liste des noms de candidats avec leur date de naissance.
Mise en œuvre du langage MDX
9 paires séries de 3 étuis ( n° 1 à 27 )
Traduction des opérations sous MySQL
Les Chiffres Prêts?
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
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.
Algèbre relationnelle
Transcription de la présentation:

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 peut être exprimé de plusieurs manières (SQL Oracle): CHAR(n) VARCHAR(n) FLOAT DECIMAL NUMBER INTEGER SMALLINT LONG LONG VARCHAR

3 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é

4 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 ?

5 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,

6 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

7 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;

8 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 Les parenthèses priment sur l'ordre ci-dessus

9 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 John et pourquoi SELECT * FROM S where sname between 'b*' and 'J*'; ?Et si on ecrit: SELECT * FROM S where sname between 'J*' and 'b*'; –Le résultat s applique aussi aux valeurs numériques

10 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

11 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");

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

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

14 Sous-requêtes n Utilise quand: –Il y a une fonction d'agrégat à mettre dans la clause WHERE –On 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-reqûete SELECT * FROM EMP WHERE SAL < (SELECT AVG(SAL) FROM EMP) ;

15 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

16 Valeurs nulles n Si x est nul et y est non nul, 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é" ?

17 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

18 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

19 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

20 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.

21 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

22 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 il peut être réalisé par un formulaire avec les sous- formulaires

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

24 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 ;

25 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

26 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

27 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 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

28 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 ?

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

30 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 –

31 FIN FIN

32