0% ont trouvé ce document utile (0 vote)
265 vues88 pages

Cours SQL

Transféré par

Othmane Bouzoubaa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
265 vues88 pages

Cours SQL

Transféré par

Othmane Bouzoubaa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Base de données avancées

Organisa(on
• Cours:
• Base de données : rappels et mise à niveau
• Langage SQL
• Langage PL/SQL
• Administra<on Oracle
• Travaux Pra<ques
• Evalua<on
Introduc0on
Applications des bases de données

1. Applica)ons “classiques“ :
• RH: Salaire , Personnel, ….
• Commercial : Stock , vente , clients, Fournisseurs, réserva:ons, ….
• Documentaire : Bibliothèques, Film,
2. Applica)ons “modernes“ :
• Documents électroniques : journaux
• Web : commerce électronique, serveurs Web, blogs
• Génie logiciel : ges:on de programmes, manuels, . . .
• Documenta:on technique : plans, dessins, . . .
• Bases de données spa:ales : cartes rou:ères, systèmes de guidage GPS
• Bases de données mul:média : archives audiovisuelles, imagerie médicale, . . .
Comment stocker les données ?

• Qu’est ce qu’une base de données :


Une grande quan+té de données
structurées avec un objec+f commun
et mémorisées sur un support permanent ( ex: un ordinateur )
• Qu’est ce qu’un SGBD:
Un système de ges+on de bases de données (SGBD) est
un logiciel de haut niveau d’abstrac+on
permet de
- manipuler ces informa+ons
- gérer le stockage
- gérer la concurrence
• Quand on parle de données, on entend peut-être des millions d’éléments simultanément
accessibles à des milliers d’u8lisateurs
Niveau d’architecture d’un SGBD : ANSI-SPARC
Architecture d’un SGBD : Niveau externe

Vues u&lisateurs
Exemple : Base de données pour ges3on d’une école
1. Vue de la planifica/on des emploi du temps
• Nom des enseignants
• Horaires
• salles
2. Vue des RH : pour chaque enseignant
• Nom, prénom, diplôme , adresse, Nombre d’heures
3. Vue du service de scolarité : pour chaque étudiant
• Numéro Etudiant, Nom, prénom, adresse, niveau, résultats,…
Architecture d’un SGBD : Niveau Logique

• Défini<on de la structure des données :


Langage de Descrip:on/Descrip:on de Données (LDD)
• Consulta<on et mise à jour des données :
Langage de Manipula:on de Données (LMD) et
Langages de Requêtes (LR)
Principe d’ indépendance des données:
Sépara>on logique / physique :

• Défini&on de modèle logique de données : Séparer physique et


logique pour perme:re à l’u&lisateur de se concentrer uniquement
sur une représenta&on logique des données sans se soucier de la
représenta&on physique des données.
• Plusieurs aspects de l’implémenta&on physique peuvent être
changés sans avoir à modifier la vision abstraite de la base de
données.
En résumé : ObjecFfs d’un SGBD

On veut un serveur de base de données qui permet de gérer un grand volume de données
avec :
• Indépendance physique : Défini&on des données doit être indépendante des structures de stockage u&lisées
• Accès aux données : Par l’intermédiaire d’un Langage de Manipula&on de Données (LMD)
• Administra:on centralisée : Réservoir unique commun à toutes les applica&ons.
• Non redondance : Chaque donnée ne doit être présente qu’une seule fois dans la base.
• Cohérence : Soumises à un certain nombre de contraintes d’intégrité qui définissent un état cohérent de la base
• Partage des données : PermeGre à plusieurs u&lisateurs d’accéder aux mêmes données au même moment de
manière transparente.
• Sécurité des données : Doivent pouvoir être protégées contre les accès non autorisés
• Résistance aux pannes : Pouvoir récupérer une base dans un état « sain » après une panne.
La gesFon du SGBD : Les acteurs

• Le concepteur
• évalue les besoins de l’applica3on
• conçoit le schéma logique de la base
• L’administrateur du SGBD
• installe le système et créé la base
• conçoit le schéma physique
• fait des réglages fins (tuning)
• gère avec le concepteur l’évolu3on de la base (nouveaux besoins,
u3lisateurs)
• L’éditeur du SGBD
• fournit le système et les ou3ls
Modélisa)on et Concep)on:
Le modèle rela)onnel
ObjecFfs de la ModélisaFon

• Meilleure compréhension du système


• Abstrac<on du problème
• Se concentrer sur l’essen<el (pas de détails)
• Visualisa<on du système simple
• Concep<on progressive
• Raffinement du modèle successif
• Découpage en vues
>> Généra)on des structures de données
Les risques d’une mauvaise concepFon:
Niveau
Niveau Applica2f Niveau Système U2lisateur/Concepteur
• Applica'on volumineuse • Perte d’informa'ons • Sécurité de l’informa'on
• Informa'ons de l’applica'on • Modèle non normalisé • Vues u'lisateurs non
incomplètes définies
• Performances
• Applica'on non-évolu've • Volume de données non • Interroga'on complexe
prise en compte • Pas d’abstrac'on de la BD
• Fréquence des requêtes • Peu d’évolu'vité de la BD
imprévues
• Pas de schéma
• Stockage de l’informa'on • Historique d ’évolu'on
inadapté
inexistant
• Coût de réorganisa'on élevé
• Mauvais choix de stockage
Méthode de concepFon d’une BDD:
Méthode de concepFon d’une BDD
• Défini par le client • Cahier de charge :Spécifica&on
• Peu/pas de connaissance des définie par un échange entre le
nécessités opéra&onnelles concepteur et le client
• Modèle En&té/Associa&on • Informa&on atomiques
• En&té • Es&ma&on quan&ta&ve des
• AGribut données
• Domaines et valeurs des aGributs
• Clé/iden&fiant
• Associa&on • Dépendance fonc&onnelle
• cardinalité • contraintes
• Intui&f: simple à définir
• Schéma conceptuel non formel
/comprendre
• Traduc&on:
• Très u&lisé
- en&té -> rela&on avec clé primaire
- associa&ons:
• Choix de stockage dépend d SGBD x-n/x-m : Rela&on, avec pour clé
• Typage des données primaire l’ensemble des deux clés
• Encodage des caractères étrangères + AGributs associa&on
• Spécifica&on des index et x-1/x-n :Clé étrangère (coté n) est
contraintes importée dans la rela&on (coté 1) +
• Créa&on de BDD AGribut associa&on (Vol)
Exercice 1
• La compagnie d’avia/on est définie par :
• Avions, avec un matricule, un modèle, une capacité ;
• Aéroports, avec un nom, un pays, un code d’aéroport, formant le point de départ et le point d’arrivée d’un vol ;
• Vols, reliant deux aéroports des&na&ons, avec date de départ, une distance et une durée, ainsi qu’un avion associé ;
• Personnels, avec nom, prénom, date de naissance, mé&er et matricule permeGant de composer un équipage d’un vol
comportant un pilote, un co-pilote, un officier mécanicien, deux chefs de cabine, et au moins une hotesse ou stewart ;
• Clients avec nom, prénom, date de naissance, iden&fiant, compte de fidélité ;
• Passagers qui lie un client à un vol, avec un ou plusieurs numéro de bagage, cout du billet ;
• Défini/on des vues :
• Aiguilleur du ciel (consulta&on/ajout/modifica&on Vols)
• Admin compagnie (consulta&on vols, édi&on d’équipage)
• Personnel (consulta&on planning de vol)
• Client (consulta&on vols, achat billet)
QUESTIONS:
1. Créer un schéma en/té/associa/on qui correspond aux spécifica/ons définies
2. Définir le schéma logique correspondant
3. Créer le schéma physique
Modèle conceptuel
Modèle Logique

• Avion(IdAvion, Modèle, Capacité)


• Aéroport(IATA , Nom, Pays)
• Personnel(Matricule, Nom, Prenom, DateNaiss, Me=er)
• Vol(IDVol, #Départ , #Arrivée, DateDépart, Distance, Duree, #Avion, #Pilote, #Co-Pilote,
#Mecanicien, #ChefCabine1, #ChefCabine2)
• Hotesse (#IDVol, #Hotesse)
• Client(IDClient, Nom, Prenom, DateNaiss, CompteFidelité)
• Passager(IDVol#, IDClient#, Prix, NbBagage)
Contraintes sur les données

Besoin d’exprimer des contraintes sur les données :


• Types d’informa<ons (en<ers, texte, date)
• Valeurs (nulles, bornes, unicité)
Contraintes sur les données
Type de données

• Valeurs NULL :
• Valeur non définie
• NULL ≠ 0
• Economie de place de stockage
• Peut être u:le pour une clé étrangère non spécifiée (ex : ChefCabine2 = NULL)
• Valeurs UNIQUE :
• Unicité́ de chaque valeur de l’a`ribut Primary Key = UNIQUE + index
• Contrainte séman<que avec CHECK sur un n-uplet :
• 1 A`ribut : CHECK(Matricule>1000 AND Matricule<9000)
• 2 A`ributs : CHECK(Pilote != CoPilote)
Modèle Logique

• Avion(IdAvion INT, Modèle VARCHAR, Capacité INT)


• Aéroport(IATA CHAR(3), Nom VARCHAR, Pays VARCHAR)
• Personnel(Matricule INT, Nom VARCHAR, Prenom VARCHAR, DateNaiss DATE, Me=er VARCHAR)
• Vol(IDVol INT, #Départ CHAR(3), #Arrivée CHAR(3),
DateDépart DATETIME, Distance INT, Duree TIME,
Avion# INT, #Pilote INT, #Co-Pilote INT,
#Mecanicien INT, #ChefCabine1 INT, #ChefCabine2 INT)
• Hotesse( #IDVol INT, #Hotesse INT)
• Client(IDClient INT, Nom VARCHAR, Prenom VARCHAR, DateNaiss DATE, CompteFidelité INT)
• Passager(#IDVol INT, #IDClient INT, Prix FLOAT, NbBagage INT)
Modèle Physique

CREATE TABLE ‘Passager‘ (


‘IDVol’ BIGINT NOT NULL,
‘IDClient‘ BIGINT NOT NULL,
‘Prix‘ FLOAT NOT NULL,
‘NbBagages‘ TINYINT NOT NULL DEFAULT 1,
PRIMARY KEY ‘pk_Passager‘ (‘IDVol‘, ‘IDClient‘),
CONSTRAINT ‘K_PassagerVol‘ FOREIGN KEY (‘IDVol‘) REFERENCES ‘Vol‘ (‘IDVol‘)
ON DELETE CASCADE,
CONSTRAINT ‘K_PassagerClient‘ FOREIGN KEY (‘IDClient‘) REFERENCES ‘Client‘
(‘IDClient‘)
)
Théorie de la NormalisaFon

• Objec<f : Bien concevoir son schéma rela<onnel


• Éviter les redondances d’informa:on
• Supprimer les anomalies de mises à jour
• Concept :
• Dépendances fonc:onnelles
• Formes normales
• Méthode : Décomposer les rela<ons en sous-ensembles normalisés
(Représenta<on à l’aide des a[ributs)
Exemple

• Non normalisée :
Vol (IDVol, Hotesse, Depart, Arrivee, DateHeure, Distance,
Duree, Avion, Pilote, Co-Pilote, Mecanicien,
ChefCabine1, ChefCabine2)
• Normalisée :
Vol(IDVol, Depart, Arrivee, DateHeure, Distance, Duree,
Avion, Pilote, Co-Pilote, Mecanicien,
ChefCabine1, ChefCabine2)
Hotesse(IDVol, Hotesse)
Dépendances FoncFonnelles (DF)
DécomposiFon sans perte d’une relaFon
Formes Normales

• Définir des règles de décomposi2on de rela2ons


• Préserve les Dépendances Fonc<onnelles
• Objets et associa<ons atomiques
⇾ 3 niveaux de formes normales
1° Formes Normale : 1FN



2° Formes Normale : 2FN
• Une rela<on est en 2FN ssi :
• Elle est en 1FN
• Tout a[ribut non clé est en DF totale avec la clé primaire

• Exemple :
Vol(IDVol, Depart, Arrivee, DateHeure, Distance, Duree,
Avion, Pilote, Co-Pilote, Mecanicien,
ChefCabine1, ChefCabine2)

↳ Vol(IDVol, Depart, Arrivee, DateHeure, Distance, Duree,


Avion, Pilote, Co-Pilote, Mecanicien,
ChefCabine1, ChefCabine2)
3° Formes Normale : 3FN
• Une rela<on est en 3FN ssi :
• Elle est en 2FN
• Tout a[ribut non clé ne dépend pas d’un a[ribut non clé
• Exemple :
Vol(IDVol, Depart, Arrivee, DateHeure, Distance, Duree, Avion,
Pilote, Co-Pilote, Mecanicien, ChefCabine1, ChefCabine2)
↳ Vol(IDVol, Avion, Pilote, Co-Pilote, Mecanicien,
ChefCabine1,ChefCabine2)
VolTrajet(IDVol, Depart, Arrivee, DateHeure)
Trajet(Depart, Arrivee, Distance)
TrajetDurée(Avion, Distance, Durée)
SQL: Structured Query Langage
Catégorie de Commandes SQL

Les commandes SQL sont regroupées en catégories en fonc3on de leur u3lité et


des en3tés manipulées :
• LDD : la défini3on des éléments d’une base de données (tables, colonnes,
clefs, index, contraintes,...)
• CREATE, ALTER, DROP, RENAME
• LMD: la manipula3on des données (inser3on, suppression, modifica3on,
extrac3on, ...),
• INSERT, UPDATE, DELETE, SELECT, EXPLAIN, PLAN,LOCK TABLE
• LID : interroger la base de données
• SELECT
• LCD : Langage de contrôle de données
• GRANT, COMMIT, REVOKE
SQL
Il existe de nombreux systèmes de ges:on de bases de données, en voici une liste non
exhaus:ve :
• MySQL
• Oracle
• Microso> SQL
• Access
• SQL
Le Langage SQL
• C’est un langage rela:onnel, il manipule donc des tables (i.e. des rela:ons) par
l’intermédiaire de requêtes qui produisent également des tables.
• Il possède de nombreuses extensions pour faciliter l’usage et augmenter le pouvoir
d’expression.
Commandes SQL

Quelques commandes SQL importantes :


• Create database nom_base : Créer une base de données de nom nom_base.
• Use nom_base : U:liser la base de données nom_base.
• Show tables : Afficher les tables de la base de données u:lisée.
• Describe nom_table : Afficher les détails des colonnes de la table nom_table.
LDD : CREATE TABLE- Créa-on de tables (Rela-on physique)

CREATE TABLE “Avion“(


IDAvion INT NOT NULL PRIMARY KEY,
Modele VARCHAR(20) NOT NULL,
Capacite SMALLINT UNSIGNED NOT NULL DEFAULT 350) ;

• Un a`ribut ⇾ un type de données


• Primary Key : Clé primaire (un a`ribut)
• DEFAULT : Valeur par défaut
• NOT NULL : n’accepte pas une valeur non définie
LDD : Créa-on de tables – Clés étrangères

CREATE TABLE ‘Passager‘ (


‘IDVol‘ BIGINT, ‘Client‘ BIGINT NOT NULL, ‘Prix‘ FLOAT NOT NULL, ‘NbBagages‘ TINYINT NOT NULL DEFAULT 1,
PRIMARY KEY ‘pk_Passager‘ (‘IDVol‘, ‘IDClient‘),
CONSTRAINT ‘J_PassagerVol‘ FOREIGN KEY (‘IDVol‘) REFERENCES ‘Vol‘ ON DELETE SET NULL,
CONSTRAINT ‘J_PassagerClient‘ FOREIGN KEY (‘Client‘) REFERENCES ‘Client‘(IDClient) ON DELETE CASCADE) ;

• Clé primaire nommée ⇾ deux a0ributs


• Foreign Key : Clé étrangères
• Référence une table(même nom d’aEribut que la clé primaire)
• Référence table et aEribut(Clé primaire de nom différent)
• ON DELETE/ON UPDATE : Sur suppression/modifica/on de la clé primaire référencée
• CASCADE ⇾ suppression
• SET NULL ⇾ La valeur devient NULL (doit le perme:re)
• RESTRICT ⇾ Interdic?on de supprimer (Par défaut)
• SET DEFAULT ⇾ Met la valeur par défaut du CREATE TABLE
LDD : DROP TABLE– Destruc-on de tables

• DROP TABLE Passager;


• DROP TABLE Vol;
• DROP TABLE Avion;

La table Passager doit être détruite avant Vol car elle con:ent des clés étrangères
vers celle-ci, et Vol avant Avion ;
LMD: INSERT INTO : Inser-on de n-uplets

INSERT INTO Avion (‘IDAvion‘, ‘Modele‘, ‘Capacite‘)


VALUES (1, ’A320’, 150),(2, ’A380’, 853) ;

• Nom de la table ;
• A`ributs à spécifier ;
• Liste de n-uplets
• Chaque tuple séparé par une virgule
• Un tuple doit respecter le schéma spécifié
• A`ributs non indiqués restent à NULL
• Tout a`ribut NOT NULL doit avoir une valeur
• Possibilité de me`re une requête SELECT à la place de la clause VALUES
LMD: UPDATE INTO : Modifica-on des tuples

UPDATE Avion
Set Modele= ‘A320B‘, Capacite= Capacite+10)
WHERE IDAvion=3;

• Table ciblée
• A`ributs à Modifier, soit :
• Nouvelle valeur
• Calcul/fonc:on
• WHERE : CondiSon(s) de modificaSon des tuples;
LMD: DELETE FROM : Suppression des tuples

Delete Avion
WHERE IDAvion=3;

• Table ciblée
• Condi\on(s) de suppression des tuples;
LID: Langage d’interrogaFon de données

Expression d’une requête d’extracSon simple


SELECT ⇾ est la commande de base du SQL, u:lisé pour extraire des données.
FROM ⇾ Rela:on/table
WHERE ⇾ restreindre/jointure/
LID: SELECT - sélecFon simple
SELECT * FROM Avion SELECT DISTINCT Capacité FROM
Avion

• *⇾ projeter tous les a`ributs • élimine les doublons : mot-clé DISTINCT


SELECT Modèle FROM Avion

• Lister les a`ributs à projeter


LID: WHERE – Restreindre les résultats

La clause WHERE restreint la requête select aux enregistrements qui


respectent les condi<ons.
Elle permet la :
• Défini<on de l’ensemble des condi<ons
• Combinaison logiques des condi<ons ( AND/OR)
• Vérifica<on tuple par tuple des condi<ons
• Recherche textuelle : LIKE ‘XYZ%‘
• Recherche par intervalle de valeurs : BETWEEN
• Valeurs NULL : IS NULL (≠ ‘=NULL’)
LID: WHERE – Filtrer les résultats

SELECT * FROM Avion


WHERE Capacité< 300 AND Modèle =‘A320‘

SELECT * FROM Avion


WHERE Capacité< 300 OR Modèle =‘A320‘

SELECT Modèle, Capacité, FROM Avion


WHERE Modèle LIKE ‘A%0‘
LID: WHERE – Filtrer les résultats

SELECT IDAvion, Modèle FROM Avion


WHERE Capacité BETWEEN 100 AND 200‘

SELECT Modèle FROM Avion


WHERE Capacité IS NULL

SELECT Modèle FROM Avion


WHERE Capacité IS NOT NULL
LID: WHERE – Restreindre les résultats

Opérateurs Arithmétiques Operateurs de comparaison Operateurs logiques

= BETWEEN …. AND…. AND


> IN (liste) OR
>= LIKE NOT
< IS NULL
<= IS NOT NULL
<>
EXERCICE 2
1. Avion à des'na'on de ‘LCY’
2. Avions dis'ncts par's ou allant à ‘CDG’
3. Nom des aéroports qui n’ont pas de Pays
4. Nom des aéroports qui ont un Pays
5. Liste des avions dont la capacité dépasse 500 passagers
6. Liste dis'ncte des vols dont les aéroports de départ et
d’Arrivée ne con'ennent pas la leZre C
7. Liste dis'ncte des vols dont les aéroports de départ ou
d’Arrivée ne commence pas par la leZre C
8. Liste dis'ncte des vols dont les aéroports de départ et
d’arrivée con'ennent la leZre L
9. Liste des différentes des'na'ons de l’avion 1
LID: Les Jointures
Pour coupler deux tables, il faut d'abord
• préciser ces tables dans FROM
• préciser les règles de jointure Dans WHERE

Tous les départs et arrivées des avions


SELECT Modèle, Départ, Arrivée
FROM Avion, Vol
WHERE Avion= IDAvion

Afficher les avions dont le départ est ‘CDG’


SELECT Modèle, Départ, Arrivée
FROM Avion, Vol
WHERE Avion=IDAvion AND Départ = ’CDG’ ;
LID: Les Jointures
Pour coupler deux tables, il faut d'abord • Les numéros d’avions qui font leur départ depuis la france
• préciser ces tables dans FROM
• préciser les règles de jointure Dans

• Les avions qui font leur départ depuis la France


LID: Les Jointures
Pour coupler deux tables, il faut d'abord • Les numéros d’avions qui font leur départ depuis la France
• préciser ces tables dans FROM SELECT Avion, Départ, Pays
• préciser les règles de jointure Dans FROM Vol, Aéroport
WHERE Départ= IATA AND Pays =‘France’

• Les avions qui font leur départ depuis la France


LID: Les Jointures
Pour coupler deux tables, il faut d'abord • Les numéros d’avions qui font leur départ depuis la France
• préciser ces tables dans FROM SELECT Avion, Départ, Pays
• préciser les règles de jointure Dans FROM Vol, Aéroport
WHERE Départ= IATA AND Pays =‘France’

• Les avions qui font leur départ depuis la France


SELECT Modèle, Départ, Pays
FROM Avion, Vol, Aéroport
WHERE Avion= IDAvion AND Départ=IATA AND pays=‘France’
LID: Les Jointures

• Donner les Iden+fiants des avions par+s de CDG et qui y sont revenus
- Besoin de trouver au moins deux tuples
-> Deux tables Vol dans le FROM
Select IDAvion FROM Vol WHERE Départ = CDG
Select IDAvion FROM Vol WHERE Arrivée = CDG
- Ambiguïté des a0ributs des deux tables Vols

-> Donner un Alias à chaque table et préfixer chaque a0ribut


- Jointure a0ribut ’Avion’ (même avion à l’aller et au retour)
SELECT V1.Avion
FROM Vol V1, Vol V2
WHERE V1.Avion = V2.Avion AND
V1.Départ=’CDG’ AND V2.Arrivée=’CDG’ ;
LID: Types de Jointures

Jointure Standard : Prédicat dans WHERE


SELECT IDCLIENT , Arrivée
FROM Passager, Vol
WHERE Passager.IDVol=Vol.IDVol AND Départ=‘CDG’ ;

Théta-jointure : Prédicat dans FROM


SELECT Modèle, Départ, Arrivée
FROM Passager JOIN Vol ON Passager.IDVol=Vol.IDVol
WHERE Départ=‘CDG’ ;

Jointure Naturelle :jointure avec les attributs en commun


SELECT IDCLIENT , Arrivée
FROM Vol NATURAL JOIN passager //Attribut IDVol en commun
WHERE Départ=‘CDG’
LID: Types de Jointures

Jointure Interne : Jointure Standard


les n-uplets qui ne joignent pas sont supprimés

Jointure externe : Prédicat dans FROM


Les n-uplets qui ne joignent pas ne sont pas supprimés, les n-uplets non joints sont gardés. Les
données des a7ributs manquants sont complétées par des valeurs NULL.
• FULL OUTER JOIN : Complète à gauche et droite
• LEFT OUTER JOIN : Garde à gauche, complète à droite
• RIGHT OUTER JOIN : Garde à droite, complète à gauche
LID: Jointure Externe - exemple
FULL OUTER JOIN : Complète à gauche et droite
LID: Jointure Externe - exemple
LEFT OUTER JOIN : Garde à gauche, complète à droite
LID: Jointure Externe - exemple
RIGHT OUTER JOIN : Garde à droite, complète à gauche
Opérateurs ensemblistes : UNION, INTERSECT etEXCEPT

Les résultats de deux requêtes peuvent être combinés en u'lisant les opérateurs ensemblistes d’union
(UNION), d’intersec'on (INTERSECT) et de déférence (EXCEPT).
La syntaxe est :
Requête_1 { UNION | INTERSECT | EXCEPT } [ALL] Requête_2 [...]

⚠ il faut que requête_1 et requête_2 aient le même schéma : le même nombre de colonnes
respec'vement du même type. Les noms de colonnes (Les noms d’aZributs) sont ceux de la première
requête (requête_1)

⚠Les opérateurs UNION et INTERSECT sont commuta'fs.


Opérateurs ensemblistes : UNION
Union de 2 requêtes :
• UNIONS : Elimine les doublons
• UNIONS ALL : Union sans éliminer les doublons
• Exemple :
( SELECT Modèle, Arrivée AS ArrivéeDépart
FROM Avion JOIN Vol ON Avion=IDAvion WHERE Départ=’CDG’ )
UNION ALL
(SELECT Modèle, Départ AS ArrivéeDépart
FROM Avion JOIN Vol ON Avion=IDAvion WHERE Arrivée=’CDG’) ;
Opérateurs ensemblistes : UNION
Union de 2 requêtes :
• UNIONS : Elimine les doublons
• UNIONS ALL : Union sans éliminer les doublons
• Exemple :
( SELECT Modèle, Arrivée AS ArrivéeDépart
FROM Avion JOIN Vol ON Avion=IDAvion WHERE Départ=’CDG’ )
UNION ALL
(SELECT Modèle, Départ AS ArrivéeDépart
FROM Avion JOIN Vol ON Avion=IDAvion WHERE Arrivée=’CDG’) ;
Opérateurs ensemblistes : UNION
Union de 2 requêtes :
• UNIONS : Elimine les doublons
• UNIONS ALL : Union sans éliminer les doublons
• Exemple :
( SELECT Modèle, Arrivée AS ArrivéeDépart
FROM Avion JOIN Vol ON Avion=IDAvion WHERE Départ=’CDG’ )
UNION ALL
(SELECT Modèle, Départ AS ArrivéeDépart
FROM Avion JOIN Vol ON Avion=IDAvion WHERE Arrivée=’CDG’) ;
Opérateurs ensemblistes : UNION
• UNIONS : Elimine les doublons
• UNIONS ALL : Union sans éliminer les doublons
• Exemple :
( SELECT Modèle, Arrivée AS ArrivéeDépart
FROM Avion JOIN Vol ON Avion=IDAvion WHERE Départ=’CDG’ )
UNION
(SELECT Modèle, Départ AS ArrivéeDépart
FROM Avion JOIN Vol ON Avion=IDAvion WHERE Arrivée=’CDG’) ;
Opérateurs ensemblistes : INTERSECT - intersec3on
• INTERSECT : Elimine les doublons
• INTERSECT ALL : Intersection sans éliminer les doublons
• Exemple :
( SELECT Modèle, Arrivée AS ArrivéeDépart
FROM Avion JOIN Vol ON Avion=IDAvion WHERE Départ=’CDG’ )
INTERSECT
(SELECT Modèle, Départ AS ArrivéeDépart
FROM Avion JOIN Vol ON Avion=IDAvion WHERE Arrivée=’CDG’) ;
Opérateurs ensemblistes : EXCEPT - Différence
• EXCEPT : Elimine les doublons
• EXCEPT ALL : Différence sans éliminer les doublons
• Exemple :
( SELECT Modèle, Arrivée AS ArrivéeDépart
FROM Avion JOIN Vol ON Avion=IDAvion WHERE Départ=’CDG’ )
EXCEPT
(SELECT Modèle, Départ AS ArrivéeDépart
FROM Avion JOIN Vol ON Avion=IDAvion WHERE Arrivée=’CDG’) ;
Exercices-3
1. La capacité des avions qui vont en LCY
2. Modèles d’avion qui sont arrivés dans un aéroport de Paris
3. Modèles d’avion qui vont en Angleterre
4. Liste des différente pays de des&na&ons des avion dont la capacité est
inferieur à 500 passagers
5. Modèles d’avion qui vont en Angleterre, mais qui ne viennent pas de CDG
6. Modèles d’avion qui sont allés (ou arrivée) à la fois en France, en
Angleterre et en Allemagne
7. Iden&fiant des vols dont le départ est en France et l’arrivée sont en
Allemagne
8. Modèles d’avion qui sont allés ou arrivés dans un aéroport de l’Allemagne
9. Modèles d’avion qui sont allés ou arrivés dans un aéroport de France (
sans u&liser la clause UNION)
10.Modèles d’avion qui vont en Angleterre, mais qui ne sont jamais été
(départ ou arrivée) en Allemagne
Requêtes imbriqués - IN

• Il est possible d’imbriquer une requête SQL dans une autre requête
• WHERE (le plus courant) : pour exprimer une jointure
• FROM : Créa:on d’une nouvelle table temporaire
• Agrégat : pour faire un prédicat sur un agrégat
• Avantages :
• Requêtes propres et bien séparées
• Ne ramène pas les données de la requête imbriquée dans le résultat
• Créa:on de mini traitements op:misés (pas toujours)

⚠ Les types des a`ributs doivent être iden:ques


⚠ Ce n’est pas une intersec:on
Requêtes imbriqués - IN
• Tous les enregistrement dont la valeur Exemple : Liste des vols à des=na=on de l’Angleterre
se trouve dans la requête imbriquée SELECT IDVol, Départ, Arrivée FROM Vol
• A`ribut(s) IN (SELECT AZribut FROM WHERE Arrivée IN (
WHERE) SELECT IATA FROM aéroport
WHERE Pays=‘England‘ );

Résultat de la requête imbriquée

Résultat de la requête
Requêtes imbriqués - IN
• Tous les enregistrement dont la valeur Exemple : Liste des pays où l’avion modèle A320 a aWerrit
se trouve dans la requête imbriquée SELECT Pays FROM aéroport
WHERE IATA IN (
SELECT Arrivée
FROM Vol JOIN Avion on IDAvion=Avion
WHERE Modèle=‘A320’ );
Résultat de la requête imbriquée

Résultat de la requête
Requêtes imbriqués - IN – equivalence

SELECT Pays FROM aéroport WHERE IATA


SELECT DISTINCT Pays FROM aéroport , Vol , Avion
IN ( SELECT Arrivée
WHERE IDAvion=Avion AND IATA= Arrivée
FROM Vol JOIN Avion on IDAvion=Avion
AND Modèle='A320’
WHERE Modèle='A320')

SELECT IDVol, Départ, Arrivée FROM Vol


SELECT DISTINCT IDVol, Départ, Arrivée FROM Vol
WHERE Arrivée IN (SELECT IATA FROM aéroport
JOIN aéroport ON Arrivée=IATA WHERE
WHERE Pays='EnglanD') ;
Pays='England' ;
Requêtes imbriqués – NOT IN
• Tous les enregistrement dont la valeur Exemple : Liste des vols de toutes destinations sauf
ne se trouve pas dans la requête l’Angleterre
imbriquée SELECT IDVol, Départ, Arrivée FROM Vol
• A`ribut(s) IN (SELECT AZribut FROM WHERE Arrivée NOT IN (
WHERE) SELECT IATA FROM aéroport
WHERE Pays=‘England‘ );

Résultat de la requête imbriquée

Résultat de la requête
Requêtes imbriqués – NOT IN
• Tous les enregistrement dont la valeur Exemple : Liste des pays où l’avion modèle A320 n’a pas
ne se trouve pas dans la requête aWerrit
imbriquée SELECT Pays FROM aéroport
WHERE IATA NOT IN (
SELECT Arrivée
FROM Vol JOIN Avion on IDAvion=Avion
WHERE Modèle=‘A320’ );
Résultat de la requête imbriquée

Résultat de la requête
Requêtes imbriqués - NOT IN – équivalence

SELECT IDVol, Départ, Arrivée FROM Vol


WHERE Arrivée NOT IN (SELECT IATA FROM aéroport
WHERE Pays='EnglanD') ;

(SELECT DISTINCT IDVol, Départ, Arrivée FROM Vol JOIN aéroport ON


Arrivée=IATA)
EXCEPT
(SELECT DISTINCT IDVol, Départ, Arrivée FROM Vol JOIN aéroport ON
Arrivée=IATA WHERE Pays=’England’) ;
Requêtes imbriqués – ANY/SOME
• NoSon de quanSté sur la jointure Exemple : Les avions dont la capacité est plus grande que
n’importe quelle capacité
• ANY ≡ SOME
SELECT IDAvion, Modèle, Capacité
• Au moins une valeur peut joindre avec FROM Avions
la requête imbriquée
WHERE Capacité > ANY (
• N’importe quel type de comparaison SELECT Capacité
(=,<,>,>=,<=,! =)
FROM Avion);
Résultat de la requête imbriquée

Résultat de la requête
Requêtes imbriqués – ANY/SOME
• NoSon de quanSté sur la jointure Exemple : Les avions dont la capacité est plus pe=te que
n’importe quelle capacité
• ANY ≡ SOME
SELECT IDAvion, Modèle, Capacité
• Au moins une valeur peut joindre avec FROM Avions
la requête imbriquée
WHERE Capacité < ANY (
• N’importe quel type de comparaison SELECT Capacité
(=,<,>,>=,<=,! =)
FROM Avion);
Résultat de la requête imbriquée

Résultat de la requête
Requêtes imbriqués – ALL
• Notion de quantité sur la jointure Exemple : Les avions qui a la plus grande capacité

• La valeur doit joindre toutes les valeurs SELECT IDAvion, Modèle, Capacité
de la requête imbriquée FROM Avions
• N’importe quel type de comparaison WHERE Capacité >= ALL(
(=,<,>,>=,<=,! =) SELECT Capacité
FROM Avion);
Résultat de la requête imbriquée

Résultat de la requête
IntroducIon aux vues : principe et intérêt

• Table virtuelle : N’a pas d’existence propre


• N’existe pas en tant qu’ensemble de données stockées sur le disque
⇾ seule la requête décrivant la vue est stockée dans le dic<onnaire
• Table dont le contenu est défini par le résultat d’un requête
⇾ Ses données seront extraites de la mémoire à par<r des tables source,
à la demande.
• La vue peut être traiter comme une table ordinaire : SELECT, UPDATE,
DELETE, INSERT, GRANT
IntroducIon aux vues : ClassificaIon

• En fonction de la nature de la requête de définition


• Les vues sont classées en:
• Vues simples
• Vues complexes
Les vues : CREATE VIEW

CREATE OR REPLACE VIEW Vol_Des\na\on_France


AS
SELECT DISTINCT v.IDVol, av.Modèle , v.Arrivée ,ae.pays as des\na\on
FROM avion av, vol v, aéroport ae
WHERE v.avion = av.id_avion
AND v.arrivée = ae.iata
AND ae.nom LIKE '%Paris%’;
Les vues
SELECT * FROM VOL_DESTINATION_PARIS

ALTER VIEW avion_destination_france AS


SELECT DISTINCT v.id_vol, av.Modèle , v.arrivée ,ae.pays as destination
FROM avion av, vol v, aéroport ae
WHERE v.avion = av.id_avion AND v.arrivée = ae.iata
AND ae.nom LIKE '%London%’

RENAME TABLE vol_destination_FRANCE to vol_destination_London

DROP VIEW VOL_DESTINATION_PARIS


Exercices - 4
1. Avions qui sont allés en Angleterre au moins une
fois
2. Avions qui ne sont jamais allés en Angleterre
3. Le dernier modèle d’Airbus
4. Avions qui ne sont jamais allés en Angleterre
(départ ou arrivée)
5. Avions qui ne sont allés que depuis l’Angleterre
6. Avions qui partent de France et qui arrivent en
Angleterre
Agrégat - FoncIons SQL

SQL offre un ensemble de fonc8ons permeNant de dériver des valeurs à par8r des valeurs des
colonnes des lignes extraites.
Résultat calculé sur l’ensemble des n-uplets
Fonc8ons du système
• current_date : la date courante ;
• current_8me : l'instant courant ;
• current_8mestamp : date + instant courant.
Fonc8ons agréga8ves
• count(*) donne le nombre de lignes trouvées,
• count(nom-colonne) donne le nombre de valeurs de la colonne,
• avg(nom-colonne) donne la moyenne des valeurs de la colonne,
• sum(nom-colonne) donne la somme des valeurs de la colonne,
• min(nom-colonne) donne le minimum des valeurs de la colonne,
• max(nom-colonne) donne le maximum des valeurs de la colonne.
Agrégat - FoncIons SQL
• Fonc'ons d’agrégat sur l’ensemble : SELECT COUNT(*) AS NB
• COUNT(*) / COUNT(DISTINCT) FROM Vol WHERE Arrivée=’CDG’ ;
• SUM(AG) / AVG(AG) / STD(AG)
• MIN(AG) / MAX(AG)
SELECT COUNT(DISTINCT Arrivée) FROM Vol ;

SELECT SUM(Capacite) AS TOT, AVG(Capacite) AS AVGCAP,


MAX(Capacite) AS MAXCAP, MIN(Capacite) AS
FROM Avion WHERE Modèle like ’A%’ ;

SELECT Modèle FROM Avion WHERE Capacite = (


SELECT MAX(Capacite) FROM Avion) ;
Agrégat - GROUP BY
• Grouper les a`ributs du SELECT par SELECT Départ, Arrivée FROM Vol GROUP BY Départ ;
valeurs des a`ributs du GROUP BY
• Possibilité de combiner avec des
fonc:ons
• Pas de prédicats sur le groupement
dans le WHERE (HAVING) SELECT Départ, COUNT(*) AS NB FROM Vol GROUP BY
Départ ;

SELECT Modèle, COUNT(*) AS NB FROM Avion JOIN Vol


ON IDAvion=Avion GROUP BY Modèle ;
Agrégat - HAVING
• Exprimer une condi:on sur un • SELECT Départ, Arrivée
groupement FROM Vol
GROUP BY Départ
• Toujours après un GROUP BY HAVING COUNT(DISTINCT Arrivée) >= 2 ;
• Évaluer après le groupement
• Peut imbriquer une requête

• SELECT Départ, COUNT(*) AS NB FROM Vol


GROUP BY Départ
(HAVING COUNT*) > (
SELECT AVG(COUNT(*)) FROM Vol
GROUP BY Départ) ;
Agrégat - ORDER BY
• Ordonner le résultat • SELECT Départ, Arrivée
FROM Vol
• ORDER BY : Dernière clause, un ou ORDER BY Arrivée ASC, Départ DESC ;
plusieurs a`ributs
• ASC : Ordre croissant (Défaut)
• DESC : Ordre décroissant
• L’a`ribut doit être dans le SELECT
• SELECT Départ, Arrivée
FROM Vol
ORDER BY Départ, Arrivée DESC;
Exercices - 5
1. Donner le nombre de fois où l’A320 est allé ou revenu de Paris
2. Pour chaque pays, donner le nombre de vols dont il est la
des'na'on
3. Donner la somme et la moyenne des capacités cumulées pour
chaque départ
4. Pour chaque avion, donner le nombre de fois qu’il est allé à une
des'na'on
5. Donner l’avion qui a fait le plus de vols
6. Donner les pays qui reçoivent plus d’avions que la moyenne
7. Classer les pays par ordre décroissant de départs de vols
8. Donner Les avions qui ont aZerrit au moins une fois en CDG

Vous aimerez peut-être aussi