Vous êtes sur la page 1sur 53

BASES DE DONNÉES

CHAPITRE 3 : LANGAGE SQL

Auditoire : 1ère Licence Computer Science, Parcours : GLSI

DR. SAHBI ZAHAF

A.U14/04/2020
: 2019 - 2020
INTRODUCTION (1)
• STRUCTURED QUERY LANGUAGE (SQL)
– SQL est un Langage Standard de Gestion des
BD Relationnelles
– SQL est une Norme qui permet de définir
(LDD), mettre-à-jour (LMD), contrôler
l’accès (LCD) et interroger (LID) les BD
relationnelles
– SQL supporte les Transactions (LCT)
– SQL est utilisé par les principaux SGBD du
marché : Oracle, SQL Server, MySQL,
PostgreSQL, SQLite, Access, DB2, etc.
14/04/2020 Bases de Données 2
INTRODUCTION (2) : EXPLOITATION
• STRUCTURED QUERY LANGUAGE (SQL)
– SQL est utilisé en Mode Interactif ou bien en Mode
Programmé
• Mode Interactif
– Instructions SQL tapées directement  instantanément
traitées
• Mode Programmé
– Appel de SQL dans un Langage de Programmation : Par
exemple Programme C
– SQL est Portable sur les différentes Plates-formes
• Une Commande SQL écrite dans un environnement
WINDOWS sous ACCESS peut être utilisée directement
dans un environnement UNIX sous ORACLE

14/04/2020 Bases de Données 3


INTRODUCTION (3) : NORMES SQL
Norme Nom Courant Explications

ISO/CEI 9075 : 1986 SQL-86 ou SQL-87 Édité par l’ANSI puis adopté par l’ISO en 1987

ISO/CEI 9075 : 1989 SQL-89 ou SQL-1 Révision Mineure

ISO/CEI 9075 : 1992 SQL-92 ou SQL-2 Révision Majeure

Expression rationnelles, requêtes récursives,


ISO/CEI 9075 : 1999 SQL-99 ou SQL-3 déclencheurs, types non scalaires, quelques fonctions
orientées objets
Introduction de fonctions pour la manipulation XML,
ISO/CEI 9075 : 2003 SQL:2003
« window functions »
Ajout de quelques fonctions de fenêtrage, limitation
ISO/CEI 9075 : 2008 SQL:2008 du nombre de lignes (OFFSET/FETCH), curseurs et
mécanismes d’auto-incréments
Ajout des Types de Données Temporels et des
ISO/CEI 9075 : 2011 SQL:2011
Tables Temporelles
14/04/2020 Bases de Données 4
INTRODUCTION (4) : CATÉGORIES
• LDD (Langage de Définition des Données)
– Regroupe les ordres utilisés pour créer, modifier ou supprimer les
structures de la Base (Tables, Index, Vues et Synonymes)
• Il s’agit principalement des ordres : CREATE, ALTER et DROP
• LMD (Langage de Manipulation des Données)
– Regroupe les ordres utilisés pour manipuler les données contenues
dans la Base
• Il s’agit principalement des ordres : INSERT, DELETE et UPDATE
• LCD (Langage de Contrôle de Données)
– Regroupe les ordres utilisés pour gérer la sécurité des accès aux
données contenues dans la Base
• Il s’agit principalement des ordres : GRANT et REVOKE
• LID (Langage d’Interrogation des Données)
– Regroupe l’ordre utilisé pour interroger les données contenues dans
la Base
• Il s’agit principalement des ordres : SELECT
• LCT (Langage de Contrôle des Transactions)
– Regroupe les ordres utilisés pour gérer la validation ou non des
mises-à-jour effectuées sur la Base
• Il s’agit principalement des ordres : COMMIT et ROLLBACK
14/04/2020 Bases de Données 5
LANGAGE SQL

LDD : LANGAGE DE DÉFINITION DE DONNÉES


LANGAGE SQL

LDD : LANGAGE DE DÉFINITION DE DONNÉES


TYPES DE DONNÉES
SQL : TYPES DE DONNÉES (1)
• Types de Données
– Numériques
– Caractères (ou Alphanumériques)
– Temporelles
– Binaires
– Autres types de Données
• Chaque SGBD a défini des Types
spécifiques pour des problématiques de
stockages
14/04/2020 Bases de Données 8
SQL : TYPES DE DONNÉES (2)
• Types de Données
– Numériques
• Nombres Entiers
• Nombres Décimaux et Flottants
• Données Monétaires
– Caractères (ou Alphanumériques)
– Temporelles
– Binaires
– Autres types de Données
14/04/2020 Bases de Données 9
SQL : TYPES DE DONNÉES (3)
NUMÉRIQUES : NOMBRES ENTIERS
Stockage
Type Précision BDD
(Octet)
TINYINT 0 à 255 1 SQL Server
TINYINT 0 à 255 ou -128 à 127 1 MySQL
SQL Server,
SMALLINT -32 768 à 32 768 ou 0 à 65 535 2
PostgreSQL
SMALLINT 0 à 65 535 2 MySQL
INT ou -2 147 483 648 à 2 147 483 647 SQL Server,
4
INTEGER ou 0 à 4 294 967 295 PostgreSQL
-9 223 372 036 854 775 808 à SQL Server,
BIGINT 8
9 223 372 036 854 775 807 PostgreSQL
BIGINT 0 à 18 446 744 073 709 551 615 8 MYSQL

14/04/2020 Bases de Données 10


SQL : TYPES DE DONNÉES (4)
NUMÉRIQUES : NOMBRES DÉCIMAUX
Stockage
Type Précision BDD
(Octet)
-1038+1 à 1038-1 .
p : représente la précision,
c’est-à-dire, le nombre total et
DECIMAL (p , s) maximum de chiffres à gauche et 5 à 17 selon SQL Server,
ou à droite de la virgule. Par défaut 18. la précision PostgreSQL,
NUMERIC (p , s) s : représente l’échelle c’est-à-dire, et l’échelle MySQL
le nombre de chiffres maximum
après la virgule. La valeur par défaut
est 0
Entier ou Décimal.
p : représente la précision et peut aller 1 à 22 selon
NUMBER (p , s) jusqu’à 40 la précision ORACLE
s : représente l’échelle de -84 à 127 où le et l’échelle
chiffre négatif correspond à l’arrondi

14/04/2020 Bases de Données 11


SQL : TYPES DE DONNÉES (5)
NUMÉRIQUES : NOMBRES DÉCIMAUX
Stockage
Type Précision BDD
(Octet)
-1,79E+308 à -2,23E-308, 0 et 4 pour n
2,23E-308 à 1,79E+308. entre 1 et 24 SQL Server,
FLOAT (n) n : représente le nombre de bits utilisés Ou ORACLE,
pour stocker la donnée. Sa valeur par 8 pour n MySQL
défaut est 53 entre 25 et 53
DOUBLE (n)
Ou
n: le nombre de décimaux utilisés de 1 PostgreSQL,
DOUBLE 8
à 15 MySQL
Ou
PRECISION (n)
-3,40E+38 à -1,18E-38, 0 et
1,18E-38 à 3,40E+38. SQLServer,
REAL (n) n : représente le nombre de bits utilisés 4 PostgreSQL,
pour stocker la donnée. Sa valeur par MySQL
défaut est 24
14/04/2020 Bases de Données 12
SQL : TYPES DE DONNÉES (6)
NUMÉRIQUES : NOMBRES MONÉTAIRES
Stockage
Type Précision BDD
(Octet)

-922 337 203 685 477,5808 à SQL Server,


MONEY 8
922 337 203 685 477,5807 PostgreSQL

SQL Server
SMALLMONEY -214 748,3648 à 214 748,3647 4

14/04/2020 Bases de Données 13


SQL : TYPES DE DONNÉES (7)
• Types de Données
– Numériques
– Caractères (ou Alphanumériques)
– Temporelles
– Binaires
– Autres types de Données

14/04/2020 Bases de Données 14


SQL : TYPES DE DONNÉES (8)
CARACTÈRES
Stockage
Type Précision BDD
(Octet)
SQL Server,
MySQL,
CHAR (n) 0 à 255 Caractères n Octets
PostgreSQL,
ORACLE
Type de données Unicode dans
SQL Server,
NCHAR (n) ORACLE limité à 1000 ou 2000 n Octets * 2
selon le jeu de caractères ORACLE

Chaînes de caractères à
CHARACTER (n) longueur variable
x Octets PostgreSQL

SQL Server,
Longueur
0 à 65 535 Caractères pour MySQL,
VARCHAR (n) MYSQL
chaîne + 1
PostgreSQL,
Octet
ORACLE
14/04/2020 Bases de Données 15
SQL : TYPES DE DONNÉES (9)
• Types de Données
– Numériques
– Caractères (ou Alphanumériques)
– Temporelles
– Binaires
– Autres types de Données

14/04/2020 Bases de Données 16


SQL : TYPES DE DONNÉES (10)
TEMPORELLES
Stockage
Type Précision BDD
(Octet)
SQL Server,
Norme ISO
DATE AAAA-MM-JJ
3 MySQL,
ORACLE
Norme ISO SQL Server,
TIME HH:MM:ss.nnnnnnn
3 à 5 Octets
MYSQL
Norme ISO
TIMESTAMP AAAA-MM-JJ 8 MySQL
HH:MM:ss.nnn
Norme ISO
DATETIMEOFFSET AAAA-MM-JJ 8 à 10 Octets SQL Server
HH:MM:ss.nnn

14/04/2020 Bases de Données 17


LANGAGE SQL

LDD : LANGAGE DE DÉFINITION DE DONNÉES


GESTION DES TABLES
CREATE TABLE : SYNTAXE
CREATE TABLE nom_Table ( [Attr_1
TYPE_1],
TYPE_2],
[Attr_2
TYPE_3 DEFAULT valeur],
[Attr_3
[NOT]NULL TYPE_4],
[Attr_4
TYPE_5 UNIQUE],
[Attr_5
TYPE_6 CHECK (condition)],
[Attr_6
…..,
[CONSTRAINT clé_pri PRIMARY KEY (Attr_i, [,Attr_j],…)],
[CONSTRAINT clé_etr_1 FOREIGN KEY (liste d’Attributs clés de Table_1)
REFERENCES Table_1],
[CONSTRAINT clé_etr_2 FOREIGN KEY (liste d’Attributs clés de Table_2)
REFERENCES Table_2]) ;

14/04/2020 Bases de Données 19


CREATE TABLE : CONSTATIONS (1)
• Entre [ ] dans la Syntaxe  Non obligatoire
• On peut définir une Table sans aucun champs, quoique, ce n’est pas
logique
• Chaque Attribut défini doit avoir un Type spécifique
– DEFAULT : Permet d’attribuer une valeur par défaut à un Attribut
– [NOT]NULL : Précise si on peut [ou pas] laisser la valeur d’un Attribut vide. Par
défaut, on peut à condition que l’Attribut n’est pas défini comme clé primaire
– UNIQUE : Précise que la valeur de l’Attribut ne doit pas être en doublon dans la
Table
– CHECK : Permet de contrôler les valeurs (Alphanumériques ou Numériques)
prises par l’Attribut

14/04/2020 Bases de Données 20


CREATE TABLE : CONSTATIONS (2)
• L’option PRIMARY KEY permet de de spécifier la clé primaire de
la Table
– Il est préférable de définir une clé primaire pour chaque Table
– Par défaut une clé primaire est UNIQUE et aussi NOTNULL
• L’option FOREIGN KEY définit une clé étrangère liée à une
autre Table dont le nom doit être mentionné à la suite du mot clé
REFERENCES
– Une Table peut ne pas contenir de clés étrangères
– Une Table peut contenir de clés étrangères issues d’une ou de
plusieurs Tables (NB : Cette Table ou bien ces Tables sont pré-
créées)

14/04/2020 Bases de Données 21


Exemple : On se propose de traiter l’exemple suivant

EMPLOYÉ SERVICE
Matricule INTEGER <pk> NumSce INTEGER <pk>
NomEmp VARCHAR(25) NomSce VARCHAR(20)
Poste VARCHAR(25) AdreSce VARCHAR(50)
DateEmb DATE
Salaire FLOAT
Comm FLOAT
NumSce INTEGER <fk>

CREATE TABLE Service


(
NumSce INTEGER,
NomSce VARCHAR(20) NOT NULL,
AdreSce VARCHAR(50),
CONSTRAINT PK_Service PRIMARY KEY(NumSce)
);

14/04/2020 Bases de Données 22


EMPLOYÉ SERVICE
Matricule INTEGER <pk> NumSce INTEGER <pk>
NomEmp VARCHAR(25) NomSce VARCHAR(20)
Poste VARCHAR(25) AdreSce VARCHAR(50)
DateEmb DATE
Salaire FLOAT
Comm FLOAT
NumSce INTEGER <fk>

CREATE TABLE Employé


(
Matricule INTEGER ,
NomEmp VARCHAR(25),
Poste VARCHAR(25),
DateEmb DATE,
Salaire FLOAT,
Comm FLOAT,
NumSce INTEGER ,
CONSTRAINT PK_Employé PRIMARY KEY(Matricule),
CONSTRAINT FK_NumSce FOREIGN KEY(NumSce)
REFERENCES Service
);
14/04/2020 Base de Données Avancée 23
CREATE TABLE :
CRÉER UNE TABLE À PARTIR D’UNE AUTRE (1)
CREATE TABLE nouvelle_Table
AS SELECT [<nom_Colonne_1>, <nom_Colonne_2>, …, | <*>]
FROM Table_à_copier
[WHERE <conditions logiques de niveau Tuples>] ;

• Cette Syntaxe permet de créer une Table à


partir d’un ordre de sélection de
Colonnes d’une autre Table
• Cette méthode est utilisée par les
développeurs pour créer des Tables de
Test et des jeux d’essais
14/04/2020 Bases de Données 24
CREATE TABLE :
CRÉER UNE TABLE À PARTIR D’UNE AUTRE (2)
Exemple : Syntaxe avec ORACLE et PostgreSQL
CREATE TABLE V_Employé
AS SELECT *
FROM Employé ;

• Cet ordre permet de copier toute la Structure de


la Table « Employé » ainsi que son contenu
dans la Table « V_Employé »
• Remarque : avec les grosses Tables il existe un
risque de rencontrer des problèmes d’espace
disque ou de temps de réponse importants
14/04/2020 Bases de Données 25
CREATE TABLE :
CRÉER UNE TABLE À PARTIR D’UNE AUTRE (3)
Exemple : Syntaxe avec MySQL (AS disparaît)
CREATE TABLE V_Employé
SELECT *
FROM Employé ;

Exemple : Syntaxe avec SQL Server


SELECT * INTO V_Employé
FROM Employé ;

14/04/2020 Bases de Données 26


ALTER TABLE : DÉTAILS
• L’ordre ALTER est utilisé pour réaliser plusieurs actions
– Supprimer une Colonne (ordre DROP COLUMN) ou Ajouter
une Colonne (ordre ADD [COLUMN]) d’une Table
– Supprimer une Contrainte (ordre DROP CONSTRAINT) ou
Ajouter une Contrainte (ordre ADD CONSTRAINT)
– Ajouter (ordre ADD) une valeur par défaut à une Colonne
– Modifier le Nom d’une Colonne (Ordre RENAME COLUMN)
et éventuellement modifier son Type (Ordre MODIFY) et ses
caractéristiques NULL ou NOTNULL
• Remarque : Certains SGBD autorisent ce type de modifications,
d’autres l’interdisent. Par exemple , le passage d’un Type à un autre
peut causer des problèmes de cohérences
• Il est déconseillé de faire de telles changements
• L’ordre MODIFY et l‘ordre RENAME COLUMN sont utilisés avec
précaution

14/04/2020 Bases de Données 27


ALTER TABLE : SYNTAXE
ALTER TABLE nom_Table ( [ADD nom_Colonne TYPE],
[DROP COLOMN nom_Colonne],
[ADD CONSTRAINT nom_Contrainte],
[DROP CONSTRAINT nom_Contrainte],
[MODIFY nom_Colonne TYPE],
[RENAME COLUMN ancien_nom TO nouveau_nom]) ;

14/04/2020 Bases de Données 28


ALTER TABLE :
AJOUT DE COLONNES

ALTER TABLE nom_Table


ADD nom_colonne TYPE ;

Exemple : La requête suivante permet d’ajouter un Attribut « Couleur » à


la table Produit

ALTER TABLE Produit


ADD Couleur VARCHAR(10) ;

14/04/2020 Bases de Données 29


ALTER TABLE :
MODIFICATION D’UNE COLONNE

ALTER TABLE nom_Table


MODIFY nom_Colonne TYPE ;

Exemple : La requête suivante permet d’agrandir la taille de l’Attribut


« Couleur » récemment ajoutée à la table Produit

ALTER TABLE Produit


MODIFY Couleur VARCHAR(12) ;

14/04/2020 Bases de Données 30


ALTER TABLE :
SUPPRESSION D’UNE COLONNE

ALTER TABLE nom_Table


DROP COLUMN nom_Colonne ;

Exemple : La requête suivante permet de supprimer l’Attribut « Couleur »


de la table Produit

ALTER TABLE Produit


DROP COLUMN Couleur ;

14/04/2020 Bases de Données 31


ALTER TABLE :
CHANGEMENT DE NOM D’UNE COLONNE

ALTER TABLE nom_Table


RENAME COLUMN ancien_nom TO nouveau_nom ;

Exemple : La requête suivante permet de renommer la Colonne « AdrSce »


en « LieuSce »

ALTER TABLE Service


RENAME COLUMN AdrSce TO LieuSce ;

14/04/2020 Bases de Données 32


RENAME TABLE :
CHANGEMENT DE NOM D’UNE TABLE

RENAME ancien_nom TO nouveau_nom ;

Exemple : La requête suivante permet de renommer la Table Produit en


Article

RENAME Produit TO Article ;

14/04/2020 Bases de Données 33


TRUNCATE TABLE :
VIDER UNE TABLE

TRUNCATE TABLE nom_Table ;

Exemple : La requête suivante permet de vider la Table Produit

TRUNCATE TABLE Produit ;

14/04/2020 Bases de Données 34


DROP TABLE :
SUPPRESSION D’UNE TABLE

DROP TABLE nom_Table ;

Exemple : La requête suivante permet de supprimer la Table Produit

DROP TABLE Produit ;

14/04/2020 Bases de Données 35


TRUNCATE TABLE VS
DROP TABLE
• TRUCATE TABLE permet de supprimer toutes les
occurrences d’une Table
– Cet ordre occupe une seule ligne dans le Journal
– En cas d’annulation de cet ordre (ROLLBACK) toutes les
occurrences de la Table sont récupérées
• DROP TABLE permet de supprimer définitivement une
Table
– La Table à supprimer ne doit pas être en cours d’utilisation
par une autre personne
– Après un DROP TABLE
• Certaines versions de SGBD autorisent la récupération des données
(suite à une fausse manipulation, par exemple) : ORACLE à partir de la
version 10
• D’autres SGBD n’autorisent pas la récupération des données. Pour
MySQL et SQL Server, les ordres de manipulation des Tables
entraînement une validation automatique (COMMIT)

14/04/2020 Bases de Données 36


CREATE SYNONYM :
EXPLOITATION D’UNE TABLE D’UN AUTRE USER
CREATE SYNONYM nom_Synonyme FOR nom_Table ;

• CREATE SYNONYM permet de donner un nom


différent à une Table
• Un Synonyme permet de simplifier l’exploitation
du nom d’une Table qui est normalisé
– Accès à une Table : « nom_User.nom_Table »
• Remarque : Cette fonction n’est pas implémentée
avec MySQL ni avec PostgreSQL

14/04/2020 Bases de Données 37


CREATE SEQUENCE :
GESTION D’UN ATTRIBUT CLÉ PAR LE SGBD (1)
CREATE SEQUENCE nom_Séquence ;

• CREATE SEQUENCE permet de désigner une Colonne


définie dans une Table comme une clé primaire
– La Colonne est généralement de Type Numérique, elle est
prédéfinie dans la Table
• Le SGBD gère l’incrémentation de cette Colonne
– Le système s’occupe d’attribuer une valeur unique à cette
Colonne, lors de chaque ajout de ligne dans la Table
– Par défaut, le système va créer un objet qui prend la valeur 1 et
s’incrémente de 1 en 1
– Remarque : On peut attribuer une valeur de départ, un pas
précis ou une valeur maximale

14/04/2020 Bases de Données 38


CREATE SEQUENCE :
GESTION D’UN ATTRIBUT CLÉ PAR LE SGBD (2)
Exemple :
CREATE SEQUENCE S_Numéro
START WITH 5 INCREMENT BY 1
MINVALUE 2 MAXVALUE 999999 CYCLE ;
• Dans cet exemple :
– S_Numéro : est déjà créé dans la Table
– La Séquence va démarrer à la valeur 5, elle sera incrémentée de 1, et
ne pourra jamais être inférieur à 2 et supérieure à 999999, elle
recommencera à 2
– Si l’on ne veut pas que la Séquence boucle après avoir atteint la valeur
maximale, il faut enlever l’option CYCLE
• Dans ce cas, le SGBD retournera une erreur lorsqu’on demandera la valeur
suivante de 999999
– L’utilisation de CYCLE est déconseillée car la Séquence peut générer
des doublons
• Dans ce cas, le SGBD déclenche une erreur si la Colonne est déclarée comme
UNIQUE
14/04/2020 Bases de Données 39
CREATE SEQUENCE :
GESTION D’UN ATTRIBUT CLÉ PAR LE SGBD (3)
Exemple :

SELECT S_Numéro.NEXTVAL FROM nom_Table ;


SELECT S_Numéro.CURRVAL FROM nom_Table ;

• Pour connaître la valeur actuelle d’une Séquence


ou faire avancer une Séquence, il faut utiliser les
fonctions suivantes (Pour ORACLE) :
– CURRVAL : récupère la valeur actuelle
– NEXTVAL : incrémente la Séquence du pas prévu (1 par
défaut)

14/04/2020 Bases de Données 40


LANGAGE SQL

LDD : LANGAGE DE DÉFINITION DE DONNÉES


GESTION DES VUES
CREATE VIEW : SYNTAXE
CREATE VIEW nom_Vue AS
SELECT [Attribut_1, Attribut_2, ...]
FROM [Table_1, Table_2, …]
[WHERE <conditions logiques de niveau Tuples>] ;
• La Vue n’est pas un Objet proprement dit, mais un résultat
de Requête
– Une Vue n’autorise pas de mises-à-jour de données. En effet, les
données appartiennent aux Tables du SELECT
– Une Vue représente à un instant t l’image des Tables qu’elle
utilise
• Les Vues créées peuvent être exploitées dans de nouvelles
Requêtes SELECT  il suffit de préciser le nom de la Vue
 de cette manière on peut garantir la sécurité des Tables
14/04/2020 Bases de Données 42
UTILISATION DES VUES : INTÉRÊTS (1)
• La Vue est une représentation Logique de la Base
– Une Vue résulte d’une Requête SELECT pour un besoin
spécifique et répétitif
– Une Vue est considérée comme une Table « Virtuelle »
spécifique pour un Domaine ou pour une Classe
d’utilisateurs
• La Vue n’admet pas une représentation physique
– Généralement, une Vue n’est pas stockée sur un Disque
(sauf sur une demande spécifique) mais en Mémoire
• Attention : Certains SGBD proposent de stocker les Vues sur
Disque  Dans ce cas une Vue est considérée comme une
Table
– Ce n’est pas le cas d’une Table

14/04/2020 Bases de Données 43


UTILISATION DES VUES : INTÉRÊTS (2)
• La Vue permet de masquer les Colonnes qui
contiennent des informations confidentielles
dans une ou différentes Table(s)
– L’utilisateur ne voit que ce que l’on veut bien lui
montrer
– La Vue est une agrégation de Colonnes issues
d’une ou plusieurs Tables
• La Vue permet de simplifier pour un utilisateur la
BD
– L’utilisateur n’a pas besoin de connaître l’ensemble
du Schéma mais simplement quelques éléments
spécifiques utiles dans son métier

14/04/2020 Bases de Données 44


UTILISATION DES VUES : EXEMPLE (1)
Table Chambres
idChambre Hotel TypeChambre NumChambre Commentaire
23 4 2 2 NULL
16 3 2 2 NULL
9 2 2 2 NULL
2 1 2 2 NULL
3 1 3 3 NULL
10 2 3 3 NULL
17 3 3 3 NULL
24 4 3 3 NULL
25 4 4 4 NULL

14/04/2020 Bases de Données 45


UTILISATION DES VUES : EXEMPLE (2)
Table TypesChambre
idTypeChambre NombreLit TypeLit Description
1 1 Lit Simple 1 Lit Simple avec douche
2 2 Lit Simple 2 Lits Simples avec douche
3 Lits Simples avec douche et
3 3 Lit Simple
WC séparés
4 1 Lit Double 1 Lit Double avec douche
1 Lit Double avec douche et WC
5 1 Lit Double
séparés
1 Lit Double avec bain et WC
6 1 Lit Double
séparés
1 Lit Double large avec bain et
7 1 Lit XL
WC séparés
14/04/2020 Bases de Données 46
UTILISATION DES VUES : EXEMPLE (3)

• La Vue « V_Chambre_dsec » est créée à partir des deux Tables :


Chambre et TypesChambre
CREATE VIEW V_Chambre_desc AS
SELECT Chambres.Hotel, Chambres.NumChambre, TypesChambre.TypeLit,
TypesChambre.NombreLit, TypesChambre.Description
FROM Chambres, TypesChambre
WHERE Chambres.TypeChambre = TypesChambre.idTypeChambre ;

14/04/2020 Bases de Données 47


UTILISATION DES VUES : EXEMPLE (4)
SELECT * FROM V_Chambres_desc ;

Hotel NumChambre NombreLit TypeLit Description


1 2 Lit Simple 2 2 Lits Simples avec douche
2 2 Lit Simple 2 2 Lits Simples avec douche
3 2 Lit Simple 2 2 Lits Simples avec douche
4 2 Lit Simple 2 2 Lits Simples avec douche
3 Lits Simples avec douche
4 3 Lit Simple 3
et WC séparés
3 Lits Simples avec douche
3 3 Lit Simple 3
et WC séparés
3 Lits Simples avec douche
2 3 Lit Simple 3
et WC séparés
3 Lits Simples avec douche
1 3 Lit Simple 3
et WC séparés
14/04/2020 Bases de Données 48
DROP VIEW :
SUPPRESSION D’UNE VUE
Syntaxe :

DROP VIEW nom_Vue ;


Exemple : La requête suivante permet de supprimer la Vue V_Chambres_Desc

DROP VIEW V_Chambres_Desc ;


• DROP VIEW permet de supprimer une Vue et
son contenu définitivement
– Il est impossible de récupérer la Vue suite à un
DROP
– Cet ordre n’a aucune influence sur les Tables qui
sont utilisées dans le SELECT lors de la création de la
Vue
14/04/2020 Bases de Données 49
LANGAGE SQL

LDD : LANGAGE DE DÉFINITION DE DONNÉES


GESTION DES INDEX
UTILISATION DES INDEX : INTÉRÊT (1)
• Création d’ Index  Création de Fichiers Physiques
associés
– Avantages
• Rattacher à certaines Colonnes d’une Table
• Accélérer l’accès aux données par le SGBD  Optimiser le Temps de
Réponse
– Inconvénients
• Consomme un espace mémoire dans la BD
• Mise-à-jour de l’Index à chaque modification de la Table à laquelle il
est racheté  cela peut alourdir le temps de traitement du SGBD
lors de la saisie des données
• Il est conseillé de créer des Index sur :
– Les Colonnes qui sont déclarées en PRIMARY KEY
– Les Colonnes qui sont déclarées en FOREIGN KEY
– Les Colonnes les plus accédées
– Les Colonnes qui servent de jointure entre les Tables

14/04/2020 Bases de Données 51


CREATE INDEX : SYNTAXE
CREATE [UNIQUE] INDEX nom_Index
ON nom_Table (Attribut [ASC | DESC], ….) ;
• L’option UNIQUE permet d’interdire la présence des doublons
pour les valeurs de la Colonne
• L’option [ASC | DESC] permettent de définir un ordre
Ascendant (ASC, qui est la valeur par défaut) ou Descendant
(DESC) de classement des valeurs présentes dans la Colonne
Exemple :

CREATE INDEX ProdIDX


ON Produit (Libéllé DESC) ;

14/04/2020 Bases de Données 52


DROP INDEX :
SUPPRESSION D’UN INDEX
Syntaxe :

DROP INDEX nom_Index ;


Exemple : La requête suivante permet de supprimer l’Index ProdIDX

DROP INDEX ProdIDX ;


• DROP INDEX permet de supprimer l’Index
définitivement
– Il est impossible de récupérer l’Index suite à un DROP
– Un Utilisateur ne peut supprimer que les Index qu’il a
lui-même créés et les Index que l’Administrateur de la
BD a autorisés

14/04/2020 Bases de Données 53

Vous aimerez peut-être aussi