La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Cédric du Mouza – NFA0111 Approfondissement Bases de Données NFA011 Cédric du Mouza (d’après des supports d’Elisabeth Métais)

Présentations similaires


Présentation au sujet: "Cédric du Mouza – NFA0111 Approfondissement Bases de Données NFA011 Cédric du Mouza (d’après des supports d’Elisabeth Métais)"— Transcription de la présentation:

1 Cédric du Mouza – NFA0111 Approfondissement Bases de Données NFA011 Cédric du Mouza (d’après des supports d’Elisabeth Métais)

2 Cédric du Mouza – NFA0112 SQL, le langage d'interrogation  Rappels  Algèbre relationnelle - les opérateurs  Expression des requêtes à l'aide de l'algèbre relationnelle  Projection et restriction  Fonctionnalités diverses  Requêtes imbriquées  La jointure  Opérateurs ensemblistes  La division  Groupement (GROUP BY)

3 Cédric du Mouza – NFA0113 Le modèle relationnel  Une base de données est constituée d’un ensemble de relations  Une relation possède un schéma, constitué d’un nom de relation et d’un ensemble d’attributs  Un attribut d’une relation se caractérise par un nom unique et prend ses valeurs dans un domaine donné (ex.: chaîne de caractères, entier, date, etc) Exemple: AVION(Numav:entier,Capacité:entier,Type:string,Entrepot:string) PILOTE(Matricule:entier,Nom:string,Ville:string,Age:entier,Salaire: entier)

4 Cédric du Mouza – NFA0114 Schéma relationnel  Une relation peut être représentée sous forme de table où: Chaque colonne correspond à un attribut Chaque ligne (appelée aussi nuplet) correspond à un élément de l’ensemble de la relation L’ordre des lignes n’a pas d’importance contrairement aux colonnes AVION Numav Capacite Type Entrepot 1425A400 Garches 34575B200 Maubeuge PILOTE Matricule Nom Ville 1FigueCannes 45 28004 2LavandeTouquet 24 11758 Age Salaire

5 Cédric du Mouza – NFA0115 Langage d’interrogation Rappels

6 Cédric du Mouza – NFA0116 SQL (Structured Query Language)  La définition et la modification du schéma de la base de donnée,  La manipulation des données  L'interrogation des données,  Le contrôle des accès à la base. SQL permet:

7 Cédric du Mouza – NFA0117 Généalogie du langage SQL Algèbre relationnelle Calcul de tuples Autre SQL VOL DEPART Numvol Heure_départ Caen {V.Heure_Départ/ Vol (V) et V.Ville_arrivée = 'Caen' et  D / Départ (D) et D.Numvol = V.Numvol et D.Date = '19-12-95'}

8 Cédric du Mouza – NFA0118 Compagnie Aerienne (1) AVION Numav Capacite Type Entrepot 1425A400 Garches 34575B200 Maubeuge PASSAGERNumab Nomab 1Nifance 8Téarice PILOTE Matricule Nom Ville 1FigueCannes 45 28004 2LavandeTouquet 24 11758 Age Salaire

9 Cédric du Mouza – NFA0119 Compagnie Aerienne (2) RESERVATION Numab Numvol Date_dep 1AL1231-12-95 2AL1231-12-95 VOL Numvol Heure_départ Heure_arrivée Ville _départ Ville_arrivée AL1208-1809-12ParisLilles AF811-2023-54VauxRio DEPART Numvol Date_dep Numav Matricule AL1231-12-95141 AL1219-12-953452

10 Cédric du Mouza – NFA01110 Langage d’interrogation Algèbre relationnelle - les opérateurs

11 Cédric du Mouza – NFA01111 Interrogation de la base de données à travers des opérateurs de type algébrique, c'est-à-dire qui peuvent se composer pour obtenir le résultat. 5 opérations de base pour exprimer toutes les requêtes.  2 Opérations unaires:  Restriction  Projection Opérateurs de l'algèbre relationnelle

12 Cédric du Mouza – NFA01112  3 opérations binaires  Union  Différence  Produit cartésien  Autres opérations dérivées  Jointure  Intersection  Division Opérateurs de l'algèbre relationnelle

13 Cédric du Mouza – NFA01113 La restriction La restriction (ou sélection) d'une relation R selon un critère Q donne une relation de même schéma, avec pour tuples résultats ceux de R qui satisfont le critère Q. Elle est notée Q est une expression composée de connecteurs (ET ^, OU v ) et de prédicats (, ≤, ≥, ≠, =) portant sur les attributs, évaluables à Vrai ou à Faux pour un tuple donné. σ Q (R)

14 Cédric du Mouza – NFA01114 La restriction Critère de restriction: Entrepôt = 'Cannes' AVION NUMAVCAPAC.TYPEENTREP. 1 2 3 4 150 100 45 200 B707 A500 C2000 B707 Cannes Rio Nice

15 Cédric du Mouza – NFA01115 La projection La projection d'une relation R sur un ensemble d'attribut C donne une relation ayant pour schéma cet ensemble d'attributs. Elle est notée Ses tuples sont ceux de la relation R, réduits aux attributs de la projection. π C (R)

16 Cédric du Mouza – NFA01116 La projection AVION NUMAVCAPAC.TYPEENTREP. 1 2 3 4 150 100 45 200 B707 A500 C2000 B707 Cannes Rio Nice Attributs de projection: capacité, type

17 Cédric du Mouza – NFA01117 Les opérateurs de restriction et de projection peuvent se combiner pour sélectionner un résultat: Combinaison des deux opérations AVION NUMAVCAPAC.TYPEENTREP. 1 2 3 4 150 100 45 200 B707 A500 C2000 B707 Cannes Rio Nice

18 Cédric du Mouza – NFA01118 UNION, DIFFERENCE ET INTERSECTION

19 Cédric du Mouza – NFA01119 Sur l'exemple: AVION_1NUMAVCAPAC.TYPEENTREP. 1 2 150 100 B707 A500 Cannes AVION_2 NUMAV CAPAC.TYPEENTREP. 3 2 4 45 100 200 C2000 A500 B707 Nice Cannes Nice

20 Cédric du Mouza – NFA01120 Sur l'exemple: UNION AVION_1  AVION_2 NUMAV CAPAC. TYPE ENTREP. 1 2 3 4 150 100 45 200 B707 A500 C2000 B707 Cannes Nice

21 Cédric du Mouza – NFA01121 Sur l'exemple: INTERSECTION AVION_1  AVION_2 NUMAV CAPAC. TYPE ENTREP. 2 100A500Cannes

22 Cédric du Mouza – NFA01122 Sur l'exemple: DIFFERENCE AVION_1 - AVION_2NUMAVCAPAC.TYPEENTREP. 1150B707Cannes

23 Cédric du Mouza – NFA01123 Le produit cartésien  Le produit cartésien de deux relations R1 et R2 est une relation dont le schéma est la concaténation des schémas de R1 et R2.  Il est noté R1 x R2  Ses tuples sont ceux de R1, concaténés chacun à tous les tuples de R2. PASSAGER NUMAB NOM 1 2 Amandier Lavande RESERVATION NUMAB NUMVOLDATE_DEP 1 2 AI 100 AI200 19-DEC-95 23-DEC-95 2 AL 500 24-DEC-95

24 Cédric du Mouza – NFA01124 Le produit cartésien P.NUMAB NOM 1 2 Amandier Lavande Réservation X Passager R.NUMAB NUMVOLDATE_DEP 1 2 AI 100 AI200 19-DEC-95 23-DEC-95 2 AL 500 24-DEC-95 1 2 2 AI 100 AI200 AL 500 19-DEC-95 23-DEC-95 24-DEC-95 2 2 1 1 Amandier Lavande

25 Cédric du Mouza – NFA01125 La jointure Critère: RESERVATION.NUMAB = PASSAGER.NUMAB Une jointure est un produit cartésien suivi d'une restriction sur un critère. P.NUMAB NOM 1 2 Amandier Lavande Réservation X Passager R.NUMAB NUMVOLDATE_DEP 1 2 AI 100 AI200 19-DEC-95 23-DEC-95 2 AL 500 24-DEC-95 1 2 2 AI 100 AI200 AL 500 19-DEC-95 23-DEC-95 24-DEC-95 2 2 1 1 Amandier Lavande

26 Cédric du Mouza – NFA01126 Résultat de la jointure RESULTAT: Jointure de la relation RESERVATION et de la relation PASSAGER sur le critère RESERVATION.NUMAB = PASSAGER.NUMAB P.NUMAB NOM 1 Amandier Lavande RESERVATION PASSAGER R.NUMAB NUMVOLDATE_DEP 1 AI 10019-DEC-95 2 2 AI200 AL 500 23-DEC-95 24-DEC-95 2 2 Lavande numab

27 Cédric du Mouza – NFA01127 La division Le résultat de la division d'une relation R par une relation S est une relation Q telle que: (1) Le schéma de Q est constitué des attributs de R n'appartenant pas à S. (2) Les tuples de Q sont ceux qui, concaténés à n'importe quel tuple de S donnent un tuple de R. R 1 2 2 MATRICULENUMAV 100 101 S NUMAV 100 101 Q MATRICULE 2

28 Cédric du Mouza – NFA01128 Langage d’interrogation Expression des requêtes à l'aide de l'algèbre relationnelle

29 Cédric du Mouza – NFA01129 Exemple 1 REQUETE: Quels sont les numéros, types et capacités des avions ayant une capacité supérieure à 100 ?

30 Cédric du Mouza – NFA01130 Exemple 1 REQUETE: Quels sont les numéros, types et capacités des avions ayant une capacité supérieure à 100 ? NUMAV, TYPE, CAPACITE CAPACITE > 100 AVION Résultat

31 Cédric du Mouza – NFA01131 Exemple 1 2 opérations de restriction sont-elles commutatives? σ A (σ B (R))=σ B (σ A (R)) ?? 2 opérations de projection sont-elles commutatives? π A (π B (R)) = π B (π A (R)) ?? La restriction et la projection sont-elles des opérations commutatives? π A (σ B (R)) = σ B (π A (R)) ??

32 Cédric du Mouza – NFA01132 REQUETE: Quels sont les noms des passagers voyageant sur le vol AF105 du 26 mars 1996? Exemple 2

33 Cédric du Mouza – NFA01133 REQUETE: Quels sont les noms des passagers voyageant sur le vol AF105 du 26 mars 1996? Exemple 2 PASSAGERRESERVATION NOMAB Numab = Numab NUMVOL = 'AF105' AND DATE_DEP = '26-03-96'

34 Cédric du Mouza – NFA01134 Exemple 2 Une opération de sélection et de jointure sont-elles commutatives? σ A (R∞S) = σ A (R)∞S Une opération de projection et de jointure sont-elles commutatives? π A (R∞S) = π A (R)∞S

35 Cédric du Mouza – NFA01135 Exemple 3 REQUETE: Quels sont les pilotes habitant à Deauville et partant pour Las Vegas ?

36 Cédric du Mouza – NFA01136 Exemple 3 REQUETE: Quels sont les pilotes habitant à Deauville et partant pour Las Vegas ? DEPART VOL Nom PILOTE Numvol Matricule Ville = 'Deauville' Ville_arrivée = 'Las Vegas'

37 Cédric du Mouza – NFA01137 Exemple 3 2 jointures sont-elles commutatives? R∞(S∞T) = (R∞S)∞T ??

38 Cédric du Mouza – NFA01138 Exemple 3 D’après les règles identifiées, proposer d’autres expressions sous forme d’arbre pour la requête de l’exemple 3. Conclusion?

39 Cédric du Mouza – NFA01139 Exemple 4 REQUETE: Quels sont les noms des pilotes effectuant le vol AL123 ?

40 Cédric du Mouza – NFA01140 Exemple 4 REQUETE: Quels sont les noms des pilotes effectuant le vol AL123 ? PILOTE DEPART Nom Matricule = Matricule Numvol = 'AL123

41 Cédric du Mouza – NFA01141 Exemple 5 REQUETE: Quels sont les noms des passagers pour des vols partant pour Dakar ?

42 Cédric du Mouza – NFA01142 Exemple 5 REQUETE: Quels sont les noms des passagers pour des vols partant pour Dakar ? RESERVATION VOL NOMAB PASSAGER Numvol Numab Ville_arrivée = 'Dakar'

43 Cédric du Mouza – NFA01143 Langage d’interrogation Projection et restriction

44 Cédric du Mouza – NFA01144 Projection, Restriction SELECT AVION.numav FROM AVION WHERE AVION.capacité > 200 Restriction seule: SELECT AVION.* FROM AVION WHERE AVION.capacité > 200 Projection seule: SELECT AVION.numav FROM AVION  Le principe

45 Cédric du Mouza – NFA01145 Exercices Exercice n° 1: Quel est l'âge du pilote de matricule 15 ? Exercice n° 2: Quels sont les pilotes de cette compagnie aérienne ? (leur matricule, leur nom, leur ville, leur âge et leur salaire).

46 Cédric du Mouza – NFA01146 Exercice n° 1: Quel est l'âge du pilote de matricule 15 ? SELECT PILOTE.AGE FROM PILOTE WHERE MATRICULE = 15 Correction de l'exercice n° 1

47 Cédric du Mouza – NFA01147 Exercice n° 2: Quels sont les pilotes de cette compagnie aérienne (leur matricule, leur nom, leur ville, leur âge et leur salaire). SELECT * FROM PILOTE Correction de l'exercice n° 2

48 Cédric du Mouza – NFA01148 Langage d’interrogation Fonctionnalités diverses

49 Cédric du Mouza – NFA01149 (a) Tri SELECT AVION.numav FROM AVION WHERE AVION.CAPACITE > 200 ORDER BY AVION.numav DESC (ou ASC) (b) Suppression des doublons SELECT DISTINCT AVION.numav FROM AVION WHERE AVION.CAPACITE > 200 (ou ALL) (c) Omission du préfixe SELECT numav FROM AVION WHERE CAPACITE > 200 (d) Emploi d ’alias SELECT A.numav FROM AVION A WHERE A.CAPACITE > 200 Tri, doublons, et alias

50 Cédric du Mouza – NFA01150 Exercice n° 3: Quels sont les types d'avions entreposés à Tarascon, avec leur capacité, par ordre de capacités croissantes ? Exercices

51 Cédric du Mouza – NFA01151 Exercice n° 3: Quels sont les types d'avions entreposés à Tarascon, avec leur capacité, par ordre de capacités croissantes ? SELECT DISTINCT TYPE, CAPACITE FROM AVION WHERE ENTREPOT = 'Tarascon' ORDER BY CAPACITE ASC Correction de l'exercices n° 3

52 Cédric du Mouza – NFA01152 SELECT NUMAV FROM AVION WHERE CAPACITE > 200 AND ((ENTREPOT= 'Saint nom la Bretèche') OR (ENTREPOT= 'Mantes la Jolie')) AND NUMAV != 300 SELECT NUMAV FROM AVION WHERE ENTREPOT IN ('Saint nom la Bretèche', 'Mantes la Jolie') AND CAPACITE BETWEEN 200 AND 210 AND TYPE LIKE 'B_EING%' = != > = <= NOT OR AND IN BETWEEN x AND y LIKE Prédicats dans le critère de sélection

53 Cédric du Mouza – NFA01153 Opérateurs logiques et valeurs nulles

54 Cédric du Mouza – NFA01154 Exercice n° 5: Quels sont les numéros d'avions, avec leur entrepôt, ne résidant pas à Marolles-en-Hurepoix, ayant une capacité supérieure à 200 ? (donnés par ordre de numéros décroissants). Exercice n° 4: Quelles sont les villes ayant un nom commençant par 'L' et où un pilote de moins de 20 ans gagne plus de 200000F ? Exercices

55 Cédric du Mouza – NFA01155 Exercice n° 4: Quelles sont les villes ayant un nom commençant par 'L' et où un pilote de moins de 20 ans gagne plus de 200000F ? SELECT DISTINCT VILLE FROM PILOTE WHERE AGE < 20 AND SALAIRE > 200000 AND VILLE LIKE 'L%' Correction de l'exercice n° 4

56 Cédric du Mouza – NFA01156 SELECT NUMAV, ENTREPOT FROM AVION WHERE ENTREPOT != 'Marolles-en-Hurepoix' AND CAPACITE > 200 ORDER BY NUMAV DESC Exercice n° 5: Quels sont les numéros d'avions, avec leur entrepôt, ne résidant pas à Marolles-en-Hurepoix, ayant une capacité supérieure à 200 ? (donnés par ordre de numéros décroissants). Correction de l'exercice n° 5

57 Cédric du Mouza – NFA01157 Les fonctions de date FonctionDescNormeAccessMySQLSql SrvOracle Current_dateDate couranteONONN Current_timeHeure couranteONONN GetdateHeure et date couranteNNNON NowHeure et date couranteNOOOO SysdateDate et heure couranteNNONO Day/month/yearSélectionne le jour/mois/anNOOON To_char(f1,f2) Conversion de date ou numérique en string NNNNO

58 Cédric du Mouza – NFA01158 Les fonctions sur chaînes de caractères FonctionDescNormeAccessMySQLSql SrvOracle Lower/UpperMise en minuscules/majuscONOOO SubstringExtraction sous-chaîneONONN SubstrExtraction sous-chaîneNNNNO Position Position d’une chaîne dans une autre ONONN Locate Position d’une chaîne dans une autre NOOOO

59 Cédric du Mouza – NFA01159 Les fonctions numériques FonctionDescNormeAccessMySQLSql SrvOracle AbsValeur absolueNOOOO CeilingValeur approchée hauteNOOON CeilValeur approchée hauteNNNNO FloorValeur approchée basseNOOOO Cos, sin, tan, exp, log,mod, power, sqrt Opérations diversesNOOOO

60 Cédric du Mouza – NFA01160 SELECT NUMAV FROM AVION WHERE LOWER (ENTREPOT) = 'le vésiney' Lower(a), Soundex (a), Abs(a), Sqrt(n), Length(a), etc... SELECT MATRICULE, NOM FROM PILOTE WHERE SOUNDEX (NOM) = SOUNDEX ('SINTEXUPERI') SELECT UPPER (NOM) FROM PILOTE WHERE ADRESSE = 'Cordillère des Andes' Les fonctions

61 Cédric du Mouza – NFA01161 Exercice n° 6: Quelles sont les villes d'où part un vol pour Ajaccio? (donner les résultats en majuscule). Exercices

62 Cédric du Mouza – NFA01162 Exercice n° 6: Quelles sont les villes d'où part un vol pour Ajaccio? (donner les résultats en majuscule). SELECT DISTINCT UPPER (VILLE_DEPART) FROM VOL WHERE VILLE_ARRIVEE = 'Ajaccio' Correction de l'exercice n° 6

63 Cédric du Mouza – NFA01163 Valeurs nulles  La valeur de certains attributs peut ne pas être connue, on parle alors de valeurs nulles (mot-clé NULL)  NULL n’est pas une valeur mais une absence de valeur! Les opérations ou les comparaisons ne peuvent lui être appliqué  Toute opération appliquée à NULL donne NULL  Toute comparaison avec NULL donne ni vrai ni faux, mais UNKNOW

64 Cédric du Mouza – NFA01164 Valeurs nulles  On associe à TRUE la valeur 1, à FALSE la valeur 0 et à UNKNOW la valeur ½  x AND y = min ( x, y )  x OR y = max ( x, y )  NOT x = 1 – x  Les conditions dans la clause WHERE sont évaluées pour chaque tuple et seuls ceux pour lesquels on obtient 1 (TRUE) sont gardés.

65 Cédric du Mouza – NFA01165 Valeurs nulles PILOTE Matricule Nom Ville 1FigueCannes 28004 2LavandeTouquet 24 Age Salaire SELECT Nom From PILOTE Where Age < 40 SELECT Nom From PILOTE Where Age < 40 AND Salaire > 10000 SELECT Nom From PILOTE Where Age < 40 OR Salaire < 10000 SELECT Nom From PILOTE Where Age ≤ 40 OR Age ≥ 40

66 Cédric du Mouza – NFA01166 Agrégations  Jusqu’à présent on a vu des requêtes comme suite d’opérations tuple à tuple  Les fonctions d’agrégation permettent d’exprimer des conditions/faire des opérations sur des groupes de tuples  Avec SQL nous pouvons: Partitionner une relation en groupes Exprimer des relations sur des groupes Agréger des valeurs sur les groupes  Il existe un groupe par défaut: la relation entière

67 Cédric du Mouza – NFA01167 Fonctions d’agrégation  S’appliquent en générale à des valeurs numériques  5 principales, appliquées sur chaque groupe COUNT qui compte le nombre de valeurs non nulles AVG qui calcule la moyenne des valeurs sur une colonne choisie SUM idem mais fait la somme MIN/MAX retourne la valeur MIN/MAX des valeurs d’une colonne choisie  Les opérateurs d’agrégation ne peuvent être utilisé que dans un SELECT (ou HAVING, voir plus loin)  Ne peuvent être utilisé dans un SELECT avec d’autres attributs (sauf si GROUP BY, voir plus loin)

68 Cédric du Mouza – NFA01168 SELECT COUNT (NUMAV) FROM AVION WHERE CAPACITE > 200 Avg, Count, Max, Min, Sum, Stddev, Variance Exemple: Quel est le nombre d'avions ayant une capacité supérieure à 200? SELECT COUNT (DISTINCT NUMAV) FROM AVION WHERE CAPACITE > 200 (ou ALL) Les agrégats

69 Cédric du Mouza – NFA01169 Exercices Exercice n° 7: Quel est le nombre d'avions en services (i.e. dans la relation DEPART), le 19 décembre 1995 ? Exercice n° 8: Quelle est la capacité moyenne des avions entreposés à Pogo Togo ?

70 Cédric du Mouza – NFA01170 SELECT COUNT (DISTINCT NUMAV) FROM DEPART WHERE DATE_DEP = '19-12-95' Exercice n° 7: Quel est le nombre d'avions en services (i.e. dans la relation DEPART), le 19 décembre 1995 ? Correction de l'exercice n° 7

71 Cédric du Mouza – NFA01171 Exercice n° 8 : Quelle est la capacité moyenne des avions entreposés à Pogo Togo ? SELECT AVG (ALL CAPACITE) FROM AVION WHERE AVION.ENTREPOT = 'Pogo Togo' Correction de l'exercice n° 8

72 Cédric du Mouza – NFA01172 Langage d’interrogation Requêtes imbriquées

73 Cédric du Mouza – NFA01173 SELECT FROM WHERE EXISTS ( SELECT FROM WHERE ); Exemple: Quels sont les pilotes qui habitent dans une ville où n'est basé aucun avion ? SELECT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE WHERE NOT EXISTS ( SELECT AVION.* FROM AVION WHERE AVION.ENTREPOT = PILOTE.VILLE) Prédicat d’existence

74 Cédric du Mouza – NFA01174 SELECT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE WHERE VILLE IN ( SELECT ENTREPOT FROM AVION WHERE CAPACITE > 250) Exemple: Quels sont les noms des pilotes (avec leurs matricules) qui habitent dans une ville où sont localisés des avions de capacité supérieure à 250 ? Requête à l'intérieur de IN

75 Cédric du Mouza – NFA01175 Exercice n° 9: Exprimer la requête suivante avec un "EXISTS": Quels sont les noms des pilotes (avec leur matricule) qui habitent dans une ville où sont localisés des avions de capacité supérieure à 250 ? Exercice n° 10: Exprimer la requête suivante avec un "IN": Quels sont les noms des passagers (avec leur numéro d'abonné) ayant réservé pour le 1er avril 1996 ? Exercices

76 Cédric du Mouza – NFA01176 Exercice n° 9: Exprimer la requête suivante avec un "EXISTS": Quels sont les noms des pilotes (avec leur matricule) qui habitent dans une ville où sont localisés des avions de capacité supérieure à 250 ? SELECT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE WHERE EXISTS ( SELECT * FROM AVION WHERE CAPACITE > 250 AND AVION.ENTREPOT = PILOTE.VILLE) Correction de l'exercice n° 9

77 Cédric du Mouza – NFA01177 Exercice n° 10: Quels sont les noms des passagers (avec leur numéro d'abonné) ayant réservé pour le 1 er avril 1996 ? (avec un "IN"). SELECT PASSAGER. NUMAB, PASSAGER. NOMAB FROM PASSAGER WHERE NUMAB IN (SELECT RESERVATION.NUMAB FROM RESERVATION WHERE RESERVATION.DATE_DEP = '01-04-96') Correction de l'exercice n° 10

78 Cédric du Mouza – NFA01178 Langage d’interrogation La jointure

79 Cédric du Mouza – NFA01179 SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE, DEPART WHERE PILOTE.MATRICULE = DEPART.MATRICULE AND DEPART.DATE_DEP = '13-10-95' Quels sont les noms des pilotes (avec leur matricule) qui assurent un vol le vendredi 13 octobre 1995 ? Exemple

80 Cédric du Mouza – NFA01180 SELECT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE WHERE EXISTS ( SELECT * FROM DEPART WHERE PILOTE.MATRICULE = DEPART.MATRICULE AND DEPART.DATE_DEP = '13-10-95') SELECT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE WHERE MATRICULE IN ( SELECT DEPART.MATRICULE FROM DEPART WHERE DATE_DEP ='13-10-95') Avec EXISTS Avec IN Expression d'une jointure à l'aide de requêtes imbriquées

81 Cédric du Mouza – NFA01181 Exercice n° 11: Quels sont les noms des pilotes (avec leur matricule) qui assurent un vol le vendredi 13 octobre 1995, sur un avion de capacité supérieure à 250 ? a) de manière prédicative, b) à l'aide de requêtes imbriquées. Exercice

82 Cédric du Mouza – NFA01182 SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE, DEPART, AVION WHERE PILOTE.MATRICULE = DEPART.MATRICULE AND DEPART.DATE_DEP = '13-10-95' AND DEPART.NUMAV = AVION.NUMAV AND AVION.CAPACITE > 250 Exercice n° 11: Quels sont les noms des pilotes (avec leur matricule) qui assurent un vol le vendredi 13 octobre 1995, sur un avion de capacité supérieure à 250 ? a) de manière prédicative, Correction de l'exercice n° 11

83 Cédric du Mouza – NFA01183 SELECT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE WHERE MATRICULE IN ( SELECT DEPART.MATRICULE FROM DEPART WHERE DATE_DEP ='13-10-95' AND NUMAV IN (SELECT AVION.NUMAV FROM AVION WHERE CAPACITE > 250)) Exercice n° 11: Quels sont les noms des pilotes (avec leur matricule) qui assurent un vol le vendredi 13 octobre 1995, sur un avion de capacité supérieure à 250 ? b) à l'aide de requêtes imbriquées Correction de l'exercice n° 11 (suite)

84 Cédric du Mouza – NFA01184 Exercices Exercice n° 12: Quelles sont les paires de pilotes (matricules) habitant dans la même ville ? Exercice n° 13: Quels sont les noms des pilotes (avec leur matricule) qui conduisent l'avion de numéro '666' ? Exercice n° 14: Quels sont les noms des pilotes (avec leur matricule) qui habitent dans la ville où est entreposé l'avion '666' ?

85 Cédric du Mouza – NFA01185  Il s'agit d'une auto-jointure SELECT P1.MATRICULE, P2.MATRICULE FROM PILOTE P1, PILOTE P2 WHERE P1.VILLE = P2.VILLE AND P1.MATRICULE > P2.MATRICULE Exercice n° 12: Quelles sont les paires de pilotes (matricules) habitant dans la même ville ? Correction de l'exercice n° 12

86 Cédric du Mouza – NFA01186 SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE, DEPART WHERE PILOTE.MATRICULE = DEPART. MATRICULE AND DEPART.NUMAV = '666' Exercice n° 13: Quels sont les noms des pilotes (avec leur matricule) qui conduisent l' avion de numéro '666' ? Correction de l'exercice n° 13

87 Cédric du Mouza – NFA01187 Exercice n° 14: Quels sont les noms des pilotes (avec leur matricule) qui habitent dans la ville où est entreposé l'avion '666' ? SELECT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE, AVION WHERE PILOTE.VILLE = AVION.ENTREPOT AND AVION.NUMAV = '666' Correction de l'exercice n° 14

88 Cédric du Mouza – NFA01188 Autres types de jointure  LEFT/RIGHT OUTER JOIN : retourne le résultat de la jointure plus tous les enregistrements de la table de gauche/droite n’ayant pas joint (complétés avec des valeurs NULL)  FULL OUTER JOIN : fonctionne comme si on faisait à la fois une LEFT et RIGHT OUTER JOIN  A INNER JOIN B ON… : équi-jointure (notation explicite)  A NATURAL JOIN B : jointure naturelle  A CROSS JOIN B : produit cartésien (notation explicite)

89 Cédric du Mouza – NFA01189 Langage d’interrogation Opérateurs ensemblistes

90 Cédric du Mouza – NFA01190 L’union dans SQL UNION Quels sont les pilotes (matricule et nom) qui conduisent l'avion de numéro '666' OU qui habitent dans la ville ou est entreposé l'avion '666' ? SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE, DEPART WHERE PILOTE.MATRICULE = DEPART. MATRICULE AND DEPART.NUMAV = '666' SELECT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE, AVION WHERE PILOTE.VILLE = AVION.ENTREPOT AND AVION.NUMAV = '666'

91 Cédric du Mouza – NFA01191 INTERSECT Quels sont les pilotes (matricule et nom) qui conduisent l'avion de numéro '666' ET qui habitent dans la ville ou est entreposé l'avion '666' ? SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE, DEPART WHERE PILOTE.MATRICULE = DEPART. MATRICULE AND DEPART.NUMAV = '666' SELECT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE, AVION WHERE PILOTE.VILLE = AVION.ENTREPOT AND AVION.NUMAV = '666' L’intersection dans SQL

92 Cédric du Mouza – NFA01192 Quels sont les pilotes (matricule et nom) qui conduisent l'avion de numéro '666' SAUF ceux qui habitent dans la ville ou est entreposé l'avion '666' ? MINUS SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE, DEPART WHERE PILOTE.MATRICULE = DEPART. MATRICULE AND DEPART.NUMAV = '666' SELECT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE, AVION WHERE PILOTE.VILLE = AVION.ENTREPOT AND AVION.NUMAV = '666' La différence dans SQL

93 Cédric du Mouza – NFA01193 Langage d’interrogation La division

94 Cédric du Mouza – NFA01194 Quels sont les pilotes (leur matricule et leur nom) qui conduisent tous les avions? Quels sont les pilotes tels que, quel que soit l'avion, ils le conduisent ? Quels sont les pilotes tels que, quel que soit l'avion, il existe un départ assuré par ce pilote sur cet avion ? Quels sont les pilotes tels qu'il n'existe pas d'avion tel qu'il n'existe pas de départ de ce pilote sur cet avion ? SELECT MATRICULE FROM PILOTE WHERE NOT EXISTS( SELECT * FROM DEPART WHERE DEPART.MATRICULE = PILOTE.MATRICULE AND DEPART.NUMAV = AVION.NUMAV)) SELECT * FROM AVION WHERE NOT EXISTS ( Expression de la division dans SQL

95 Cédric du Mouza – NFA01195 Exercice n° 15: Quels sont les passagers qui ont réservé sur tous les vols ? Exercice n° 16: Quel est le nombre de pilotes qui conduisent des avions en service (i.e. dans la relation départ)? Exercices

96 Cédric du Mouza – NFA01196 SELECT NUMAB FROM PASSAGER P WHERE NOT EXISTS (SELECT * FROM VOL V WHERE NOT EXISTS (SELECT * FROM RESERVATION R WHERE R.NUMAB = P.NUMAB AND R.Numvol = V.NUMVOL)) Exercice n° 15: Quels sont les passagers qui ont réservé sur tous les vols ? Correction de l'exercice n° 15

97 Cédric du Mouza – NFA01197 SELECT COUNT (DISTINCT DEPART.MATRICULE) FROM DEPART; Exercice n° 16: Quel est le nombre de pilotes qui conduisent des avions en service (i.e. dans la relation départ)? Correction de l'exercice n° 16

98 Cédric du Mouza – NFA01198 Langage d’interrogation Groupement (GROUP BY)

99 Cédric du Mouza – NFA01199 GROUP BY  L'opérateur "GROUP BY" partitionne la table  on construit les groupes en associant les tuples partageant la même valeur pour un ou plusieurs attributs  On effectue le SELECT…FROM…WHERE, puis on partitionne le résultat, puis on effectue les fonctions d’agrégation  Dans le select on ne peut avoir que des fonctions d’agrégation ou des attributs du GROUP BY

100 Cédric du Mouza – NFA011100 GROUP BY SELECT MAX (Heure_départ) FROM VOL WHERE Numvol LIKE ‘A%’ GROUP BY Ville_départ, Ville_arrivée EXEMPLE: Quel est l’heure maximale des vols commençant par la lettre ‘A’ par trajet ? EXEMPLE: Quel est le nombre de pilotes qui conduisent des avions en service, par avion ? SELECT NUMAV, COUNT (DISTINCT DEPART.MATRICULE) FROM DEPART GROUP BY NUMAV;

101 Cédric du Mouza – NFA011101 Exercice n° 17: Quelle est la capacité moyenne des avions, par entrepôt et par type ? Exercice

102 Cédric du Mouza – NFA011102 SELECT ENTREPOT, TYPE, AVG (CAPACITE) FROM AVION GROUP BY ENTREPOT,TYPE; Exercice n° 17: Quelle est la capacité moyenne des avions, par entrepôt et par type ? Correction de l'exercice n° 17

103 Cédric du Mouza – NFA011103  L'opérateur HAVING permet d'introduire une qualification sur les sous-tables issues du GROUP BY: EXEMPLE: Quels sont les avions qui assurent plus de 3 départs ? SELECT DEPART.NUMAV FROM DEPART GROUP BY NUMAV HAVING COUNT (*) > 3; Le HAVING est au GROUP BY ce que le WHERE est au FROM. GROUP BY... HAVING

104 Cédric du Mouza – NFA011104 Exercice n° 18: Quelles sont les villes où sont entreposés plus de 2 avions de type 'ICBM' ? Exercice

105 Cédric du Mouza – NFA011105 SELECT DISTINCT ENTREPOT FROM AVION WHERE TYPE = 'ICBM' GROUP BY ENTREPOT HAVING COUNT (*) > 2; Exercice n° 18: Quelles sont les villes où sont entreposés plus de 2 avions de type ''ICBM' ? Correction de l'exercice n° 18

106 Cédric du Mouza – NFA011106 CONCLUSION (1)From (2)Where (3)Group by (4)Having (5)Select (6)Order by  SQL est un langage d'interrogation très lisible, par tous les utilisateurs  SQL est un langage dans lequel il est relativement facile d'écrire, pour un programmeur, à condition de bien visualiser l'ordre d' application des instructions:

107 Cédric du Mouza – NFA011107 BIBLIOGRAPHIE : "L'art des bases de données", tome 3: "Comprendre et évaluer SQL" Serge Miranda. Editions Eyrolles.

108 Cédric du Mouza – NFA011108 Exercices supplémentaires S1Quels sont les noms des pilotes (avec leur matricule) âgés de moins de 30 ans avec un salaire supérieur à celui d’un pilote quelconque ayant plus que 40 ans? S2Quels sont les noms des pilotes (avec leur matricule) ayant moins de 30 ans avec un salaire supérieur à ceux de tous les pilotes ayant plus de 40 ans? S3Proposer une requête capable de donner les tuples qui sont en doublons par rapport aux deux colonnes de la table Pilote : Nom et Ville S4Proposer une requête capable de supprimer les tuples qui sont en doublons par rapport aux deux colonnes Nom, Ville de la table Pilote en laissant un seul tuple par ensemble de doublons

109 Cédric du Mouza – NFA011109 Correction exercice S1 SELECT Matricule FROM Pilote WHERE Age < 30 AND Salaire >= ANY (SELECT Salaire FROM Pilote WHERE Age > 40) S1Quels sont les noms des pilotes (avec leur matricule) ayant moins de 30 ans avec un salaire supérieur à celui d’un pilote quelconque ayant plus de 40 ans?

110 Cédric du Mouza – NFA011110 Correction exercice S2 SELECT Matricule FROM Pilote WHERE Age < 30 AND Salaire >= ALL (SELECT Salaire FROM Pilote WHERE Age > 40) S2Quels sont les matricules des pilotes ayant moins de 30 ans avec un salaire supérieur à celui de tous les pilotes ayant plus de 40 ans?

111 Cédric du Mouza – NFA011111 Correction exercice S3 SELECT Nom, Ville FROM Pilote GROUP BY Nom, Ville HAVING COUNT(*) > 1 S3Proposer une requête capable de donner les tuples qui sont en doublons par rapport aux deux colonnes de la table Pilote : Nom et Ville

112 Cédric du Mouza – NFA011112 Correction exercice S4 DELETE Pilote P1 WHERE EXISTS (SELECT * FROM Pilote P2 WHERE P1.Ville = P2.Ville AND P1.Nom = P2.Nom AND P1.Matricule > P2.Matricule) S4Proposer une requête capable de supprimer les tuples qui sont en doublons par rapport aux deux colonnes Nom, Ville de la table Pilote tout en laissant un seul tuple par ensemble de doublons

113 Cédric du Mouza – NFA011113 SQL comme Langage de Définition des Données

114 Cédric du Mouza – NFA011114 Types SQL  2 types d’attributs numériques: Numériques exacts (INTEGER, DECIMAL, …) Numériques flottants (FLOAT, DOUBLE, …)  INTEGER stocke des entiers sur 4 octets (en général) avec 2 variantes suivant la taille (SMALLINT et BIGINT)  DECIMAL(M,D) (ou NUMERIC) est un numérique de taille max. M, avec un nombre de décimales fixé à D  Numériques exacts servent aux valeurs dont la précision est connue

115 Cédric du Mouza – NFA011115 Types SQL  Types flottants: Utilisation semblable à celle des langages de programmation S’appuie sur la représentation des num. flottants propre à la machine  FLOAT correspond aux flottants en simple précision  DOUBLE PRECISION (ou DOUBLE ou REAL) est un flottant en double précision

116 Cédric du Mouza – NFA011116 Types SQL TypeDescriptionTaille INTEGEREntier relatif4 octets SMALLINTIdem2 octets BIGINTIdem8 octets FLOATFlottant simple précision4 octets DOUBLE PRECISION DOUBLE/REAL Flottant double précision8 octets NUMERIC(M,D)Numérique avec D décimalesM octets DECIMALNumérique avec D décimalesM octets

117 Cédric du Mouza – NFA011117 Types SQL  Chaînes de caractères: CHAR(M) chaîne d’exactement M caractères (complète avec des blancs si besoin) VARCHAR(M) chaîne de taille variable, au plus M Pour des chaînes très longues, type BIT VARYING (ou BLOB, ou LONG)  Dates DATE stocke le jour, mois, année (sur 4 chiffres) TIME stocke heure, minute et seconde (HH:MM:SS) DATETIME combine les 2 (AAAA-MM-JJ HH:MM:SS)

118 Cédric du Mouza – NFA011118 Types SQL TypeDescriptionTaille CHAR(M)Chaîne de longueur fixeM octets VARCHAR(M)Chaîne de longueur variablem+1, m≤M BIT VARYING(ou BLOB)Chaîne d’octetsLongueur de la chaîne DATEDate (jour, mois, année)4 octets TIMEHeure (heure, minute, seconde) 4 octets DATETIMEDate et heure8 octets YEARAnnée2 octets

119 Cédric du Mouza – NFA011119 Types SQL  Exercice 1: Proposer les types associés aux attributs de la table PILOTE. Quel serait alors la taille d’un enregistrement?  Exercice 2: Idem avec la table VOL

120 Cédric du Mouza – NFA011120 Création de tables  On doit préciser le schéma de la relation en entier: nom de la relation, nom et type de chaque attribut. On peut ajouter des contraintes.  Exemple: CREATE TABLE AVION(Numav INTEGER, Capacité SMALLINT, Type VARCHAR(6), Entrepôt VARCHAR(25));

121 Cédric du Mouza – NFA011121 Contraintes  Un attribut peut être forcé à être renseigné avec NOT NULL  Clé primaire: il est important de donner une clé primaire lors de la création d’une table, afin de pouvoir désigner de manière unique un nuplet dans d’autres tables  Se déclare après la déclaration des attributs à l’aide de PRIMARY KEY  Tous les attributs d’une clé doivent être déclarés comme NOT NULL

122 Cédric du Mouza – NFA011122 Contraintes  On peut spécifier que la valeur d’un attribut est unique pour toute la colonne avec UNIQUE  Attention, la contrainte UNIQUE autorise que la valeur ne soit pas renseignée (NULL)  On peut préciser les clés étrangères à l’aide de FOREIGN KEY, et préciser la table (clé primaire) référencée par REFERENCES  On peut exprimer une condition sur un attribut à l’aide de CHECK  On peut aussi donner des valeurs par défaut avec DEFAULT

123 Cédric du Mouza – NFA011123 Contraintes - exemples CREATE TABLE AVION(Numav INTEGER NOT NULL, Capacité SMALLINT, Type VARCHAR(6), Entrepôt VARCHAR(25), PRIMARY KEY(Numav), CHECK capacité < 500, CHECK Type IN (‘A380’,’B200’,’A330’)); CREATE TABLE DEPART(Numvol INTEGER NOT NULL, Date_dep DATE, Numav INTEGER, Matricule SMALLINT DEFAULT 1, FOREIGN KEY(Numav) REFERENCES AVION, …

124 Cédric du Mouza – NFA011124 Contraintes - exercices  Essayer de créer la table vol avec ses contraintes  Compléter la création de la table DEPART

125 Cédric du Mouza – NFA011125 Contraintes On peut lors de la création spécifier des règles liées aux clés étrangères:  Événements surveillés: suppression et mise-à-jour  Si le nuplet avec clé primaire supprimé/modifié on peut supprimer/modifier les nuplets avec clés étrangères correspondants: ON DELETE CASCADE/ON UPDATE CASCADE  Lors d’une suppression d’un nuplet avec une clé primaire on peut choisir de mettre la clé étrangère à NULL dans les nuplets correspondants: ON DELETE SET NULL

126 Cédric du Mouza – NFA011126 Insertions On réalise une insertion à l’aide de la commande INSERT INTO… VALUES INSERT INTO AVION VALUES (14,300,’A380’,’Nantes’) INSERT INTO AVION(Numav,Type) VALUES (18,’A250’) Mais attention, lors d’une insertion les contraintes (unicité, clé primaire référencée existante, les CHECK, non-nullité, etc) doivent être vérifiées pour que l’insertion ait lieu

127 Cédric du Mouza – NFA011127 Modification du schéma  Ajouter d’une colonne DateAchat à AVION ALTER TABLE AVION ADD DateAchat DATE; Lors de l’ajout d’une nouvelle colonne, ses valeurs sont mises à NULL ou si elle existe, à une valeur par défaut  Modifier la colonne Entrepôt (chaîne plus longue et non nulle) ALTER TABLE AVION MODIFY Entrepôt VARCHAR(50) NOT NULL Attention lors d’une modification on peut avoir des résultats impossibles et/ou imprévisibles (varchar devenant integer, etc)

128 Cédric du Mouza – NFA011128 Modification du schéma  Modifier la colonne en ajoutant une valeur par défaut ALTER TABLE AVION ALTER Type SET DEFAULT ‘A380’  Ajouter une contrainte CHECK ALTER TABLE AVION ADD CONSTRAINT verifieCapacité CHECK(Capacité < 600)  Supprimer une contrainte (nommée) ALTER TABLE AVION DROP CONSTRAINT verifieCapacité

129 Cédric du Mouza – NFA011129 Modification du schéma  Changer le nom d’une colonne ALTER TABLE AVION RENAME COLUMN Type TO Modèle  Supprimer une colonne ALTER TABLE AVION DROP COLUMN DateAchat  Créer un index CREATE INDEX monIndex ON AVION(Capacité)

130 Cédric du Mouza – NFA011130 Créer une table à partir de tables existantes SELECT Numav, Type INTO LISTE_AVION FROM AVION WHERE Entrepôt = ‘Maubeuge’ SELECT Numvol, Date_dep, Ville_arrivée INTO LISTE_VOL_DE_PARIS FROM VOL, DEPART WHERE VOL.Numvol = DEPART.Numvol AND Ville_départ = ‘Paris’

131 Cédric du Mouza – NFA011131 Exercices  Créer une table avec les numéros de ville de départ, ville d’arrivée, nom et âge des pilotes gagnant plus de 4000 euros.  Ajouter les contraintes suivantes: une clé primaire sur le nom, un test pour interdire les pilotes ayant plus de 55 ans  Renommer la colonne ‘nom’ en ‘nom de famille’  Ajouter une colonne ‘ancienneté’ et créer un index sur celle-ci  Supprimer l’index sur ‘ancienneté’  Supprimer la colonne ‘ancienneté’  Supprimer la contrainte sur l’âge  Supprimer la colonne ‘ancienneté’


Télécharger ppt "Cédric du Mouza – NFA0111 Approfondissement Bases de Données NFA011 Cédric du Mouza (d’après des supports d’Elisabeth Métais)"

Présentations similaires


Annonces Google