Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parNadine Gilbert Modifié depuis plus de 8 années
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é’
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.