Anda di halaman 1dari 151

Systme de Gestion de Base de

Donnes 1

(SGBD1)
19/10/2011 F.ELLABBAR 2
Dfinition

Une Base de Donnes (BD): est un systme


informatique permettant dcrire, de socker et
daccder des donnes.
Une BD est un ensemble de donnes
structures, sres, cohrentes, non
redondantes et persistantes .

Exemple :fichier de traitement de texte ,


disque dur , la boite emails (structure puisque quil va
archiver les emails tout en stockant dans des champs destins cet effet la date,
lexpditeur, le destinataire, le texte etc)
19/10/2011 F.ELLABBAR 3
Dfinition

Un systme de gestion de base de donnes


SGBD fait rfrence un logiciel conu pour la
gestion des donnes la plupart du temps
structures, lexception notable des SGBD
vocation documentaire (donnes non
structures)
Un SGBD est un ensemble des programmes qui
permet la structuration, le stockage et la
manipulation des donnes.
19/10/2011 F.ELLABBAR 4
Objectifs des systmes de gestion de bases de
donnes

Manipulations des donnes par des non


informaticiens: Il faut pouvoir accder aux donnes
sans savoir programmer
Efficacit des accs aux donnes Ces langages doivent
permettre d'obtenir des rponses aux interrogations
en un temps "raisonnable".
Administration centralise des donnes Des visions
diffrentes des donnes (entre autres) se rsolvent
plus facilement si les donnes sont administres de
faon centralise.

19/10/2011 F.ELLABBAR 5
Objectifs des systmes de gestion de bases de
donnes

Non redondance des donnes Afin d'viter les


problmes lors des mises jour, chaque donne ne
doit tre prsente qu'une seule fois dans la base.
Partageabilit des donnes Il s'agit de permettre
plusieurs utilisateurs d'accder aux mmes donnes
au mme moment.
Rsistance aux pannes. Ainsi, aprs une panne
intervenant au milieu d'une modification deux
solutions sont possibles : soit rcuprer les donnes
dans l'tat dans lequel elles taient avant la
modification, soit terminer l'opration interrompue.

19/10/2011 F.ELLABBAR 6
Services attendus dun SGBD

LM
LDD D

SGF

STOCKAG
INT

Disque

E
SEC

KUP
CO C
NF
BA

19/10/2011 F.ELLABBAR 7
Langage de description de donnes (LDD)
 DDL (Data Description Language)
 Permet de dcrire les donnes
 Type, Longueur, Nature
 Valeurs acceptes (contraintes dintgrit sur domaine)
 Rgles de gestion statiques (contraintes dintgrit
fonctionnelles)

19/10/2011 F.ELLABBAR 8
Langage de manipulation de donnes(LMD)

 DML (Data Management Language)


 Permet de raliser les oprations ( requtes):
 Ajout, modification, suppression
 Slection
 Le modle relationnel dispose dun ensemble doprations
ensembliste appel algbre relationnelle la fois simple
dutilisation et puissant.
 Le plus connu des LMD : SQL

19/10/2011 F.ELLABBAR 9
Gestion du stockage
La faon dont le S.G.B.D organise les donnes en
fichiers est transparente pour lutilisateur.
Par ailleurs, avec un S.G.B.D les donnes sont
indpendantes des programmes. Cest dire que
les donnes sont dcrites lextrieur des
programmes et quon peut donc modifier leur
description sans forcment refaire les
programmes. Et par ailleurs on peut connatre
leur structure sans regarder les programmes qui
les utilisent.

19/10/2011 F.ELLABBAR 10
Sauvegarde et restauration (Backup)

La sauvegarde et la restauration sont deux


outils du S.G.B.D permettant de mmoriser
puis de retrouver une base de donnes dans
un tat cohrent.

19/10/2011 F.ELLABBAR 11
Confidentialit et Scurit
Cette fonctionnalit consiste garantir que seuls les utilisateurs
autoriss peuvent effectuer des oprations correctes sur la base de
telle sorte quelles sont maintenu dans un tat cohrent :

Un contrle sur les utilisateurs ainsi que sur les types


doprations quils sont autoriss effectuer (gestion
des autorisations).
Un contrle sur la validit des oprations effectues.
Ce contrle est effectu par rapport certaines rgles
appels contraintes dintgrit.
 . Un utilisateur particulier a tous les droits est l Administrateur de
Bases de Donnes. Lui seul aura le droit de dfinir et modifier les
droits daccs.

19/10/2011 F.ELLABBAR 12
Contrle dintgrit
La plupart des S.G.B.D offrent la possibilit de
dcrire les rgles de gestion du systme
dinformation de lentreprise. Par exemple, si un
client nexiste pas, on ne peut pas lui associer de
facture.
Une fois toutes les rgles dcrites, le S.G.B.D
vrifie que les mises jour effectues sur les
donnes respectent ces rgles. Ainsi, il refusera la
cration de la facture tant que le client ne sera
pas cr.

19/10/2011 F.ELLABBAR 13
Les accs concurrents aux donnes

Lobjectif est de mettre la disposition du plus grand nombre


dutilisateur un ensemble intgre (cohrent) de donnes.
Les donnes peuvent tre manipules simultanment par
plusieurs utilisateurs.
La cohrence des donnes est assure laide de concepts de
transaction qui est une unit logique de traitement qui, applique
un tat cohrent de la base, restitue un autre tat cohrent.

19/10/2011 F.ELLABBAR 14
Les accs concurrents aux donnes
La plupart des SGBD sur la march utilisent pour cela
un mcanisme de verrouillage.
Lorsquune donne est accde en lecture, un verrou
partag y est plac.
Lorsquune donne est accde en criture, un
verrou exclusif y est plac.
Un verrou partag permet toujours daccder en
lecture sur cette donne, mais toute opration
dcriture sur cette mme donne sera bloque en
attendant que le verrou soit libr.
En revanche, un verrou exclusif bloque toute
opration de lecture ou dcriture sur cette donne.
19/10/2011 F.ELLABBAR 15
Architecture dun SGBD
On distingue 3 niveaux de description :
 Le niveau conceptuel ou logique
 Le niveau interne
 Le niveau externe

19/10/2011 F.ELLABBAR 16
Architecture Stockage physique

Schma interne

Description de lorganisation
physique des donnes

Domaine des Description dunivers modliser


concepteurs avec ventuellement les contraintes
de BD Schma conceptuel lis ces objets (contraintes
dintgrits)

Domaine des
Schma Schma Schma Application accdant aux
crateurs
externe externe externe donnes : des vues (accs
dapplications
limits)
Ce dcoupage permet des modifications chaque niveau sans que cela interagisse (le
moins possible) sur les autres niveaux.
19/10/2011 F.ELLABBAR 17
Les principaux types de SGBD

Le modle hirarchique
Le modle rseau
Le modle relationnel
Le modle objet

19/10/2011 F.ELLABBAR 18
Un peu d'histoire

1960 : Uniquement des systmes de gestion de fichiers plus ou moins


sophistiqus.
1970 : Dbut des systmes de gestion de bases de donnes rseaux et
hirarchiques proches des systmes de gestion de fichiers.
1980 : Les systmes de gestion de bases de donnes relationnels
apparaissent sur le march.
1990 Les systmes de gestion de bases de donnes relationnels dominent
le march.
Dbut des systmes de gestion de bases de donnes orients objet.

19/10/2011 F.ELLABBAR 19
Modle hirarchique
Liaison entre les objets de type 1
Client
Client n
Client
Client Modle arborescent dont le
parcours se fait du pre vers le
fils laide de pointeurs
Commandes
Commandes
Complexit importante
Commandes Commandes
Commandes Commandes
Systme DL1 / IBM

Lignes Lignes Lignes


Lignes Lignes Lignes
Lignes
Commande Lignes Lignes
Commande
Lignes
Commande Commande Commande
Lignes
Commande Commande Commande
Commande Commande Commande

19/10/2011 F.ELLABBAR 20
Modle rseau
Liaison entre les objets de type n n
Client
Client
Modle dont le parcours se fait laide
Client de pointeurs mais en tous sens
Client
Paternit multiple
Systme IDS2 de Bull
Commandes Commandes
Commandes Commandes
Commandes Commandes
Commandes Articles

Lignes
Lignes
Lignes
Commande
Lignes
Commande
Commande
Commande

19/10/2011 F.ELLABBAR 21
Modle relationnel
Bas sur le modle Entit Relation
driv de la thorie des ensembles et
Client Commande
de la logique des prdicats
PK IdClient PK IdCommande Grande indpendance entre vue
FK1 IdClient
externe et stockage interne
Simplicit - Evolutivit
Thorie : Codd 1972
CommandeArticle
Article
PK,FK1 IdCommande
IBM System R 1979 et DB2 1982
PK IdArticle
PK,FK2 IdArticle

19/10/2011 F.ELLABBAR 22
Modle relationnel
 SGBDR Client / Serveur
 DB2 - IBM
 UDB (Universal Data Base Tous Systmes)

 DB2 400 (AS 400)

 Oracle
 SQL Server Microsoft
 Informix (Rachat par IBM)
 MYSQL (Open Source)

 Minimiser les changes / rseau


 Programmation de la logique de MAJ ct serveur

19/10/2011 F.ELLABBAR 23
Modle relationnel
 SGBDR Fichier
 Access
 Paradox
 FoxPro

 Les donnes sont modifies localement / poste client


 Trafic important sur le rseau
 Bonnes performances sur poste de travail

19/10/2011 F.ELLABBAR 24
Modle Objet

volution du modle relationnel qui tendrait


simplifier les problmes lis la persistance et la
navigation dans les collections : Langage OQL
Langage C, C++, Java

19/10/2011 F.ELLABBAR 25
19/10/2011 F.ELLABBAR 26
2.1 Prsentation de SQL
SQL signie Structured Query Language c'est--dire Langage d'interrogation
structur.

En fait SQL est un langage complet de gestion de BDR. Il a t conu par IBM
dans les annes 70. Il est devenu le langage standard des (SGBDR).

un langage de manipulation des donnes (LMD; ordres UPDATE, INSERT,


DELETE)

un langage de dnition des donnes (LDD ; ordres CREATE, ALTER, DROP),

un langage de contrle de l'accs aux donnes (LCD ; ordres GRANT,


REVOKE).

19/10/2011 F.ELLABBAR 27
2.2 Types de donnes
Type numrique : NUMBER, INTEGER, int,
smallint, bigInt
On peut crire:
NUMBER(taille_maxi)
NUMBER(taille_maxi, dcimales)

Types chane de caractres: VARCHAR, CHAR

Types temporels: DATE , Datetime

19/10/2011 F.ELLABBAR 28
Remarques:

19/10/2011 F.ELLABBAR 29
2.3 Cration des tables

Avant darriver la syntaxe SQL pour CREATE TABLE, il conviendrait de


comprendre le contenu dune table.

Les tables se divisent en lignes et en colonnes.


Chaque ligne reprsente une partie des donnes.
Chaque colonne peut reprsenter un composant de cette partie de donnes.

Par exemple, si nous disposons dune table pour enregistrer les informations
des clients, les colonnes peuvent alors inclure des donnes telles que le
prnom, le nom, ladresse, la ville, le pays, la date de naissance, et ainsi de suite.
Lors de la spcification dune table, il faut inclure les types de donnes relatives
cette colonne particulire.

19/10/2011 F.ELLABBAR 30
2.3 Manipulation des tables
La syntaxe SQL de CREATE TABLE est :
CREATE TABLE "nom de table"
("colonne 1" " type de donnes pour la colonne 1",
"colonne 2" "type de donnes pour la colonne 2",
... )

Exemple: Pour crer la table de clients spcifie, il faut saisir :


CREATE TABLE Client
(nom varchar(50),
prenom varchar(50),
Address varchar(50),
ville varchar(50),
pays varchar(25),
Date_naissance date) ;

19/10/2011 F.ELLABBAR 31
2.3 Manipulation des tables
Il est aussi possible dattribuer une valeur par dfaut chaque colonne. La valeur par
dfaut est utile lorsquaucune valeur de colonne na t spcifie au moment de
linsertion des donnes dans la table.
Pour spcifier une valeur par dfaut, ajoutez "Default [value]" aprs la dfinition du
type de donnes. Dans lexemple ci-dessus, pour dfinir par dfaut la colonne
"Address" "Unknown" (Inconnu) et Ville Rabat", il faut saisir :
CREATE TABLE Client
(nom varchar(50),
prenom varchar(50),
Address varchar(50) default 'Unknown',
ville varchar(50) default Rabat',
pays varchar(25),
Date_naissance date) ;
Vous pouvez galement limiter le type dinformations que doit contenir une table ou
une colonne. Pour ce faire, utilisez le mot-cl CONSTRIANT

19/10/2011 F.ELLABBAR 32
2.4 Les Contraintes du SQL
1. NOT NULL
Une colonne accepte par dfaut une valeur NULL. Pour rejeter une valeur
NULL dans une colonne, vous devez dfinir une contrainte sur cette colonne
en indiquant que celle-ci naccepte pas de valeur NULL.

Par exemple, dans linstruction suivante


CREATE TABLE Clieny
(SID NUMBER NOT NULL,
nom varchar (30) NOT NULL,
prenom varchar(30));
Les colonnes "SID" et nom" naccepte pas de valeur NULL, alors que
prenom" peut en accepter.

19/10/2011 F.ELLABBAR 33
2.4. Les Contraintes du SQL
2. UNIQUE
La contrainte UNIQUE garantit que toutes les valeurs dune colonne ne
peuvent comporter de doublons.
Par exemple, dans linstruction suivante
CREATE TABLE Client
(SID NUMBER UNIQUE,
nom varchar (30) NOT NULL,
prenom varchar(30));
La colonne "SID" naccepte pas de doublons, alors quune telle contrainte ne
sapplique pas aux colonnes nom" et "prenom".
(pour une contrainte sur une table :)
UNIQUE (colonne1, colonne2,...)

19/10/2011 F.ELLABBAR 34
2.4 Les Contraintes du SQL
3.CHECK
La contrainte CHECK permet que toutes les valeurs dune colonne
satisfassent des conditions donnes.

Par exemple, dans linstruction suivante :

CREATE TABLE Client


(SID NUMBER CHECK (SID > 0),
nom varchar (30),
prenom varchar(30));

La colonne "SID" ne peut accepter que des entiers suprieurs 0.

19/10/2011 F.ELLABBAR 35
2.4 Les Contraintes du SQL
4.Cl Primaire
Exemple :
CREATE TABLE Client
(SID NUMBER PRIMARY KEY,
nom varchar (30),
prenom varchar(30));
Ou
(SID NUMBER constraint pk_Client primary key,

(pour une contrainte sur une table :)


PRIMARY KEY (colonne1, colonne2,...)
(pour une contrainte sur une colonne :)
PRIMARY KEY
19/10/2011 F.ELLABBAR 36
2.4 Les Contraintes du SQL

5.Cl trangre
La cl trangre reprsente un champ (ou des champs) qui pointe vers la cl primaire
dune autre table:
(pour une contrainte sur une colonne :)
REFERENCES tableref [(col1 )]
[ON DELETE CASCADE][ON UPDATE CASCADE]
(pour une contrainte sur une table :)
FOREIGN KEY (colonne1, colonne2,...)
REFERENCES tableref [(col1, col2,...)]
[ON DELETE CASCADE][ON UPDATE CASCADE]
Ou (colonne type CONSTRAINT fk_c REFERENCES
tablreference(colonne reference) [ON DELETE CASCADE] [ON UPDATE
CASCADE]

19/10/2011 F.ELLABBAR 37
2.4 Les Contraintes du SQL

5.Cl trangre
L'option ON DELETE CASCADE indique que la suppression d'une ligne de
tableref va entraner automatiquement la suppression des lignes qui la
rfrencent dans la table. Si cette option n'est pas indique, il est impossible de
supprimer des lignes de tableref qui sont rfrences par des lignes de la table.

A la place de ON DELETE CASCADE on peut donner l'option ON DELETE SET


NULL. Dans ce cas, la cl trangre sera mise NULL si la ligne qu'elle rfrence
dans tableref est supprime.

La norme SQL2 offre 4 autres options qui ne sont pas implmente dans Oracle:
ON UPDATE CASCADE
ON DELETE SET DEFAULT
ON UPDATE SET NULL
ON UPDATE SET DEFAULT

19/10/2011 F.ELLABBAR 38
2.4 Les Contraintes du SQL
5.Cl etrangre
Exemple:

19/10/2011 F.ELLABBAR 39
2.4 Les Contraintes du SQL
5.Cl etrangre
Exemple:

19/10/2011 F.ELLABBAR 40
Remarques

19/10/2011 F.ELLABBAR 41
Remarque: CREATE TABLE AS
La commande CREATE TABLE a dj t vue, Une variante permet d'insrer
pendant la cration de la table des lignes venant d'autres tables :
CREATE TABLE nom de table (col type......)
AS SELECT .....
Exemple :
CREATE TABLE MINIDEPT(CLE INTEGER, NOM VARCHAR(20)) AS SELECT
NUM_DEPT, NOMD FROM DEPT
Cet ordre crera une table MINIDEPT et la remplira avec deux colonnes des lignes
de la table DEPT. Il faut videmment que les dfinitions des colonnes de la table
cre et du rsultat de la slection soient compatibles en type et en taille. On
peut galement ne pas donner les noms et type des colonnes de la table cre.
Dans ce cas les colonnes de cette table auront les mmes noms, types et tailles
que celles de l'interrogation :
CREATE TABLE DEPT10 AS SELECT * FROM DEPT
WHERE NUM_DEPT = 10

19/10/2011 F.ELLABBAR 42
2.5 Modification et suppression dune table
la commande ALTER TABLE permet de grer les colonnes d'une table : ajout
d'une colonne, suppression et modification d'une colonne existante.
Ajout d'une colonne ADD
ALTER TABLE table
ADD (col1 type1, col2 type2, ...);

permet d'ajouter une ou plusieurs colonnes une table existante. Les


parenthses ne sont pas ncessaires si on n'ajoute qu'une seule colonne.
Exemple:
alter table personne
add (email_valide varchar(1)
constraint p_e_valide check(email_valide in ('o', 'n')));

19/10/2011 F.ELLABBAR 43
2.5 Modification et suppression dune table
Modification d'une colonne - MODIFY
ALTER TABLE table
MODIFY (col1 type1, col2 type2, ...)

col1, col2... sont les noms des colonnes que l'on veut modifier. Elles doivent
bien sr dj exister dans la table. type1, type2,... sont les nouveaux types
que l'on dsire attribuer aux colonnes.

Il est possible de modifier la dfinition d'une colonne, condition que:


 la colonne ne contienne que des valeurs NULL ou que la nouvelle
dfinition soit compatible avec le contenu de la colonne :
 on ne peut pas diminuer la taille maximale d'une colonne.
 on ne peut spcifier 'NOT NULL' que si la colonne ne contient pas de
valeur nulle.

19/10/2011 F.ELLABBAR 44
2.5 Modification et suppression dune table
Exemple:
alter table personne
modify ( prenoms null,
nom varchar(50));
On peut donner une contrainte de colonne dans la nouvelle
dfinition de la colonne.
Exemple:
alter table personne
modify ( sexe char(1)
constraint per_sexe check(sexe in ('m', 'f')));

19/10/2011 F.ELLABBAR 45
2.5 Modification et suppression dune table
Suppression d'une colonne - DROP COLUMN
ALTER TABLE table
DROP COLUMN col;
La colonne supprime ne doit pas tre rfrence par une cl trangre
ou tre utilise par un index.
Renommer une colonne - RENAME COLUMN
ALTER TABLE table
RENAME COLUMN ancien_nom TO nouveau_nom;
Renommer une table - RENAME TO
ALTER TABLE ancien_nom
RENAME TO nouveau_nom
Supprimer une table - DROP TABLE
DROP TABLE table [CASCADE CONSTRAINTS]
Il est impossible de supprimer une table si la table est rfrence par
une contrainte d'intgrit rfrentielle
46
19/10/2011 F.ELLABBAR
Remarques:
linstruction suivante permet de lister les contraintes cres par
lutilisateur
Select * from user_constraints;

Pour supprimer ou modifier les tables , il faut en connaitre le nom.


Linstruction suivante permet un utilisateur dOracle de trouver ses
tables:
Select * from user_tables;

Pour connaitre la liste des colonnes dune table, lutilisateur


dispose de linstructions suivante:
Describe nom table ;

19/10/2011 F.ELLABBAR 47
2.6 Ajouter, supprimer ou renommer une contrainte

Des contraintes d'intgrit peuvent tre ajoutes ou supprimes


par la commande ALTER TABLE.
On peut aussi modifier l'tat de contraintes par MODIFY
CONSTRAINT.
On ne peut ajouter que des contraintes de table.
Si on veut ajouter (ou modifier) une contrainte de colonne, il faut
modifier la colonne.

19/10/2011 F.ELLABBAR 48
2.6 Ajouter, supprimer ou renommer une contrainte

Exemple
ALTER TABLE EMP
DROP CONSTRAINT NOM_UNIQUE;
Ou ADD CONSTRAINT SAL_MIN CHECK(SAL > 1000);
Ou RENAME CONSTRAINT NOM1 TO NOM2 ;
Ou MODIFY CONSTRAINT SAL_MIN DISABLE;
Ou DISABLE CONSTRAINT NOM_UNIQUE
Ou ENABLE CONSTRAINT NOM_UNIQUE
Ou ADD CONSTRAINT FK_COMMANDE FOREIGN KEY
(NUM_CLIENT) REFERENCES CLIENT(NUM);
19/10/2011 F.ELLABBAR 49
19/10/2011 F.ELLABBAR 50
3.1 Insertion
INSERT INTO table (col1,..., coln )
VALUES (val1,...,valn );
Ou
INSERT INTO table VALUES (val1,...,valn );

table est le nom de la table sur laquelle porte l'insertion.


col1,..., coln est la liste des noms des colonnes pour lesquelles on donne une
valeur. Cette liste est optionnelle. Si elle est omise, le SGBD prendra par
dfaut l'ensemble des colonnes de la table dans l'ordre o elles ont t
donnes lors de la cration de la table.
Si une liste de colonnes est spcifie, les colonnes ne figurant pas dans la
liste auront la valeur NULL.

19/10/2011 F.ELLABBAR 51
3.1 Insertion
Client(SID (pk), nom(not null), prenom, ville default(inconnu))
Exemple 1:
INSERT INTO Client
VALUES (10, nom1', prenom1,fes);
Exemple 2:
INSERT INTO client (SID, nom, prenom)
VALUES (3, nom1,prenom1);
Exercice:
Insrer dans la table client les informations suivantes:
(12, nom1,prenom1,ville1)
(14, nom2,prenom2)
(10, nom2)
(122, nom3,prenom3,ville3)
19/10/2011 F.ELLABBAR 52
3.2.4 Gnration de cls primaires :Squences (oracle)

Dfinition: Une squence joue le rle de distributeur de numro. Elle constitue


une srie unique de numros, chaque tirage modifiant la valeur du numro
courant.
Syntaxe :
CREATE SEQUENCE [user.]nomSequence [INCREMENT BY n] [START
WITH n]
Par dfaut, lincrment est de 1 et la valeur de dpart vaut 0.
Une squence est munie de 2 pseudo-colonnes : NEXTVAL et CURRVAL. Leur
syntaxe dappel est: nomSequence.NEXTVAL et nomSequence.CURRVAL.
Exemple
CREATE SEQUENCE seq_emp;
INSERT INTO EMP VALUES(seq_emp.nextval, TOTO, 10000.00);
Remarque: sous ORACLE, SELECT seq_empl.currval FROM dual;
La suppression de la squence est ralise par :
DROP SEQUENCE <nomSequence>

19/10/2011 F.ELLABBAR 53
Table DUAL (oracle)
C'est une particularit d'Oracle. Cette pseudo-
table ne contient qu'une seule ligne et une seule
colonne et ne peut tre utilise qu'avec une
requte select.
Elle permet de faire afficher une expression dont
la valeur ne dpend d'aucune table en particulier.
Exemple
Afficher la date d'aujourd'hui, le nom de
l'utilisateur et le rsultat d'un calcul :
select sysdate, user, round(3676 / 7),
sqrt(5) from dual
19/10/2011 F.ELLABBAR 54
19/10/2011 F.ELLABBAR 55
3.2 L'ordre SELECT
Pour afficher les donnes sous forme dun tableau dont les colonnes portent
un intitul, SQL propose linstruction suivante:

SELECT col1,col2,,coln FROM table WHERE

Exemple :
 La requte pour afficher le nom et le sid de la table client:
select sid, nom from client;
 La requte pour afficher toutes les colonnes de la table client:
select * from client;
 La requte pour afficher les lignes dont le sid >= 13:
select * from client where sid >=13;
Exercice: slectionner les lignes de la table client:
19/10/2011 F.ELLABBAR 56
3.2.1 L'ordre SELECT: Clause WHERE simple

WHERE prdicat
Un prdicat simple est la comparaison de deux expressions ou plus au
moyen d'un oprateur logique :

WHERE exp1 BETWEEN exp2 AND exp3


WHERE exp1 = exp2
WHERE exp1 LIKE exp2
WHERE exp1 != exp2
WHERE exp1 NOT LIKE exp2
WHERE exp1 < exp2
WHERE exp1 IN (exp2, exp3,...)
WHERE exp1 > exp2
WHERE exp1 NOT IN (exp2, exp3,...)
WHERE exp1 <= exp2
WHERE exp IS NULL
WHERE exp1 >= exp2
WHERE exp IS NOT NULL

19/10/2011 F.ELLABBAR 57
3.2.1 L'ordre SELECT: Clause WHERE simple
Les trois types d'expressions (arithmtiques, caractres, ou dates) peuvent tre
compares au moyen des oprateurs d'galit ou d'ordre (=, !=, <, >, <=, >=)
 pour les types date, la relation d'ordre est l'ordre chronologique
 pour les types caractres, la relation d'ordre est l'ordre lexicographique.
Il faut ajouter ces oprateurs classiques les oprateurs suivants:
BETWEEN, IN, IS NULL, LIKE :
exp1 BETWEEN exp2 AND exp3
est vrai si exp1 est compris entre exp2 et exp3, bornes incluses.
exp1 IN (exp2 , exp3...)
est vrai si exp1 est gale l'une des expressions
exp IS [NOT] NULL
est vrai si l'expression a la valeur NULL (ou l'inverse avec NOT).
Remarque : Le prdicat exp = NULL n'est jamais vrai, et ne permet donc
pas de tester si l'expression est NULL.
19/10/2011 F.ELLABBAR 58
3.2.1 L'ordre SELECT: Clause WHERE simple

 exp1 LIKE exp2 : teste l'galit de deux chanes en tenant compte des caractres
jokers dans la 2me chane :
 _ remplace 1 caractre exactement
% remplace une chane de caractres de longueur quelconque, y compris de
longueur nulle
l'expression 'MARTIN' LIKE '_AR%' sera vraie.
Remarques :
 L'utilisation des jokers ne fonctionne qu'avec LIKE ; elle ne fonctionne pas
avec =.
 Si on veut faire considrer _ ou % comme des caractres normaux, il faut
les faire prcder d'un caractre d'chappement que l'on indique par la
clause ESCAPE.
 Par exemple, la requte suivante cache les noms qui contiennent le
caractre % : select nom from emp where nom like '%\%%' escape '\'
19/10/2011 F.ELLABBAR 59
3.2.2 L'ordre SELECT: Clause WHERE complexe
 Oprateurs logiques :
Les oprateurs logiques AND et OR peuvent tre utiliss pour combiner plusieurs
prdicats (l'oprateur AND est prioritaire par rapport l'oprateur OR).
Des parenthses peuvent tre utilises pour imposer une priorit dans l'valuation
du prdicat, ou simplement pour rendre plus claire l'expression logique.
L'oprateur NOT plac devant un prdicat en inverse le sens.
Exemples
Slectionner les employs du dpartement 30 ayant un salaire suprieur 1500 dh.
SELECT NOM FROM EMP
WHERE DEPT = 30 AND SAL > 1500
Afficher une liste comprenant les employs du dpartement 30 dont le salaire est
suprieur 11000 DH ou (attention, la traduction par OR) les employs qui ne
touchent pas de commission.
SELECT nom FROM emp
WHERE dept = 30 AND sal > 11000 OR comm IS NULL
19/10/2011 F.ELLABBAR 60
3.2.3 Fonctions de groupes

Les fonctions de groupes peuvent apparatre dans le Select ce sont les


fonctions suivantes :
Fonction Explication Exemple
AVG moyenne SELECT AVG(salaire) FROM emp ;
SUM somme SELECT SUM(salaire) FROM emp ;
MIN plus petite des valeurs SELECT MIN(salaire) FROM emp ;
MAX plus grande des valeurs SELECT MAX(salaire) FROM emp ;
VARIANCE variance SELECT VARIANCE(salaire) FROM emp
;
STDDEV cart type (dviation SELECT STDDEV (salaire) FROM emp ;
standard)
COUNT(*) nombre de lignes SELECT COUNT(*) FROM emp ;
COUNT(col ) nombre de valeurs non nulles SELECT COUNT(ville) FROM emp ;
de la colonne
COUNT(DISTINCT col ) nombre de valeurs non nulles SELECT COUNT(DISTINCT ville) FROM
diffrentes emp ;
19/10/2011 F.ELLABBAR 61
exercice
JOURNAUX (Code,Titre , Prix, Type, Priodicit, Adr)
1) crer la table journaux
2) Insrer 10 journaux.
3) Afficher les journaux.
4) Afficher le titre et le prix des journaux.
5) Les journaux ayant un prix > 5 dh
6) Les journaux de type sant et ayant le prix < 5dh
7) Les journaux ayant comme ville rabat.
8) Les journaux ayant un titre qui commence par el
9) Codes des journaux mensuels
10) Le nombre des journaux.
11) Nombre de types de journaux.
12) Le nombre des journaux ayant adresse rabat
13) Prix minimum, moyen et maximum d'un journal.

19/10/2011 F.ELLABBAR 62
Remarque:

La selection des n lignes:


En SQLServeur
 SELECT TOP 10 * FROM Etudiant
En Mysql
 SELECT * FROM Etudiant limit 0, 3;
En Oracle
 SELECT * FROM Etudiant rownum<5
19/10/2011 F.ELLABBAR 63
3.2.5 Le regroupement: Clause GROUP BY

Il est possible de subdiviser la table en groupes, chaque


groupe tant l'ensemble des lignes ayant une valeur
commune.
Syntaxe
GROUP BY exp1, exp2,...
groupe en une seule ligne toutes les lignes pour lesquelles
exp1, exp2,... ont la mme valeur.

Cette clause se place juste aprs la clause WHERE, ou


aprs la clause FROM si la clause WHERE n'existe pas.

19/10/2011 F.ELLABBAR 64
3.2.5 Le regroupement: Clause GROUP BY
Date Agence CA
exemple:
06/09/2010 Nord 1000 dh
06/09/2010 Sud 2000 dh
06/09/2010 Est 3000 dh
07/09/2010 Nord 2000dh
07/09/2010 Est 5000 dh
07/09/2010 Sud 2000dh

Nous effectuons le regroupement par date et nous sommons sur le CA. Nous obtenons
le code SQL suivant :
SELECT Date, Sum(CA) AS CA_total
FROM Rsultats GROUP BY Date;
dans lequel le regroupement est exprim par la clause GROUP BY. La requte fournit le
rsultat suivant :
Date CA_total
06/09/2010 6000dh
07/09/2010 9000dh
19/10/2011 F.ELLABBAR 65
3.2.5 Le regroupement: Clause GROUP BY

Une requte avec regroupement peut tre filtre avant ou aprs


regroupement.
Un exemple de filtrage avant regroupement en liminant l'agence Est.
Le code SQL est le suivant :
SELECT Date, Sum(CA) AS CA_total
FROM Rsultats
WHERE Agence !="Est"
GROUP BY Date;

Une requte de slection classique (dans les trois premires lignes), suivie d'un
regroupement.
Date CA_total
La requte fournit le rsultat suivant :
06/09/2010 3000dh
07/09/2010 4000dh

19/10/2011 F.ELLABBAR 66
3.2.5 Le regroupement: Clause GROUP BY

Un filtrage aprs regroupement en ne retenant que les CA suprieurs 3500


dh.
Le code SQL est le suivant :

SELECT Date, Sum(CA) AS CA_total


FROM Rsultats
WHERE Agence !="Est"
GROUP BY Date
HAVING Sum(CA)>3500;
Date CA_total
La requte fournit le rsultat suivant :
07/09/2010 4000dh

19/10/2011 F.ELLABBAR 67
3.2.6 Le regroupement: Clause GROUP BY

Clause HAVING
HAVING prdicat
Le prdicat suit la mme syntaxe que celui de la clause WHERE. Cependant, il ne
peut porter que sur des caractristiques de groupe : fonction de groupe ou
expression figurant dans la clause GROUP BY
Clause Order By
ORDER BY exp1 [ASC], exp2 [DESC], ...
La clause Order by permet de trier les colonnes dans lordre dcroissant sachant
que par dfaut lordre est croissant.
D'une manire gnrale, une requte avec regroupement s'crit en SQL :
SELECT .........
FROM ...........
WHERE ............
GROUP BY ...........
HAVING .......
19/10/2011 ORDER BY DESC. F.ELLABBAR 68
3.2.6 Le regroupement: Clause GROUP BY

Le comptage et les doublons


En utilisant la table "Rsultats", dans laquelle nous avons effac une des valeurs
du champ CA. Date Agence CA
06/09/2010 Nord 1000 dh
06/09/2010 Sud 2000 dh
06/09/2010 Est 3000 dh
07/09/2010 Nord 2000dh
07/09/2010 Est
07/09/2010 Sud 2000dh

Nous crons une requte effectuant un regroupement sur le champ "Date", et un


comptage sur le champ "CA". Le code SQL s'crit :

19/10/2011 F.ELLABBAR 69
3.2.6 Le regroupement: Clause GROUP BY

Le comptage et les doublons

Si nous appliquons la fonction "Count" au champ de regroupement lui-


mme, nous effectuons un comptage des doublons sur ce champ. Le code
SQL correspondant s'crit :

19/10/2011 F.ELLABBAR 70
3.2.6 Le regroupement: Clause GROUP BY

Le comptage et les doublons

Le comptage des doublons sur deux champs date et agence s'crit ainsi :

19/10/2011 F.ELLABBAR 71
3.2.6 Le regroupement: Clause GROUP BY
Le comptage et les doublons
Le regroupement sans comptage nous permet d'liminer les doublons. Si nous
effectuons l'opration sur la colonne "Agence", nous obtenons la liste des agences.
Le code SQL s'crit :
Agence
Est
Rsultat
Nord
Sud
La requte fournit un rsultat o les agences sont tries par ordre alphabtique.

Terminons par le comptage sans regroupement, qui permet d'obtenir le nombre


d'enregistrements d'une table. Le code SQL s'crit :

Comptage
Rsultat
6

19/10/2011 F.ELLABBAR 72
3.2.7 Le regroupement et les fonctions de groupe

Soit le schma suivant :


EMP (NUM ,NOM , SAL , POSTE , DEPT)
1) slectionner le salaire maximale

2) slectionner la moyenne des salaires maximales par dpartement

3) pour chaque dpartement slectionner la somme minimale des salaires.

4) Slectionner les dpartement ayant la moyenne des salaires > 10000

Erreurs viter:
Where fonction _group -> exp: where max, where sum INCORECTE
Having fg(fg(col)) exp: having min (sum(sal))>1000 INCORECTE

19/10/2011 F.ELLABBAR 73
19/10/2011 F.ELLABBAR 74
3.2.7 Les jointures
Objectifs: Afficher des Donnes issues de Plusieurs Tables
On a parfois besoin d'obtenir des donnes de plusieurs tables. Dans l'exemple ci-dessus, l'tat affiche les
donnes de deux tables diffrentes.
EMPNO appartient la table EMP.
DEPTNO appartient aux tables EMP et DEPT.
LOC appartient la table DEPT.
Pour obtenir cet tat,
il faut relier les tables
EMP et DEPT et
accder aux donnes
de ces deux tables.

19/10/2011 F.ELLABBAR 75
3.2.7 Les jointures

Dfinition:

 Pour obtenir des donnes appartenant diffrentes tables de la base de


donnes, vous devez utiliser une condition de jointure.
Les lignes d'une table peuvent tre relies aux lignes d'une autre table
en fonction de valeurs communes existants dans des colonnes se
correspondant.
En gnral la colonne cl primaire et la colonne cl trangre.

Syntaxe:
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;

19/10/2011 F.ELLABBAR 76
3.2.7 Les jointures: Produit Cartsien

Exemple
SELECT ename , dname FROM emp, dept;
Rsultat: Produit Cartsien

19/10/2011 F.ELLABBAR 77
3.2.7 Les jointures:

Types de Jointures
Il existe deux principaux types de conditions de jointure :
 Les quijointures
 Les non-quijointures
Les autres mthodes de jointures sont les suivantes :
 Jointures externes
 Autojointures
 Les oprateurs ensemblistes

19/10/2011 F.ELLABBAR 78
3.2.7 Les jointures: Equijointures et Jointures externes

Pour dterminer le dpartement auquel appartient un employ, vous devez comparer


les valeurs de la colonne DEPTNO de la table EMP avec les valeurs de la colonne
DEPTNO de la table DEPT
les valeurs de la colonne DEPTNO appartenant aux deux tables doivent tre identiques
Jointures externes: jointure de deux tables diffrentes.

19/10/2011 F.ELLABBAR 79
3.2.7 Les jointures: Equijointures et Jointures externes

Diffrenciation des Noms de Colonne


Pour viter toute ambigut, vous devez prfixer dans la clause WHERE les noms
de colonne avec le nom de la table
Lorsqu'aucune colonne n'est commune aux deux tables, la qualification n'est pas
indispensable
Select emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc
From emp, dept
Where emp.deptno=dept.deptno
Alias de Table
La qualification des noms de colonne l'aide des noms de table peut prendre
beaucoup de temps, en particulier si les noms de table sont longs.
Vous pouvez substituer des alias de table aux noms de table.
Select e.empno, e.ename, e.deptno, d.deptno, d.loc
From emp e, dept d
Where e.deptno=d.deptno

19/10/2011 F.ELLABBAR 80
3.2.7 Les jointures: Equijointures et Non-Equijointures

La relation entre la table EMP et la table SALGRADE est une non-quijointure car aucune
colonne de la table EMP ne correspond directement une colonne de la table SALGRADE.
La relation existant entre les deux tables est la suivante: les valeurs de la colonne SAL de la
table EMP sont comprises entre celles des colonnes LOSAL et HISAL de la table SALGRADE. Il
faut donc utiliser un autre oprateur que le signe gal (=) pour effectuer une jointure.

SQL> SELECT e.ename, e.sal, s.grade


FROM emp e, salgrade s WHERE
e.sal
BETWEEN s.losal AND s.hisal;

ENAME SAL GRADE


---------- --------- ---------
JAMES 950 1
SMITH 800 1
ADAMS 1100 1
...
14 rows selected.
19/10/2011 F.ELLABBAR 81
3.2.7 Les jointures: Equijointures et Autojointures

Il se peut que vous ayez besoin de relier une table elle-mme. Ici, pour retrouver le nom
du manager de chaque employ, il faut que la table EMP soit relie elle-mme

SQL> SELECT worker.ename ||' works


for '||manager.ename FROM emp
worker, emp manager WHERE
worker.mgr = manager.empno;

WORKER.ENAME||'WORKSFOR'||MANAGER
-------------------------------
BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
...
13 rows selected.

19/10/2011 F.ELLABBAR 82
Autojointures
Soit le schma suivant :
EMP (NUM ,NOM , SAL , POSTE , DEPT)
DEPT (DEPT , NOMD, VILLE )
 Slectionner les employs ayant le mme salaire deux deux.
SELECT E1.NOM, E2.NOM FROM EMP E1, EMP E2
WHERE E1.NOM > E2.NOM AND E1.SAL = E2.SAL
 Afficher les dpartement ayant la mme ville deux deux

 Afficher les noms des employs ayant les mme postes trois trois

19/10/2011 F.ELLABBAR 83
19/10/2011 F.ELLABBAR 84
3.2.8 Sous-interrogation

Une caractristique puissante de SQL est la possibilit qu'un prdicat employ


dans une clause WHERE comporte un SELECT embot.
Problme:
Soit le schma suivant :
EMP (NUM ,NOM , SAL , POSTE , DEPT)
DEPT (DEPT , NOMD, VILLE )
La slection des employs ayant mme poste que KADIRI
Solution: la requte est :
SELECT NOM FROM EMP
WHERE POSTE = (SELECT POSTE
FROM EMP
WHERE NOM = KADIRI )

19/10/2011 F.ELLABBAR 85
3.2.8 Sous-interrogation

1. Sous-interrogation une ligne et une colonne


Dans ce cas, le SELECT imbriqu quivaut une valeur.
WHERE exp op (SELECT ...)
op est un des oprateurs = != < > <= >=
Exemple1
 Liste des employs travaillant dans le mme dpartement que FAKIR:

Exemple2
 Liste des employs ayant mme poste que FAKIR ou un salaire suprieur KADIRI:

19/10/2011 F.ELLABBAR 86
3.2.8 Sous-interrogation

1. Sous-interrogation une ligne et une colonne


Jointures et sous-interrogations peuvent se combiner.
Exemple3
 Liste des employs travaillant RABAT et ayant mme poste que KADIRI

Remarque
Attention : une sous-interrogation une seule ligne doit ramener une seule
ligne ; dans le cas o plusieurs lignes, ou pas de ligne du tout seraient
ramenes, un message d'erreur sera affich et l'interrogation sera
abandonne.

19/10/2011 F.ELLABBAR 87
3.2.8 Sous-interrogation

2) Sous-interrogation ramenant plusieurs lignes


Une sous-interrogation peut ramener plusieurs lignes condition que l'oprateur de
comparaison admette sa droite un ensemble de valeurs. Les oprateurs permettant
de comparer une valeur un ensemble de valeurs sont :
 L'oprateur IN
 L'oprateur ANY : la comparaison sera vraie si elle est vraie pour au moins
un lment de l'ensemble (elle est donc fausse si l'ensemble est vide).
 L'oprateur ALL : la comparaison sera vraie si elle est vraie pour tous les
lments de l'ensemble (elle est vraie si l'ensemble est vide).

WHERE exp op ANY (SELECT ...)


WHERE exp op ALL (SELECT ...)
WHERE exp IN (SELECT ...)
WHERE exp NOT IN (SELECT ...)

o op est un des oprateurs =, !=, <, >, <=, >=.


19/10/2011 F.ELLABBAR 88
3.2.8 Sous-interrogation

2) Sous-interrogation ramenant plusieurs lignes


Exemple1
 Liste des employs gagnant plus que tous les employs du dpartement 30 :

Remarque
 L'oprateur IN est quivalent = ANY.
 L'oprateur NOT IN est quivalent != ALL.
Exemple2
 Liste des employs du dpartement 10 ayant mme poste que quelqu'un du
dpartement VENTES

19/10/2011 F.ELLABBAR 89
3.2.8 Sous-interrogation

3) Sous-interrogation ramenant plusieurs colonnes


Il est possible de comparer le rsultat d'un SELECT ramenant plusieurs colonnes
une liste de colonnes. La liste de colonnes figurera entre parenthse gauche de
l'oprateur de comparaison.
 Avec une seule ligne slectionne :
WHERE (exp, exp,...) op (SELECT ...)
 Avec plusieurs lignes slectionnes :
WHERE (exp, exp,...) op ANY (SELECT ...)
WHERE (exp, exp,...) op ALL (SELECT ...)
WHERE (exp, exp,...) IN (SELECT ...)
WHERE (exp, exp,...) NOT IN (SELECT ...)

o op est un des oprateurs = ou !=


Les expressions figurant dans la liste entre parenthses seront
compares celles qui sont ramenes par le SELECT.
19/10/2011 F.ELLABBAR 90
3.2.8 Sous-interrogation

3) Sous-interrogation ramenant plusieurs colonnes


Exemple1
Employs ayant mme poste et mme salaire que KADIRI :

Exemple2
 Nom et dpartement des employs ayant le salaire maximal par
dpartement .

19/10/2011 F.ELLABBAR 91
3.2.8 Sous-interrogation

4) Clause EXISTS
La clause EXISTS est suivie d'une sous-interrogation entre parenthses, et prend la
valeur vrai s'il existe au moins une ligne satisfaisant les conditions de la sous-
interrogation.

Exemple
 Lister les noms des dpartements qui ont au moins un employ ayant
plus de 10.000 comme salaire.
SELECT NOMD FROM DEPT
WHERE EXISTS (SELECT * FROM EMP
WHERE DEPT = DEPT.DEPT AND SAL > 10000);
Remarque
Si on veut lister les noms des dpartements qui ont aucun employ ayant plus de
10.000 comme salaire.
-En utilise NOT EXISTS

19/10/2011 F.ELLABBAR 92
3.2.8 les oprations ensemblistes en SQL
Notions d'Algbre Relationnelle
Le langage SQL permet de raliser sur un groupe de deux tables les trois oprations de
base de la thorie des ensembles, c'est dire :
l'union
l'intersection
la diffrence

19/10/2011 F.ELLABBAR 93
L'union de deux tables

Exemple nom prnom

nom prnom n1 p1
nom prnom n2 p2
n1 p1
UNION n4 p4 = n3 p3
n2 p2
n3 p3 n1 p1 n4 p4
Table2 Rsultat
Table1

La requte SQL scrit


SELECT nom, prenom
FROM Table1
UNION
SELECT nom, prenom
FROM Table2;
19/10/2011 F.ELLABBAR 94
L'union de deux tables

Exemple nom prnom

nom prnom n1 p1
nom prnom n2 p2
n1 p1
UNION ALL n4 p4 = n3 p3
n2 p2
n3 p3 n1 p1 n4 p4
Table2 n1 p1
Table1
Rsultat
La requte SQL scrit
SELECT nom, prenom
FROM Table1
UNION ALL
SELECT nom, prenom
FROM Table2;
19/10/2011 F.ELLABBAR 95
L'intersection de deux tables (ORACLE)

Exemple
nom prnom
nom prnom nom prnom
n1 p1
INTERSECT n4 p4 = n1 p1
n2 p2
n3 p3 n1 p1 Rsultat
Table2
Table1
La requte SQL scrit (oracle)
SELECT nom, prenom
FROM Table1
INTERSECT
SELECT nom, prenom
FROM Table2;
SELECT nom, prenom FROM Table1 WHERE
(nom,prenom) IN ( SELECT nom,prenom FROM TABLE2)
19/10/2011 F.ELLABBAR 96
La diffrence de deux tables (ORACLE)

Exemple
nom prnom nom prnom
nom prnom
n1 p1
MINUS n4 p4 = n2 p2
n2 p2 n3 p3
n3 p3 n1 p1
Table2
Table1 Rsultat

La requte SQL scrit (oracle)


SELECT nom, prnom
FROM Table1
MINUS
SELECT nom, prnom
FROM Table2;
SELECT nom, prenom FROM Table1 WHERE
(nom,prenom) NOT IN ( SELECT nom,prenom FROM TABLE2)

19/10/2011 F.ELLABBAR 97
19/10/2011 F.ELLABBAR 98
La Modification: lordre update

La commande UPDATE permet de modifier les valeurs d'un ou plusieurs champs,


dans une ou plusieurs lignes existantes d'une table.

UPDATE table
SET col1 = exp1, col2 = exp2, ...
WHERE prdicat

Ou UPDATE table
SET (col1, col2,...) = (SELECT ...)
WHERE prdicat

 table est le nom de la table mise jour ;


 col1, col2, ... sont les noms des colonnes qui seront modifies
 exp1, exp2,... sont des expressions.

19/10/2011 F.ELLABBAR 99
La Modification: lordre update

(a) Faire passer ACHRAF dans le dpartement 5 :

(b) Augmenter de 10 % les commerciaux :

(c) Donner FILALI 10 % au dessus de la moyenne des salaires des secrtaires :

(d) Enlever (plus exactement, mettre la valeur NULL) la commission de ACHRAF :

19/10/2011 F.ELLABBAR 100


La Modification: lordre update

(e) Augmenter le salaire des employs habitant rabat de 0.2% de salaire maximal.

Erreurs viter
Modifier une seule table
UPDATE EMP, DEPT SET SAL= SAL+12 Incorrecte
Modifier le salaire de ACHRAF par la somme du salaire de KADIRI et HOUDA.
UPDATE EMP
SET SAL= ( SELECT SAL FROM EMP WHERE NOM=KADIRI ) + ( SELECT SAL
FROM EMP WHERE NOM=HOUDA )
Solution: UPDATE EMP
SET SAL= 0+ ( SELECT SAL FROM EMP WHERE NOM=KADIRI ) + ( SELECT SAL
FROM EMP WHERE NOM=HOUDA )
OU: UPDATE EMP SET SAL=
( SELECT E1.SAL+ E2.SAL FROM EMP E1, EMP E2 WHERE E1.NOM=KADIRI
AND E2.NOM = HOUDA )
19/10/2011 F.ELLABBAR 101
La suppression: lordre delete

L'ordre DELETE permet de supprimer des lignes d'une table.

DELETE FROM table


WHERE prdicat

La clause WHERE indique quelles lignes doivent tre supprimes.


ATTENTION : cette clause est facultative ; si elle n'est pas prcise, TOUTES LES
LIGNES DE LA TABLE SONT SUPPRIMEES

Exemple:
1) Supprimer le dpartement 10
DELETE FROM dept
WHERE dept = 10

19/10/2011 F.ELLABBAR 102


19/10/2011 F.ELLABBAR 103
Les transactions dans SQL

Dfinition:
Une transaction est un ensemble de modifications de la base qui forment un tout
indivisible : il faut effectuer ces modifications entirement ou pas du tout, sous peine de
laisser la base dans un tat incohrent.

Dans la norme SQL, une transaction commence au dbut d'une session de travail ou
juste aprs la n de la transaction prcdente. Elle se termine par
un ordre explicite de validation
ou d'annulation .
COMMIT : L'utilisateur peut tout moment valider (et terminer) la transaction en
cours par la commande COMMIT. Les modifications deviennent alors
dfinitives et visibles toutes les autres transactions.
ROLLBACK : L'utilisateur peut annuler (et terminer) la transaction en cours par la
commande ROLLBACK. Toutes les modifications depuis le dbut de la
transaction sont annules.

19/10/2011 F.ELLABBAR 104


Proprits des transactions ACID

Atomicit : un tout indivisible ;


Cohrence : une transaction doit laisser la base dans un tat
cohrent ; elle ne doit pas contredire une
contrainte d'intgrit ou mettre les donnes
dans un tat anormal ;
Isolation : les modifications effectues par une transaction
ne doivent tre visibles par les autres
transactions que lorsque la transaction est
valide ;
Durabilit : Le SGBD doit garantir que les modifications d'une
transaction valide seront conserves, mme en
cas de panne.
19/10/2011 F.ELLABBAR 105
Autres modles de transactions
Dans la norme SQL, la structure des transactions est plate et les
transactions
sont chanes :
 Deux transactions ne peuvent se chevaucher ;
 Une transaction commence ds que la prcdente se termine.

Ce modle n'est pas toujours adapt aux situations concrtes, surtout


pour les transactions longues et multi-sites :
 Elles peuvent tre une source de frustration pour l'utilisateur
si tout le travail effectu depuis le dbut de la transaction est
annule ;

D'autres modles ont t proposs pour assouplir ce modle.

19/10/2011 F.ELLABBAR 106


Transactions embotes
Le modle des transactions embotes permet une transaction d'avoir des
sous-transactions filles, qui elles-mmes peuvent avoir des filles.
L'annulation d'une transaction parente annule toutes les transactions filles
mais l'annulation d'une transaction fille n'annule pas ncessairement la
transaction mre.
Points de reprise
 Sans passer au modle des transactions embotes, les dernires versions
des principaux SGBD (et la norme SQL3) ont assoupli le modle des
transactions plates avec les points de reprise
On peut dsigner des points de reprise dans une transaction :
Savepoint nomPoint;
On peut ensuite annuler toutes les modifications effectues depuis
un point de reprise s'il y a eu des problmes :
Rollback to nomPoint
19/10/2011 F.ELLABBAR 107
19/10/2011 F.ELLABBAR 108
3.2.9 les fonctions SQL
Les fonctions sont utilises pour :
Effectuer des calculs sur des donnes
Formater des dates et des nombres pour l'affichage
Convertir des types de donnes de colonnes
Remarque:
la plupart des fonctions SQL dcrites dans ce chapitre sont spcifiques au SQL d'Oracle.

19/10/2011 F.ELLABBAR 109


3.2.9 les fonctions SQL
Fonctions Mono-Ligne
Ces fonctions agissent sur une seule ligne la fois et ramnent un seul rsultat.
Fonctions Multi-Ligne
Ces fonctions manipulent des groupes de lignes et ramnent un seul rsultat par
groupe de lignes.

19/10/2011 F.ELLABBAR 110


Fonctions Mono-Ligne
 S'utilisent dans les clauses SELECT, WHERE, et ORDER BY.

Fonctions caractre : acceptent des caractres en entre et ramnent des valeurs


caractre ou numriques.

Fonctions numriques : acceptent des nombres en entre et ramnent des valeurs


numriques.

Fonctions date : oprent sur des valeurs de type date et ramnent des valeurs de type
date.

Fonctions de conversion : convertissent une valeur d'un certain type dans un autre
type.

Fonctions gnrales: fonction NVL et fonction DECODE

111
Fonctions caractre
1. Fonctions de Conversion Majuscules/Minuscules

 LOWER : Convertit tous les caractres d'une chane en minuscules


 UPPER : Convertit tous les caractres d'une chane en majuscules
 INITCAP (oracle) : Convertit la premire lettre de chaque mot en
majuscule et les lettres suivantes en minuscules
 Exemple:
SELECT INITCAP (nom), LOWER(poste), UPPER (ville) FROM emp;
nom poste ville
------------------------------------------------------
Fakir president RABAT
Kadiri manager CASA
Mouradi manager CASA
...
14 rows selected.
112
Fonctions caractre
2. Fonctions de Manipulation des Caractres

Fonction description Exemple Rsultat


CONCAT Le nombre de paramtres est CONCAT('Une', 'Chane') UneChane
limit deux
SUBSTR Extrait une chane de SUBSTR('Chane',1,3) Cha
(oracle) longueur dtermine.
LENGTH Donne le nombre de LENGTH('Chane') 6
caractres d'une chane.
INSTR (oracle) Donne la position d'un INSTR('Chane', 'a') 3
caractre.
LPAD (oracle) Ajoute des caractres de LPAD(sal,10,'*') ******5000
remplissage la gauche d'une
valeur alphanumrique qui
sera ainsi cadre droite.

113
Fonctions caractre
2. Fonctions de Manipulation des Caractres
1. Exemple:
affiche le nom des employs concatn leur poste, le nombre de
caractres du nom, ainsi que la position de la lettre i dans leur nom et ce, pour
tous les employs dont le poste commence par la chane mana'.
SELECT nom , CONCAT(nom, poste ), LENGTH(nom),
INSTR(nom, i)
FROM emp
WHERE SUBSTR (poste, 1, 4) = mana;
nom CONCAT(nom, poste ) LENGTH(nom) INSTR(nom, i)
--------------------------------------------------------------------------------------------------------
kadiri kadirimanager 6 2
mouradi mouradimanager 7 1
...
10 rows selected.
114
Fonctions numriques

Fonction description Exemple Rsultat


ROUND Arrondit la valeur la ROUND(45.926, 2) 45.93
prcision spcifie ROUND(45.923,0) 46
ROUND(45.923,-1) 50
ROUND(45.923,2) 45,92
TRUNC Tronque la valeur la TRUNC(45.926, 2) 45.92
(oracle)
prcision spcifie TRUNC(45.923,2) 45.92
TRUNC(45.923) 45
TRUNC(45.923,-1) 40
MOD Ramne le reste MOD(1600, 300) 100
dune division

19/10/2011 F.ELLABBAR 115


Fonctions Date (ORACLE)
Fonction description Exemple Rsultat
MONTHS_BETWEEN Nombre de mois situs MONTHS_BETWEEN('01-SEP- 12
entre deux dates 95','01-SEP-94')

ADD_MONTHS Ajoute des mois ADD_MONTHS ('11-JAN-94',6) '11-JUL-94'


calendaires une date

LAST_DAY Dernier jour du mois LAST_DAY('01-SEP-95') '30-SEP-95'

NEXT_DAY Jour qui suit la date NEXT_DAY ('01-SEP- '08-SEP-95'


spcifie 95','FRIDAY')

ROUND Arrondit une date -ROUND('25-8-95','YEAR') 01-JAN-96


-ROUND('25-8-95','MONTH') 01-9-95

TRUNC Tronque une date TRUNC('25-JUL-95','YEAR') 01-JAN-95

116
Fonctions Date (SQL SERVER)

DATEDIFF ( datepart , startdate , enddate )


DATEADD (datepart , number , date )
DATEPART(datepart ,date) Extraction dune partie de date

Datepart:
year
month
day
week
hour
Minute

117
Fonctions de Conversion (Oracle)

19/10/2011 F.ELLABBAR 118


Utilisation de la Fonction TO_CHAR avec les Dates
(Oracle)

SELECT nom,
TO_CHAR (daten, 'fmDD Month YYYY ) daten
FROM emp;

nom daten
-----------------------------------------------------------
kadiri 1 May 1981
mouradi 17 November 198
martin 28 September 1981
...
10 rows selected.

19/10/2011 F.ELLABBAR 119


Utilisation de la Fonction TO_CHAR avec les nombres
(Oracle)

SELECT TO_CHAR (sal,'$99,999') SAL sal


------------
FROM emp $3,000
WHERE nom = 'SCOTT';

 Conversion dune chane de caractres en format numrique


TO_NUMBER(char)

 Conversion dune chane de caractres en format date


TO_DATE(char[, 'fmt'])

19/10/2011 F.ELLABBAR 120


Fonctions Date (ORACLE): les heures

1ere mthode:
Utiliser le type timestamp
2eme mthode:
SQL> CREATE TABLE test (d date );
SQL> INSERT INTO test VALUES (sysdate);
SQL> ALTER session SET nls_date_format = 'DD/MM/RRRR HH24:MI:SS';
SQL> insert into test values('11/11/2010 23:00:00');
SQL> SELECT d FROM test;
D
-------------------------
10/11/2010 22:26:55
11/11/2010 23:00:00

19/10/2011 F.ELLABBAR 121


Fonctions Date (ORACLE): les heures

3eme mthode:
SQL> insert into test values( to_date(11/11/2010 23:00:00 ', 'dd/mm/rrrr hh:mi:ss')
SQL> select to_char(d,'dd/mm/rrrr hh:mi:ss') from test;
D
-------------------------
11/11/2010 23:00:00
-------------------------------------------------------------------------------------------------------
YYYY anne
YY deux derniers chires de l'anne
WW numro de la semaine dans l'anne
MM numro du mois HH ou HH12 heure (sur 12 heures)
DDD numro du jour dans l'anne HH24 heure (sur 24 heures)
DD numro du jour dans le mois
MI minutes
D numro du jour dans la semaine (1 pour lundi, 7 pour dimanche)

122
La fonction NVL (Oracle)

 Pour transformer une valeur NULL en une valeur relle, on utilise la fonction
NVL.
 Syntaxe
NVL (expr1, expr2)
o :
expr1 : est l'expression ou la valeur source susceptible de contenir une
valeur NULL
expr2 : est la valeur de remplacement pour la valeur NULL
 Les types de donnes doivent correspondre
NVL(comm,0)
NVL(hiredate,'01-JAN-97')
NVL(job,'No Job Yet')

19/10/2011 F.ELLABBAR 123


La Fonction DECODE (Oracle)

La fonction DECODE permet de dcoder les expressions de la mme manire


que l'ordre logique IF-THEN-ELSE utilis dans de nombreux langages
Syntaxe:
DECODE (col / expression, search1, result1
[, search2, result2,...,]
[, default])
SELECT poste, sal, DECODE(job, 'ANALYST', SAL*1.1,
COMMERCIAL', SAL*1.15,
'MANAGER', SAL*1.20, SAL) AUG_SAL FROM emp;
poste SAL AUG_SAL
------------------ -------------- --------------
PRESIDENT 5000 5000
MANAGER 2850 3420
MANAGER 2450 2940
...
14 rows selected.
19/10/2011 F.ELLABBAR 124
Imbrication des Fonctions

Le niveau d'imbrication des fonctions mono-ligne est illimit. L'valuation


se fait du niveau le plus interne vers le niveau le plus externe.
Les exemples qui suivent montrent la flexibilit de ces fonctions.

19/10/2011 F.ELLABBAR 125


19/10/2011 F.ELLABBAR 126
Les Vues

Une vue est une vision partielle ou particulire


des donnes d'une ou plusieurs tables de la base.
Les utilisateurs consultent la base, ou modifier la
base travers la vue, c'est--dire manipuler les
donnes renvoyes par la vue comme si c'tait
des donnes d'une table relle.
Seule la dfinition de la vue est enregistre dans
la base, et pas les donnes de la vue. On peut
parler de table virtuelle.
19/10/2011 F.ELLABBAR 127
CREATE VIEW

La commande CREATE VIEW permet de crer une vue en spcifiant le SELECT


constituant la dfinition de la vue :
CREATE VIEW vue (col1, col2...) AS SELECT ...
Le SELECT peut contenir toutes les clauses d'un SELECT, sauf la clause ORDER
BY
Exemples
1) Une Vue ne comportant que le nom et le dpartement des employs :
CREATE VIEW EMP1 (NOM, DEPT) AS SELECT NOM, DEPT FROM EMP
Ou
CREATE VIEW EMP1 AS SELECT NOM, DEPT FROM EMP
Ou si on a besoin dune expression
CREATE VIEW EMP1 (NOM, DE) AS SELECT NOM, 2+DEPT FROM EMP

19/10/2011 F.ELLABBAR 128


CREATE/DROP VIEW

2) Vue constituant une restriction de la table EMP aux employs du dpartement 10


:

3) Vue contient le nom , le dept , la ville du dpartement et le salaire des employs

4) Vue contient le nom de lemploy et la ville du dpartement.

5) Supprimer la vue EMP2.


DROP VIEW EMP2

19/10/2011 F.ELLABBAR 129


Utilisation des vues

Lordre SELECT:
Une vue peut tre rfrence dans un SELECT de la mme faon qu'une
table.
SELECT * FROM EMP3
Lordre Update:

UPDATE EMP3 SET SAL = SAL * 1.1 correct


update emp3 set dept=12 where dept=4; incorrect
Pour quoi ?
Lordre delete:
DELETE FROM EMP3 DEPT = 4 ????

19/10/2011 F.ELLABBAR 130


Utilisation des vues

Il est possible d'effectuer des DELETE, INSERT et des UPDATE travers des vues.
Les conditions suivantes doivent tre remplies :
 Pour effectuer un DELETE:
le select qui dfinit la vue ne doit pas comporter de jointure, de group by,
de distinct, de fonction de groupe
 Pour un UPDATE:
en plus des conditions prcdentes, les colonnes modifies doivent tre
des colonnes relles de la table sous-jacente ;
 Pour un INSERT:
en plus des conditions prcdentes, toute colonne not null de la table sous-
jacente doit tre prsente dans la vue.

19/10/2011 F.ELLABBAR 131


Utilit des vues

De faon gnrale, les vues permettent de dissocier la faon dont les


utilisateurs voient les donnes, du dcoupage en tables. On spare l'aspect
externe (ce que voit un utilisateur particulier de la base) de l'aspect
conceptuel (comment a t conu l'ensemble de la base)
Une vue peut simplifier la consultation de la base en enregistrant des SELECT
complexes.
Une vue peut aussi tre utilise pour restreindre les droits d'accs
certaines colonnes et certaines lignes d'une table : un utilisateur peut ne
pas avoir accs une table mais avoir les autorisations pour utiliser une vue
qui ne contient que certaines colonnes de la table

19/10/2011 F.ELLABBAR 132


CREATE INDEX

Considrons le SELECT suivant :


SELECT * FROM EMP WHERE NOM = FILALI'
Un moyen de retrouver la ou les lignes pour lesquelles NOM est gal FILALI'
est de balayer toute la table.
Un tel moyen d'accs conduit des temps de rponse prohibitifs pour des
tables dpassant quelques milliers de lignes.
Une solution est la cration d'index, qui permettra de satisfaire aux requtes les
plus frquentes avec des temps de rponses acceptables.
Un index est form de cls auxquelles SQL peut accder trs rapidement.

19/10/2011 F.ELLABBAR 133


CREATE INDEX

Un index se cre par la commande CREATE INDEX :


CREATE [UNIQUE] INDEX nom-index ON
table (col1, col2,...)
On peut spcifier par l'option UNIQUE que chaque valeur d'index doit tre
unique dans la table.
Remarque
Deux index construits sur des tables d'un mme utilisateur ne peuvent avoir le
mme nom (mme s'ils sont lis deux tables diffrentes).
Un index peut tre cr juste aprs la cration d'une table ou sur une table
contenant dj des lignes. Il sera ensuite tenu jour automatiquement lors des
modifications de la table.
Un index peut porter sur plusieurs colonnes : la cl d'accs sera la
concatnation des diffrentes colonnes.
On peut crer plusieurs index indpendants sur une mme table.
19/10/2011 F.ELLABBAR 134
CREATE/DROP INDEX

Un index peut tre supprim par la commande DROP INDEX :


DROP INDEX nom_index [ON table]
Exemple:
 CREATE UNIQUE INDEX ind_emp ON
emp (nom, dept,sal)
 DROP INDEX ind_emp

 L'utilisateur peut avoir des informations sur les index (oracle) du


dictionnaire de donnes
 Table USER_INDEX
 Table ALL_INDEX

19/10/2011 F.ELLABBAR 135


Les Synonymes
Si une table ou une vue doit tre utilise par plusieurs utilisateurs, il peut tre
intressant de lui donner un synonyme pour que les utilisateurs ne soient pas
obligs de prfixer le nom de la table ou de la vue par le nom de son crateur.
Syntaxe:
CREATE [ PUBLIC | PRIVATE ] SYNONYM nom_synonyme
FOR objet

 Public: ils sont connus de tous les utilisateurs de la base.


 Priv: ils ne sont connus que par celui qui a cr le synonyme.
Exemple: CREATE PUBLIC SYNONYM employe FOR toto.emp

Pour chercher des synonymes dans le dictionnaire des donnes :


Select synonym_name, table_name, owner from all_synonyms
where table_owner = 'TOTO'
19/10/2011 F.ELLABBAR 136
Les Synonymes

Il est possible de supprimer un synonyme par la commande


DROP SYNONYM nom_synonyme
On peut donner un synonyme comme nom de table au select pour
l'utiliser par ailleurs dans le select principal :
select nom, sal, sal/total*100
from emp,
(select dept, sum(sal) from emp
group by dept) TOTALDEPT
where emp.dept = TOTALDEPT.dept

19/10/2011 F.ELLABBAR 137


19/10/2011 F.ELLABBAR 138
Gestion d'un Utilisateur
L'administrateur de base de donnes cre des utilisateurs en excutant
l'ordre CREATE USER:
CREATE USER user IDENTIFIED BY password;
Modifier le mot de passe :
ALTER USER user IDENTIFIED BY new password;
Supprimer un utilisateur:
DROP USER user;
Exemple:

SQL> CREATE USER scott IDENTIFIED BY tiger;


User created.
SQL> ALTER USER scott IDENTIFIED BY ntic;
User modified.
SQL> DROP USER ;
User deleted.

19/10/2011 F.ELLABBAR 139


Gestion des privilges

Deux types de privilges :

SYSTEME : permet aux utilisateurs deffectuer des


oprations particulires dans la base de donnes

OBJET : permet aux utilisateurs daccder un objet


particulier et de le manipuler

19/10/2011 F.ELLABBAR 140


Privilges Systmes

Il existe environ 80 privilges systme


Le mot-cl ANY dans les privilges signifie que les
utilisateurs possdent ce privilge dans tous les schmas

La commande GRANT ajoute un privilge un utilisateur ou


un groupe dutilisateurs

La commande REVOKE supprime les privilges

19/10/2011 F.ELLABBAR 141


Privilges Systmes: Exemples
Catgorie Exemples
TABLE CREATE TABLE
CREATE ANY TABLE
ALTER ANY TABLE
DROP ANY TABLE
VIEW CREATE VIEW.
ALTER VIEW
DROP VIEW
INDEX/ SYNONYM CREATE ANY INDEX
ALTER ANY INDEX
DROP ANY INDEX
USER CREATE USER
ALTER USER
DROP USER

19/10/2011 F.ELLABBAR 142


Attribution/ Rvocation de Privilges Systme

Attribution:
 GRANT CREATE USER, CREATE TABLE
TO user1;
 GRANT CREATE SESSION TO scott
WITH ADMIN OPTION;
Rvocation:
REVOKE CREATE TABLE FROM user1;
REVOKE CREATE SESSION FROM scott;

Remarque: Un utilisateur ayant reu un privilge avec l'option facultative


WITH GRANT OPTION peut le transmettre son tour.
19/10/2011 F.ELLABBAR 143
Privilges Objet

Les privilges qui peuvent tre donns sont les suivants :

SELECT droit de lecture


INSERT droit d'insertion de lignes
UPDATE droit de modification de lignes
UPDATE (col1, col2, ...) droit de modification de lignes
limit certaines colonnes
DELETE droit de suppression de lignes
ALL tous les droit ci-dessus

19/10/2011 F.ELLABBAR 144


Attribution de Privilges objet
Syntaxe:
GRANT privilge ON table /vue TO utilisateur
[WITH GRANT OPTION]
Exemple
1) L'utilisateur user1 peut autoriser l'utilisateur user2 lire sa table EMP :
GRANT select ON emp TO user2
2) Dans un mme ordre GRANT, on peut accorder plusieurs privilges
plusieurs utilisateurs :
GRANT select, update ON emp TO user1, user2.
Remarque: Les droits peuvent tre accords tous les utilisateurs en utilisant
le mot rserv PUBLIC la place d'un nom d'utilisateur :
GRANT select ON emp TO PUBLIC

19/10/2011 F.ELLABBAR 145


Rvocation de Privilges objet
Un utilisateur ayant accord un privilge peut le reprendre
l'aide de l'ordre REVOKE :

REVOKE privilge ON table /vue FROM utilisateur

Changement de mot de passe


Tout utilisateur peut modifier son mot de passe par l'ordre
GRANT CONNECT :

GRANT CONNECT TO utilisateur IDENTIFIED BY mot-de-


passe

19/10/2011 F.ELLABBAR 146


Gestion des rles

19/10/2011 F.ELLABBAR 147


Gestion des rles
Qu'est-ce qu'un Rle ?
Un rle est un groupe nomm de privilges connexes qui peut tre accord
un utilisateur.
Cette mthode facilite l'octroi et le retrait des privilges.
Un utilisateur peut avoir accs plusieurs rles, et le mme rle peut tre
attribu plusieurs utilisateurs.
CREATE ROLE manager
GRANT create table, create view TO manager;
GRANT manager TO user1, ..., userN;
REVOKE manager FROM user2;
DROP ROLE manager
GRANT connect, resource TO user1;
19/10/2011 F.ELLABBAR 148
Utilisation du dictionnaire de donnes
Il est vital pour toute base de donnes Oracle.
Il dcrit la base de donnes et ses objets.
Il contient des tables et des vues en lecture seule.
Il est stock dans le tablespace SYSTEM.
Le propritaire est l'utilisateur SYS.
Sa mise jour est effectue par le serveur Oracle.
Il est accessible avec le privilge SELECT.
Le dictionnaire de donnes fournit des informations sur :
la structure logique et la structure physique de la base de donnes,
les dfinitions d'objets (schma) et l'espace allou aux objets,
les contraintes d'intgrit,
les utilisateurs,
les rles,
les privilges,
la fonction d'audit.
19/10/2011 F.ELLABBAR 149
Catgories de vues du dictionnaire de donnes

Trois principaux ensembles de vues statiques


Se distinguent par leur porte :
DBA : contenu de tous les schmas (objets)
ALL : lments auxquels l'utilisateur courant a accs
USER : contenu du schma de l'utilisateur courant
Exemples
SELECT owner, object_name, object_type FROM dba_objects;
SELECT owner, object_name, object_type FROM all_objects;
SELECT owner, object_name, object_type FROM users_objects;
SELECT * FROM dictionary;
SELECT * FROM dictionary WHERE table_name LIKE dba_%
DESCRIBE dba_users;
SELECT * FROM dba_users;

19/10/2011 F.ELLABBAR 150


Merci pour votre attention

19/10/2011 F.ELLABBAR 151

Anda mungkin juga menyukai