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

Slides:



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

Manipulation des données dans SQL
Benoît Piranda Équipe SISAR Université de Marne La Vallée Bases de données Algèbre relationnelle, opérations Requêtes SQL.
Rappels. Les Systèmes de Gestion de Bases de Données (SGBD) L'algèbre relationnelle.
Programme Introduction aux BD et aux SGBD Le modèle relationnel
Les fonctions.
Année universitaire Système dinformation Le SQL (Structured Query Language) langage dinterrogation dune base de données.
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,
LMD: Langage de Manipulation de Données
Contrôles d'accès aux données
Rappel sur les bases de données et le vocabulaire
BASE DE DONNEES RELATIONNELLES
LE LANGAGE SQL Langage de manipulation de données (LMD)
Initiation aux bases de données et à la programmation événementielle
LANGAGES LIES AU MODELE RELATIONNEL
Chap 4 Les bases de données et le modèle relationnel
Bases de données et SGBD relationnels
SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]
L’utilisation des bases de données
SQL Partie 3 : (LID : Langage d'interrogation de données)
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
Algèbre Relationnelle
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
Bases de Données Avancées - TP2: SQL
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
Michel Tollenaere SQL et relationnel ENSGI Cours MSI 2A Relationnel et SQL version 1.4 du 25 septembre 2007 (ajout jointures) 1 Modèle relationnel Historique.
Limiter et trier des données
Introduction Le SQL (Structured  Query Language) est un langage universel de gestion des bases de données. Il a une triple fonction : LDD Langage de Définition.
Cours 4b: Introduction au SQL, le langage des SGBD Relationnels
Chap 4.5 : SQL (LDD) LDD : Langage de définition de données Réfs : Manuel p105.
Partie2: Introduction à SQL LANGAGE DE REQUETES RELATIONNEL CHAPITRE 4: INTERROGATION DES BASES DE DONNÉES.
Traduction des opérations sous MySQL
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
1 PHP 5 Notions fondamentales (cours #5) Formation continue – Cégep de Sainte-Foy.
PostgreSQL – Présentation
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)
Cours SQL.
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
Création et Gestion de Tables
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.
Les bases de données Séance 8 Jointures.
Bases de données avancées
Le langage SQL.
Séance /10/2004 SGBD - Approches & Principes.
Introduction aux Bases de Données et au langage SQL
Initiation aux bases de données et à la programmation événementielle Cours N°2 : langage d’interrogation de données. (Les requêtes statistiques et autres).
Initiation aux bases de données et à la programmation événementielle
NIVEAU LOGIQUE Vues. Fenêtre dynamique sur la base Ses données proviennent d'autres tables ou d'autres vues.
INTRODUCTION AUX BASES DE DONNEES SQL -2
INTRODUCTION AUX BASES DE DONNEES Base et métabase
Cours n°2 Implémentation et exploitation
Introduction Module 1.
Le Langage d ’ Interrogation des donn é es (LID) Module 2.
Bases de données – Cours 3
Le Langage de Manipulation de Données LMD Module 6.
CONCEPTS BD - Synthèse journée 1 :
Modélisation et utilisation Aurélien Marion1 Aurélien Marion
Les bases de données Séance 4 Construction du Modèle Physique (la BDD)
Bases de données : modèlisation et SGBD Séance 3.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
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.
Langages d’interrogation et de manipulation. N. ChaignaudGM4 - Base de données2 1. Algèbre relationnelle  Ensemble d’opérations permettant de manipuler.
1 Les bases de données Séance 6 L ’extraction de données Le SELECT.
SQL query - 1 / D. Berrabah SQL : interrogation de BD Requêtes d'interrogation simples Requêtes complexes Agrégats et groupement.
Langage de manipulation de données (LMD)
Transcription de la présentation:

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

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)

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)

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 LavandeTouquet Age Salaire

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

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:

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 = ' '}

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 LavandeTouquet Age Salaire

Cédric du Mouza – NFA0119 Compagnie Aerienne (2) RESERVATION Numab Numvol Date_dep 1AL AL VOL Numvol Heure_départ Heure_arrivée Ville _départ Ville_arrivée AL ParisLilles AF VauxRio DEPART Numvol Date_dep Numav Matricule AL AL

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

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

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

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)

Cédric du Mouza – NFA01114 La restriction Critère de restriction: Entrepôt = 'Cannes' AVION NUMAVCAPAC.TYPEENTREP B707 A500 C2000 B707 Cannes Rio Nice

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)

Cédric du Mouza – NFA01116 La projection AVION NUMAVCAPAC.TYPEENTREP B707 A500 C2000 B707 Cannes Rio Nice Attributs de projection: capacité, type

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 B707 A500 C2000 B707 Cannes Rio Nice

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

Cédric du Mouza – NFA01119 Sur l'exemple: AVION_1NUMAVCAPAC.TYPEENTREP B707 A500 Cannes AVION_2 NUMAV CAPAC.TYPEENTREP C2000 A500 B707 Nice Cannes Nice

Cédric du Mouza – NFA01120 Sur l'exemple: UNION AVION_1  AVION_2 NUMAV CAPAC. TYPE ENTREP B707 A500 C2000 B707 Cannes Nice

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

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

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 AI DEC DEC-95 2 AL DEC-95

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 AI DEC DEC-95 2 AL DEC AI 100 AI200 AL DEC DEC DEC Amandier Lavande

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 AI DEC DEC-95 2 AL DEC AI 100 AI200 AL DEC DEC DEC Amandier Lavande

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 DEC AI200 AL DEC DEC Lavande numab

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 MATRICULENUMAV S NUMAV Q MATRICULE 2

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

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 ?

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

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

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

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 = ' '

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

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

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'

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

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?

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

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

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

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'

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

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

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

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

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

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

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

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

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

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

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

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 F ? Exercices

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 F ? SELECT DISTINCT VILLE FROM PILOTE WHERE AGE < 20 AND SALAIRE > AND VILLE LIKE 'L%' Correction de l'exercice n° 4

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

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

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

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

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

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

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

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

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.

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

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

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)

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

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 ?

Cédric du Mouza – NFA01170 SELECT COUNT (DISTINCT NUMAV) FROM DEPART WHERE DATE_DEP = ' ' 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

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

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

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

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

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

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

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 = ' ') Correction de l'exercice n° 10

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

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

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 = ' ') SELECT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE WHERE MATRICULE IN ( SELECT DEPART.MATRICULE FROM DEPART WHERE DATE_DEP =' ') Avec EXISTS Avec IN Expression d'une jointure à l'aide de requêtes imbriquées

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

Cédric du Mouza – NFA01182 SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE, DEPART, AVION WHERE PILOTE.MATRICULE = DEPART.MATRICULE AND DEPART.DATE_DEP = ' ' 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

Cédric du Mouza – NFA01183 SELECT PILOTE.MATRICULE, PILOTE.NOM FROM PILOTE WHERE MATRICULE IN ( SELECT DEPART.MATRICULE FROM DEPART WHERE DATE_DEP =' ' 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)

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

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

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

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

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)

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

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'

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

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

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

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

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

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

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

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

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

Cédric du Mouza – NFA 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;

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

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA  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

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

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA 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:

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

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA 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?

Cédric du Mouza – NFA 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?

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA 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

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

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA 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)

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA 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));

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA 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, …

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

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA 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

Cédric du Mouza – NFA 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)

Cédric du Mouza – NFA 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é

Cédric du Mouza – NFA 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é)

Cédric du Mouza – NFA 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’

Cédric du Mouza – NFA 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é’