Vous êtes sur la page 1sur 334

Systme de gestion de base

de donnes

Plan
Introduction aux bases de donnes
Algbre relationnel
Langage SQL

Plusieurs tapes sont ncessaires la mise en


place d'une base de donnes, ds lors que l'on a
prcisment dfini ses besoins:
la cration de la structure de la base sous
forme de tables (tableaux de donnes) relies
entre elles par des donnes cls,
la conception des requtes qui permettront
d'extraire ou de mettre jour les informations
qu'elle contient,
la conception de l'interface homme-machine
(crans et tats) qui rendra plus conviviale la
saisie et la restitution des informations.

Une bonne matrise de l'algbre


relationnelle permet de concevoir
n'importe quelle requte aussi complexe
soit elle avant de la mettre en uvre
l'aide du langage QBE ou SQL.

Cycle de vie dune base de


donnes

SGBD(dfinition)
Dfinition 1 : Une Base de donnes (BD)
est une collections de donnes
structures et cohrentes.
Dfinition 2 : Un Systme de Gestion de
Bases de Donnes (SGBD) est un logiciel
permettant de manipuler les donnes
dune BD.

Objectifs des SGBD


Faciliter la manipulation de donnes.
Faciliter ladministration des donnes: Un SGBD
doit fournir les outils facilitant les taches
dadministration de la BD.
Efficacit daccs:Accs rapide, bons temps de
rponse
Contrle de la redondance: Diminution du volume
de stockage.
Partage de donnes:Plusieurs utilisateurs
simultans.
Scurit des donns:Gestion des droits daccs.

Modle de donnes
Premires gnration :
modle hirarchique et rseau.
Modle relationnel: SGBD relationnel
(Oracle, SQL Server, DB2, MySQL,Access)
Modle objet: SGBD OO
Modle relationnel-objet: intgrer les
concepts de OO au modle relationnel
(SGBD RO)

SGBD hirarchique

Caractristiques

Accs vertical (haut vers bas et bas vers haut)


Les chemins hirarchiques sont implments par
des pointeurs

Problmes
Redondance des donnes : une modification du
solde dun seul compte ncessite plusieurs mises
jour
Coteux en espace mmoire
Accs aux informations parfois difficiles et/ou
coteuses : clients possdant un compte donn

SGBD rseau
Compos denregistrements et de liens
Saku

Koivu

Hanna

Koivu

Pierre

Delisle

23150 8 450 000

24140

175

SGBD rseau
Implmentation avec des pointeurs
Avantages
Redondance limine, moins despace mmoire
Manipulations plus faciles

Inconvnients
Accs squentiel, donc lent
Difficile programmer et maintenir

Les SGBD hirarchiques et rseaux sont


aujourdhui considrs comme obsoltes

SGBD relationnel (SGBDR)


Pas de pointeurs
Une table est compose de
Colonnes
Analogue un champ dun enregistrement dans un fichier
de donnes
Portent un nom unique lintrieur dune table
Peuvent faire partie de plusieurs tables (pour les lier)

Ranges
Analogue un enregistrement dans un fichier de donnes
Identifies par une cl unique (cl primaire) compose
dune ou plusieurs colonnes

Modle relationnel: dfinition et


vocabulaire
Modle fond sur la thorie mathmatique des
ensembles.
Le modle de donnes le plus utilis
Modle simple : une seule structure : la relation
Une relation dfini une table; une BD est une
collection de tables
le modle relationnel est un modle d'organisation
des donnes sous forme de Tables (Tableaux de
valeurs) ou chaque Table reprsente une Relation,
au sens mathmatique d'Ensemble.

Modle relationnel: dfinition et


vocabulaire
Une relation est un ensemble dattributs : A1, A2,..,
An
Exemple: la relation FILM est lensemble des attributs
(idFilm, titre, anne, genre,codePays)

Chaque attribut Aj prend ses valeurs dans un


domaine Dj
Ex. Domaine de genre est lensemble {Science Fiction,
Suspense, Drame}
Un domaine peut tre un type lmentaire comme
lensemble des entiers, des chanes de caractres
On peut ajouter des contraintes sur le domaine (ex.
age >=0)

Modle relationnel: dfinition et


vocabulaire
Un tuple est un ensemble de valeurs T
=<V1, V2,..Vn> o Vi appartient Di ou Vi est
la valeur nulle (NULL).
Cl primaire dune relation : est le plus petit
sous ensemble des attributs qui permet
didentifier chaque tuple de manire unique.
Cl trangre : Attribut qui est la cl
primaire dune autre relation

Modle relationnel: dfinition et


vocabulaire
Un schma dune relation est sa
description : un nom suivi de la liste des
attributs, chaque attribut tant associ
son domaine.
Notation : R (A1 : D1, A2 : D2,..An:Dn)
Le schma dune base de donnes et
lensemble de schmas des relations de
cette BD.

Modle relationnel: dfinition et


vocabulaire

Algbre relationnelle
Un langage manipulant les relations.
Il propose un ensemble doprateurs qui
sappliquent aux relations et dont le rsultat est une
relation.
Oprateurs ensemblistes: union, diffrence, produit,
cartsien
Oprateurs spcifiques : projection, restriction, jointure

Il permet dexprimer des requtes sur une base de


donnes relationnelle.
Matrise de l'algbre relationnelle : essentiel pour
comprhension SQL et SGBDR.

Requte
Une requte est destine obtenir des informations
prcises et ordonnes sur la base de donnes.
On peut galement par le biais des requtes:

effectuer des calculs,


obtenir des statistiques,
modifier les tables,
crer de nouvelles tables
grer des utilisateurs

Principe d'criture d'une requte:


La plupart des requtes (ou interrogations) portant sur
une base de donnes relationnelle ne peuvent pas tre
ralises partir d'une seule opration mais en
enchanant successivement plusieurs oprations

Oprateurs ensemblistes
Union
Opration portant sur deux relations de mme schma
RELATION1, et RELATION2 consistant construire une
relation de mme schma RELATION3 ayant pour tuples
ceux appartenant RELATION1 ou RELATION2 ou aux
deux relations
L'union est une opration commutative.
Notations : R1 R2, UNION(R1, R2)

Oprateurs ensemblistes: Union

Oprateurs ensemblistes:
Intersection
Lintersection consiste combiner deux
relations (compatibles) pour crer une
troisime relation qui contient toutes les
occurrences appartenant lune et
lautre des relations de dpart.
Notation :
R3 = R1 R2 Ou
R3 = INTERSECTION (R1, R2)

Oprateurs ensemblistes:
Intersection

Oprateurs ensemblistes:
Diffrence
Diffrence
Opration portant sur deux relations de mme schma
RELATION1, et RELATION2 consistant construire une
relation de mme schma RELATION3 ayant pour tuples
ceux appartenant RELATION1 et nappartenant pas
RELATION2
Notation : R3 = R1 - R2 Ou
R3 = DIFFERENCE (R1, R2)

Oprateurs ensemblistes:
Diffrence

Oprateurs ensemblistes: Produit


cartsien
Def.: Le produit cartsien entre les relations R1 et
R2 de schmas quelconques, consiste
construire une relation R3 qui a pour schma la
concatnation de ceux de R1 et R2, et donc pour
extension l'ensemble de toutes les combinaisons
possibles entre les tuples de R1 et ceux de R2.
Le produit cartsien de deux relations est une
opration commutative (si pas d'ordre sur les
colonnes).
Opration trs courante
Notations :

Oprateurs ensemblistes: Produit


cartsien
Produit cartsien: exemple 1

Oprateurs ensemblistes: Produit


cartsien
Produit cartsien: exemple 2

Oprateurs de base:Projection
projection : Permet de ne retenir que quelques
attributs d'une relation
Def.: Soit la relation R1(a1, , an). La projection
de la relation R1 sur les attributs (a1, , am),
m<n, consiste laborer une relation R2, qui aura
pour schma le mme que celui de R1 sauf les
attributs (am+1, , an). Ainsi, la relation R2 en
rsultat aura la mme extension que celle de R1,
mais ses tuples auront des attributs en moins.
Notations : (a1, , am)(R1), (R1)[ a1, , am],
PROJECT(R1 , a1, , am)

Oprateurs de base:Projection
Projection : exemple

Oprateurs de base:Projection
Remarque: La projection ne porte que sur
1 relation. Il permet de ne retenir que
certains attributs spcifis d'une relation.
On obtient tous les n-uplets de la relation
l'exception des doublons.

Oprateurs de base: Restriction ou


selection
Restriction: Opration sur une relation
RELATION1 produisant une relation
RELATION2 de mme schma, mais
comportant les seuls tuples qui vrifient la
condition prcise en argument.
Notations : critre(R1), (R1)[critre],
RESTRICT(R1, critre), R : critre
Avec Critre de restriction : <attribut>
<comparaison> <valeur>

Oprateurs de base: Restriction ou


selection
Restriction: exemple 1

Oprateurs de base: Restriction ou


slection
Restriction:

exemple 2

Oprateurs de base: Restriction ou


slection
Selection: exemple 3

Donner les rsultats de :


- LesEmployes : (nom = Marie ) ;
- LesEmployes : (nom = Marie ou
(adresse = St-Egrve et salaire < 3000)) ;
- (LesEmployes : (nom = Marie ou
(non adresse = St-Egrve et salaire < 3000)))[nom] ;

Oprateurs de base: Restriction ou


slection
Cet oprateur porte sur 1 relation. Il
permet de ne retenir que les n-uplets
rpondant une condition exprime
l'aide des oprateurs arithmtiques ( =, >,
<, >=, <=, <>) ou logiques de base (ET,
OU, NON). Tous les attributs de la relation
sont conservs.

Jointure
Dfinition 1 : la jointure des deux relations R1 et R2
sous une condition est une relation ayant comme
schma lunion des schmas et contenant comme
tuples toutes les combinaisons des tuples de R1 et
R2 satisfaisant cette condition.
Notation : R3 = R1
R2 (Expression conditionnelle),
R3 = JOINTURE R1.R2 (Expression conditionnelle),
R3=R1 (Expression conditionnelle) * R2
Avec R1 et R2 sont deux relations, entre parenthses
figure le critre de jointure

Jointure : dfinition
Oprandes :
une relation R de schma X ;
une relation S de schma Y ;
une condition P

Notation : R (P) * S
Rsultat : relation T dont le schma est la
concatnation de X et de Y ; et contenant
tous les couples d'lments de R et S tels
que P est vraie

Jointure:dfinition
Opration majeure : Thoriquement, la jointure
de deux relations est un produit cartsien entre
ces deux relations,suivi de l'limination de
certains tuples ne satisfaisant pas un critre de
comparaison entre deux colonnes du rsultat du
produit cartsien.
C'est le seul oprateur exploitant les attributs
rfrentiels inter-relations.
Pas vraiment une opration de base : peut tre
dfinie partir du produit cartsien et d'une
restriction: R (P) * S = (R x S) : P
Grande importance

Jointure: exemple
Jointure: exemple 1

Jointure: exemple
Jointure: exemple1(suite)

Jointure : exemple
La jointure = mise en correspondance
de 2 tables selon un critre.

Jointure : type
Plusieurs types de Jointures existent :
Equijointure (ou jointure naturelle),
Jointure externe gauche ou droite
Equijointure : le pivot utilise loprateur =
(jointure naturelle)
Thtajointure : le pivot utilise les
oprateurs <, <=, >, >=, != ou <>

Jointure: Jointure naturelle


La jointure A JOIN B de deux tables

A (X, Y) et B (Z, Y)
est la table C avec les attributs : C (X, Y, Z)
et les tuples (X:x, Y:y, Z:z ) tels que (x, y) est dans
A et (y, z) est dans B

Jointure naturelle : jointure entre 2


relations avec critre d'galit (equijointure) entre 2 attributs de mme noms
et fusion des colonnes de mme nom(s).

Jointure naturelle: exemple

Jointure naturelle: exemple


Client(numro, nom, adresse,
tlphone)
Vente(numro, ref_produit, no_client,
date)
Produit(rfrence, marque, prix)

Jointure naturelle: exemple


Afficher le nom des clients avec les dates
de leurs achats

Exercices
Afficher, pour le client numro 125, le
numro de vente et la marque des
produits achets
Solution:

Phi (ou thta) Jointure

Semi - Jointure
Dfinition : la semi-jointure des deux
relations R1 et R2 est une relation ayant le
schma de la relation R1 et contenant
toutes les tuples participant la jointure.
quivalent une jointure interne suivie par
une projection sur les attributs de la
relation R1.
Notation:

Jointure externe(Outer Join)


Quelque fois il est utile de conserver dans le
jointure les tuples des deux relations qui ne
peuvent pas tre fusionns.
Exemple: donner la liste des employs avec leurs
dpartements et les responsable, sil y a un
responsable
Le outer join tend par des valeurs NULL les tuples
qui seraient enlevs par un join
Le outer join existe dans trois formes:
left (gauche), right (droite) , full (complte)

Jointure externe(Outer Join)

Jointure externe (full) outer join

Dfinition : la jointure externe des deux


relations R1 et R2 sous une condition est
une relation ayant comme schma lunion
des schmas et contenant comme tuples
les tuples produites par une jointure
interne et les tuples des relations R1 et R2
avec des valeurs NULL pour les attributs
de lautre relation

Jointure externe: externe

Jointures externes gauche et


droite: left join / right join
Dfinition : la jointure externe gauche des deux
relations R1 et
R2 sous une condition est une relation ayant
comme schma lunion des schmas et contenant
comme tuples les tuples produites par une jointure
interne et les tuples de la relation R1 avec des
valeurs NULL pour les attributs de la relation R2
Notation :LEFT-JOIN (R1, R2, CONDITION)
Dfinition de la jointure externe droite de faon
similaire

Jointure externe gauche :


exemple

Division: dfinition
Dfinition 1 : la division de la relation R1
par la relation R2 est la relation
contenant des tuples qui,concatns
tout tuple de R2, font partie des tuples de
R1
Condition :
Schma(R1) =Schma(DIVISION(R1,R2))
+ Schma(R2)

Division: dfinition
Oprandes :
une relation R de schma X ;
une relation S de schma Y inclus dans X

Notation : R / S ou DIVISION(R1,R2)
Rsultat : relation T de schma X - Y ne
contenant que les n-uplets (v1, v2, ..., vn) tels
que pour chaque n-uplet (w1, w2, ..., wn) de S,
R contient le n-uplet (v1, v2, ..., vn, w1, w2, ...,
wn)

Division: Exemple

Division: Exemple

Division : utilisation
Soient les tables suivantes:
LesEtudiants(NoEt, nom, prenom, ville)
LesInscriptions(NoEt, matiere)
LesRsultats(NoEt, matiere, dateEpreuve, note)

Requtes
Quels sont les lves inscrits dans toutes les
matires ?
Quels sont les lves ayant une note chacune
des preuves ?

Exercice 1
Requtes
Numros, noms et prnoms des tudiants qui ne
sont pas inscrits en gographie ?
Numros des tudiants ayant obtenu la meilleure
note lpreuve de gographie du 01/04 ?

Correction

Exercice 2:
Exprimer les requtes suivantes :
Numro, nom et prnom des tudiants inscrits en
gographie ?
Ensemble des couples (x, y) dtudiants tels quil existe
au
moins une preuve laquelle x a obtenu une meilleure
note que y ?

Correction

fonctions
Les fonctions permettent de se servir
dexpressions arithmtiques pour affiner les
restrictions, les jointures et les projections.
Exemple:
R1 = RESTRICT (Employes, Salaire/echelon >1000)
R1 = JOIN (Employes, Echelon, (Salaire-1000)/200
=echelon)
R1 = PROJECT (Film, Titre, 2004-Annee);

Agrgations: dfinition
Les agrgations permettent de combiner
les attributs de plusieurs tuples afin
dobtenir un seul rsultat final agrg, ou
plusieurs rsultats groups.

Agrgations:exemple

Langages algbriques et
expressions
drives

Un langage algbrique peut tre driv de


l'algbre relationnel pour interroger les
bases de donnes
Une requte se reprsente par un arbre
d'opration.
Cet arbre peut tre traduit en SQL, donc
un langage oprationnel.

Expressions algbriques :
exemples
Considrons la base constitue des relations:
Film(numfilm, titre, ralisateur, anne, dure)
Acteur(numacteur, nom, prnom, dateNaissance)
Casting(numfilm, numacteur, personnage)

Quel sont les films (titre, ralisateur) qui


durent plus de deux heures ?
Solution:
R1 = RESTRICT(Film, duree >= 120 )
RESULTAT = PROJECT(R1, titre, ralisateur)

Expressions algbriques :
exemples

Quels sont les acteurs (nom, prnom) n en 1952 ?


Solution
1.R1 = RESTRICT(Acteur, YEAR(dateNaissance) =
TO_DATE('1952', 'YYYY'))
2.RESULTAT = PROJECT(R1, nom, prnom)

Quels sont les acteurs ayant jou dans Astrix ?


Solution :
1.R1 = JOIN(Acteur, Casting) (ou explicitement: R1 =
JOIN(Acteur, Casting, Acteur.numacteur =
Casting.numacteur) )
2.R2 = RESTRICT(R1, personnage='Astrix')
3.RESULTAT = PROJECT(R2, nom, prnom)

Expressions algbriques :
exemples

Quels sont les acteurs (nom, prnom et


mois de naissance) ns la mme
anne ?
Solution:
1.R1 = JOIN(Acteur A1, Acteur A2,
YEAR(A1.dateNaissance) =
YEAR(A2.dateNaissance))
2.RESULTAT = PROJECT(R1, A1.nom, A1.prnom,
A2.nom, A2.prnom, MONTH(A1.dateNaissance))

Expressions algbriques :
exemples

Expressions algbriques :
exemples

SQL: Prsentation(Structured
Query Language)

Le langage SQL
Langage standard - 4me gnration (SQL89,
SQL2, SQL3)
3 langages pour BdD relationnelles
Langage de Description de Donnes (LDD)
Cration de tables,
Langage de Manipulation de Donnes (LMD)
Interrogation/Modification de la BdD
Langage de Contrle de donnes (LCD)
Gestion des droits daccs

SQL est un langage utilisable


en mode interactif
associ une interface graphique
associ des langages de programmation

Plan de la prsentation
Langage de Description de Donnes
Instructions CREATE, DROP, ALTER TABLE

Langage de Manipulation de Donnes


Instructions SELECT, INSERT, DELETE,
UPDATE

SQL sous oracle

Introduction SQL
Dfinition des donnes

Ecriture des Ordres SQL


Les ordres SQL peuvent tre crits
indiffremment en majuscules et/ou
minuscules.
Les ordres SQL peuvent tre crits sur
plusieurs lignes.
Les mots-cls ne doivent pas tre abrgs ni
scinds sur deux lignes diffrentes.
Les clauses sont gnralement places sur
des lignes distinctes.
Les tabulations et indentations permettent une
meilleure lisibilit.

Cration de table
Une table (relation en algbre relationnelle) se
cr par linstruction CREATE TABLE
CREATE TABLE nom_table
(nom_col1 type_col1 [contrainte1]
[, nom_col2 type_col2 [contrainte2]]);

Types classiques de donnes

Particularit des SGBD : le cas


dOracle

Types de donnes: exemple


Salaire NUMBER(8,2): Dfinit une colonne
numrique SALAIRE, les valeurs auront
au maximum 2 dcimales et 8 chiffres au
plus au total( donc 6 chiffre avant le point
dcimal)

Contraintes sur les colonnes


DEFAULT value: Value est la valeur par dfaut si aucune
valeur nest donne un enregistrement
PRIMARY KEY: Cl primaire de la table. Pour dsigner
plus dune colonne, on lutilise comme une clause
PRIMARY KEY(col1, col2, ) ct des dfinitions de
colonnes
NOT NULL: Doit avoir une valeur pour chaque
enregistrement
UNIQUE: Chaque enregistrement doit avoir une valeur
diffrente
CHECK condition: La valeur doit respecter une condition
donne
REFERENCES et FOREIGN KEY: permettent de dfinir
des contraintes d'intgrit rfrentielle deux formes
syntaxiques

Exemple de cration de table


CREATE TABLE article
( ref CHAR(10) NOT NULL,
prix NUMBER(9,2),
datemaj DATE);

Exemple de cration de table

Exemple1
CREATE TABLE Client
(num_client NUMBER(5) PRIMARY KEY,
nom VARCHAR(30) NOT NULL,
solde NUMBER,
type VARCHAR(10) CHECK (type IN (particulier,
pme,autre));

cration de table: PRIMARY KEY


Deux formes:
dans la dfinition d'un attribut, s'il forme une cl tout seul
comme contrainte spar, si non

Exemple1
CREATE TABLE Employee (
Maricule CHAR(6) PRIMARY KEY,
Prenom CHAR(20) NOT NULL,
Nom CHAR(20) NOT NULL,.....)

Exemple2
CREATE TABLE Employee (
Matricule CHAR(6)
Prenom CHAR(20) NOT NULL,
Nom CHAR(20) NOT NULL,
......
PRIMARY KEY(Matricule)
)

Cration de table: PRIMARY KEY


Exemple
CREATE TABLE Employee (
Matricule CHAR(6)
Prenom CHAR(20) NOT NULL,
Nom CHAR(20) NOT NULL,
......
Constraint PK_Employee PRIMARY KEY(Matricule)
)
Remarque: chaque contrainte doit tre nomme (ce qui
permettra de la dsign par un ordre SQL ALTER en la
faisant prcder par Constraint nom_contrainte contrainte

Primary Key avec plusieurs


attributs
WORK_ON(PCODE, NSS, DateDeb)
Exemple 1
create table WORK_ON(
PCODE int,
NSS char(6),
DateDep date,
primary key (PCODE, NSS))

Exemple 2
create table WORK_ON(
PCODE int,
NSS char(6),
DateDep date,
constraint WORK_ON_PK primary key (PCODE, NSS)
)

Contraintes Inter-relationnels
REFERENCES et FOREIGN KEY:
permettent de dfinir des contraintes
d'intgrit rfrentielle deux formes
syntaxiques:
pour attributs seuls
pour plusieurs attributs

Contraintes Inter-relationnels

Remarque: loption ON DELETE CASCADE indique


que la suppression dune ligne de la table tableref va
entraner automatiquement la suppression des
lignes qui la rfrencent dans la table

cration de table: Foreign Key


Exemple
create table Department(
DeptName char(15) primary key,
Site char(2),
)
create table Employee
(Matricule char(6) primary key,
FamName char(20) not null,
FirstName char(20) not null,
Dept char(15) references Department(DeptName),
Salary numeric(9) default 0,
unique(FamName,FirstName)
)

Remarque:Il faut que les types des attributs rfrencs soient


les mmes!

Cration de table: Foreign Key


create table Employee
(Matricule char(6) primary key,
FamName char(20) not null,
FirstName char(20) not null,
Dept char(15),
Office numeric(3),
Salary numeric(9) default 0,
unique(FamName,FirstName)
Foreign Key(Dept) references Department(DeptName)
)

Cration de table: Foreign Key


create table Employee
(Matricule char(6) primary key,
FamName char(20) not null,
FirstName char(20) not null,
Dept char(15),
Office numeric(3),
Salary numeric(9) default 0,
unique(FamName,FirstName)
Constraint FK_EmployeeDept
Foreign Key(Dept) references Department(DeptName)
)

Exemple de contraintes

Contraintes sur des colonnes

Contraintes au niveau de la table

Exemple de contraintes
Certaines contraintes portent sur plusieurs
colonnes et ne peuvent etre indiques que
comme contraintes de table

Gestion des cls trangres

Gestion des cls trangres

Gestion des cls trangres

Gestion des cls trangres

Gestion des cls trangres

Gestion des cls trangres

Gestion des cls trangres

Gestion des cls trangres

Gestion des cls trangres

Gestion des cls trangres

Gestion des cls trangres

Gestion des cls trangres

Gestion des cls trangres

Quelques remarques

Quelques remarques

Suppression & renommage


dune table
Une table se supprime par linstruction
DROP TABLE
DROP TABLE nom_table;
Remarque: la suppression est autorise seulement si la table n'est
pas reference

Une table se renomme par linstruction RENAME


TABLE
RENAME TABLE ancien_nom TO nouveau_nom;

Suppression & renommage


dune table

DROP TABLE
DROP TABLE nom_de_table
DROP TABLE employee
la suppression est autorise seulement si
la
table n'est pas reference

Modification dune table


Le contenu dune table peut tre modifi
par linstruction
ALTER
TABLE
ALTER TABLE
nom_table
modification1,
modification 2;

Les modifications portent sur des ajouts,


suppression ou remplacement de colonnes avec
pour syntaxe :
ADD (nom_col type_col [contrainte])
DROP nom_col
MODIFY nom_col type_col [contrainte]

Modification dune table


ADD dfinition_de_colonne
ADD CONSTRAINT contrainte_de_table
DROP COLUMN nom_de_colonne
DROP CONSTRAINT nom_de_contrainte

Exemple de modification de
table
Exemple 1

ALTER TABLE Client


ADD (prenom VARCHAR(30)),
MODIFY nom VARCHAR(50) NOT NULL,
DROP solde,
ADD (naissance DATE);

ALTER TABLE employee


ADD Address char(20) default null

ALTER TABLE Department


ADD supervisor char(6) default null

ALTER TABLE Departement


ADD constraint FKey_EMP_SUP foreign key(supervisor) references
EMPLOYEE(NSS)

Modification dune table


Drop, exemples:
ALTER TABLE employee
DROP column address
ALTER TABLE employee
DROP constraint FKey_EMP_SUP

Vues ORACLE
Lister l'ensemble des tables cres :
select table_name from user_tables;

Lister les colonnes d'une table :


select column_name from
user_tab_columns;

Lister les contraintes :


select constraint_name from
user_constraints;

Commande SQL+ : desc


desc personne

SQL : commandes
Suppression d'une table :
DROP TABLE [IF EXISTS] nom_table [, nom_table ] ...
Modification d'une table :
ALTER TABLE nom_table ADD/MODIFY/CHANGE/DROP nom_champ
Exemple :
ALTER
ALTER
ALTER
ALTER

TABLE
TABLE
TABLE
TABLE

client
client
client
client

ADD email VARCHAR(30)


MODIFY email VARCHAR(50)
CHANGE email courriel VARCHAR(50)
DROP courriel

Introduction SQL
Manipulation des donnes

INSERT: Insertion de lignes dans une


table
UPDATE: Modification de lignes dans une
table
DELETE: Suppression de lignes dans
une table
Select: slection des informations

Modification des donnes

Insertion denregistrement
Un enregistrement (tuple en algbre relationnelle)
sinsre dans une table par linstruction INSERT INTO
INSERT INTO nom_table[(nom_col1, nom_col2, )]
VALUES (val1, val2, )
[(val3, val4, )];

Exemple :
INSERT INTO Client
VALUES (1, Durand , 0, particulier ),
(2, Martin , 50, pme );

Insertion utilisant une slection


Une requte imbrique peut-tre utilise
pour raliser des insertions.
Par exemple, pour insrer dans la table 2A
tous les lves de la table 1A dont lattribut
note est suprieur 10, on peut crire :
INSERT INTO 2A SELECT * FROM 1A
WHERE note > 10;
Les instructions UPDATE et DELETE peuvent aussi utiliser
une requte imbrique

Cration utilisant une slection


Une requte imbrique peut-tre utilise
pour crer et remplir une table.
Par exemple, pour une table 2A
comprenant les colonnes nom et prenom
et remplie avec tous les noms et
prenoms des enregistrements dune
rable 1A, on peut crire :
CREATE TABLE 2A AS SELECT nom,
prenom FROM 1A;

Modification de lignes : UPDATE

UPDATE permet de modifier les valeurs dune ou plusieurs colonnes


dans une ou plusieurs lignes dj existantes
Les nouvelles valeurs peuvent tre nonces par lutilisateur ou
provenir dun ou plusieurs SELECT
UPDATE nom_table
SET nom_col1 = {expression1 | ( SELECT ...) },
nom_col2 = {expression2 | ( SELECT ...) }
WHERE predicat

Ex : augmenter de 10% les salaires des ingnieurs.


UPDATE emp
SET salaire = salaire * 1.1
WHERE fonction = ingenieur ;

Remarque: Sans clause WHERE : toutes les lignes sont


mises jour

Suppression de lignes : DELETE


DELETE permet de supprimer une ou plusieurs lignes
dune table.
DELETE FROM nom_table
WHERE predicat ;

Exemple: dtruit les lignes des employs travaillant Paris.


DELETE
FROM emp
WHERE emp.deptno = (SELECT dept.deptno
FROM dept
WHERE lieu=Paris');

Sans clause WHERE : toutes les lignes sont supprimes

Les Possibilits de l'Ordre SQL


SELECT
Slection

Projection

Table 1

Table 1

Jointure

Table 1

Table 2

Requte SELECT
Une requte dinterrogation de la BdD
scrit laide de linstruction SELECT

SELECT [DISTINCT] table1.attr1 [, table2.attr2] | expr


FROM table1 [, table2]
[WHERE condition]
[ORDER BY expr [DESC]]
[GROUP BY expr]
[HAVING expr]

Ordre SELECT Elmentaire


SELECT
SELECT
FROM
FROM

[DISTINCT]
[DISTINCT] {*,
{*, column
column [alias],...}
[alias],...}
table;
table;

SELECT indique quelles colonnes


rapporter
FROM indique dans quelle table
rechercher

Slection de Toutes les


Colonnes
SQL> SELECT *
2 FROM
dept;
DEPTNO
--------10
20
30
40

DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS

LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON

Projection
La commande SELECT:
SELECT [ALL|DISTINCT] <liste de
projection> FROM <liste de tables>
Exemple. Projection partir de la table
client
SELECT nom, prenom FROM client;

Slection dUne ou Plusieurs


Colonnes Spcifiques
SQL> SELECT deptno, loc
2 FROM
dept;
DEPTNO
--------10
20
30
40

LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON

Projection d'une table et la clause DISTINCT


Produire les noClient et dateCommande de toutes les
Commandes
SELECT
noClient, dateCommande
FROM

Commande

noClient
10
20
10
10
30
20
40
40

SELECT
FROM

dateCommande
01/ 06/ 2000
02/ 06/ 2000
02/ 06/ 2000
05/ 07/ 2000
09/ 07/ 2000
09/ 07/ 2000
15/ 07/ 2000
15/ 07/ 2000

Multi-ensemble !

ALL noClient, dateCommande


Commande

Clause DISTINCT
Produire les noClient et dateCommande de toutes les
SELECT
DISTINCT noClient, dateCommande
Commandes
FROM
Commande
noClient
10
20
10
10
30
20
40

08/10/15

dateCommande
01/ 06/ 2000
02/ 06/ 2000
02/ 06/ 2000
05/ 07/ 2000
09/ 07/ 2000
09/ 07/ 2000
15/ 07/ 2000

noClient, dateCommande
(Commande)

135

Expressions Arithmtiques
Possibilit de crer des expressions
avec des donnes de type NUMBER et
DATE au moyen doprateurs
arithmtiques
Oprateur Description
+

Addition

Soustraction

Multiplication

Division

Utilisation des Oprateurs


Arithmtiques
SQL> SELECT ename, sal, sal+300
2 FROM
emp;
ENAME
SAL
SAL+300
---------- --------- --------KING
5000
5300
BLAKE
2850
3150
CLARK
2450
2750
JONES
2975
3275
MARTIN
1250
1550
ALLEN
1600
1900
...
14 rows selected.

Priorit des Oprateurs


* / +

La multiplication et la division ont


priorit sur laddition et la
soustraction.
A niveau de priorit identique, les
oprateurs sont valus de gauche
droite.
Les parenthses forcent la priorit
dvaluation et permettent de clarifier
les ordres.

Priorit des Oprateurs


SQL> SELECT ename, sal, 12*sal+100
2 FROM
emp;
ENAME
SAL 12*SAL+100
---------- --------- ---------KING
5000
60100
BLAKE
2850
34300
CLARK
2450
29500
JONES
2975
35800
MARTIN
1250
15100
ALLEN
1600
19300
...
14 rows selected.

Utilisation des Parenthses


SQL> SELECT ename, sal, 12*(sal+100)
2 FROM
emp;
ENAME
SAL 12*(SAL+100)
---------- --------- ----------KING
5000
61200
BLAKE
2850
35400
CLARK
2450
30600
JONES
2975
36900
MARTIN
1250
16200
...
14 rows selected.

La Valeur NULL

NULL reprsente une valeur non


disponible, non affecte, inconnue ou
inapplicable.
La valeur NULL est diffrente du zro ou
de lespace.
SQL> SELECT
2 FROM

ename, job, comm


emp;

ENAME
JOB
COMM
---------- --------- --------KING
PRESIDENT
BLAKE
MANAGER
...
TURNER
SALESMAN
0
...
14 rows selected.

Valeurs NULL dans les Expressions


Arithmtiques
Les expressions arithmtiques
comportant une valeur NULL sont
values NULL

SQL> select ename , 12*sal+comm


2 from
emp
3 WHERE ename='KING';

ENAME
12*SAL+COMM
---------- ----------KING

LAlias de Colonne
Renomme un en-tte de colonne
Est utile dans les calculs
Suit immdiatement le nom de la
colonne ; le mot-cl AS plac entre le
nom et lalias est optionnel
Doit obligatoirement tre inclus entre
guillemets sil contient des espaces, des
caractres spciaux ou si les
majuscules/minuscules doivent tre
diffrencies

Utilisation des Alias de


Colonnes
SQL> SELECT ename AS name, sal salary
2

FROM

emp;

NAME
SALARY
------------- --------...
SQL> SELECT ename "Name",
2
sal*12 "Annual Salary"
3 FROM
emp;
Name
Annual Salary
------------- ------------...

Slectionner les Lignes


EMP
EMPNO ENAME
7839
7698
7782
7566
...

KING
BLAKE
CLARK
JONES

JOB

...

DEPTNO

PRESIDENT
MANAGER
MANAGER
MANAGER

10
30
10
20

rechercher tous
les employs du
dpartement 10

EMP
EMPNO ENAME

JOB

7839 KING
PRESIDENT
7782 CLARK MANAGER
7934 MILLER CLERK

...

DEPTNO
10
10
10

Slection sur une table (WHERE)


Slectionner les Articles dont le prix est infrieur
$20.00 et le numro est suprieur 30
SELECT
FROM
WHERE

*
Article
prixUnitaire < 20 AND noArticle > 30

noArticle
60
70
95

08/10/15

description
Erable argent
Herbe puce
Gnvrier

prixUnitaire
15.99
10.99
15.99

prixUnitaire < 20.00 ET noArticle > 30


(Article)

146

Slection
La clause WHERE

Syntaxe de conditionSQL
{conditionSimple
(conditionSQL)|
NOT(conditionSQL)|
conditionSQL AND conditionSQL |
conditionSQL OR conditionSQL}

Syntaxe de la conditionSimple :
{expression {=|<|>|<=|>=|<>} expression|
expression BETWEEN expression AND expression|
expression {IS NULL |IS NOT NULL}|
expression {IN |NOT IN} listeConstantes|
expression {LIKE |NOT LIKE} patron}

08/10/15

148

Chanes de Caractres et Dates


Les constantes chanes de caractres et dates
doivent tre places entre simples quotes.
La recherche tient compte des majuscules et
minuscules (pour les chanes de caractre) et
du format (pour les dates.)
Le format de date par dfaut est
'DD-MON-YY'.

SQL> SELECT
2 FROM
3 WHERE

ename, job, deptno


emp
ename = 'JAMES';

Expression des conditions


Oprateurs simples de comparaison
=, !=, <, >, <=, >=

Autres oprateurs
expr1 BETWEEN expr2 AND expr3
Ex : solde BETWEEN 50 AND 100

expr1 IN (expr2, expr3, )


Ex : nom IN (Martin, Durand)

expr1 LIKE chane


Ex : nom LIKE D%pon_

Utilisation des Oprateurs de


Comparaison
SQL> SELECT ename, sal, comm
2 FROM
emp
3 WHERE sal<=comm;

ENAME
SAL
COMM
---------- --------- --------MARTIN
1250
1400

ConditionSQL - BETWEEN
BETWEEN permet de tester l'appartenance
une
fourchette
valeurs.
SQL>
SELECT
ename,de
sal
2
3

FROM
WHERE

emp
sal BETWEEN 1000 AND 1500;

ENAME
SAL
---------- --------MARTIN
1250
TURNER
1500
WARD
1250
ADAMS
1100
MILLER
1300

Limite

Limite

infrieure

suprieure

ConditionSQL - BETWEEN
Slectionner les Commandes du mois de
juin de l'anne 2000
SELECT
FROM
WHERE

SELECT
FROM
WHERE

08/10/15

*
Commande
dateCommande BETWEEN '01/06/2000' AND '30/06/2000'

*
Commande
dateCommande >= '01/06/2000' AND
dateCommande <='30/06/2000'

153

ConditionSQL - IN
IN permet de comparer une expression
avec une liste de valeurs.
Slectionner les Commandes du Client
dont le noClient est 10 ou 40 ou 80
SELECT
FROM
WHERE

SELECT
FROM
WHERE

08/10/15

*
Commande
noClient IN (10, 40, 80)

*
Commande
noClient = 10 OR noClient = 40 OR noClient = 80

154

ConditionSQL - LIKE
LIKE permet de rechercher des chanes de
caractres l'aide de caractres gnriques
Les conditions de recherche peuvent contenir
des caractres ou des nombres littraux.
(%) reprsente zro ou plusieurs caractres
( _ ) reprsente un caractre
SQL> SELECT
2 FROM
3 WHERE

ename
emp
ename LIKE 'S%';

ConditionSQL - LIKE
Slectionner les Clients dont le nomClient
contient le mot Le
SELECT *
FROM
WHERE

Client
nomClient LIKE '%Le%'

2ime lettre du nomClient = o et dernire


lettre est un k
SELECT *
FROM
WHERE
08/10/15

Client
nomClient LIKE '_o%k'
156

ConditionSQL - IS NULL
Recherche de valeurs NULL avec
loprateur IS NULL
Slectionner les Articles dont la
description est une valeur nulle

08/10/15

157

LOprateur AND
Avec AND, les deux conditions doivent tre
VRAIES.
SQL>
2
3
4

SELECT
FROM
WHERE
AND

EMPNO
--------7876
7934

empno, ename, job, sal


emp
sal>=1100
job='CLERK';

ENAME
---------ADAMS
MILLER

JOB
SAL
--------- --------CLERK
1100
CLERK
1300

Utilisation de lOprateur
Avec OR, l'une ou l'autre
ORdes deux conditions doit
tre VRAIE.

SQL>
2
3
4

SELECT
FROM
WHERE
OR

empno, ename, job, sal


emp
sal>=1100
job='CLERK';

EMPNO ENAME
JOB
SAL
--------- ---------- --------- --------7839
7698
7782
7566
7654

KING
BLAKE
CLARK
JONES
MARTIN

...
14 rows selected.

PRESIDENT
MANAGER
MANAGER
MANAGER
SALESMAN

5000
2850
2450
2975
1250

lOprateur NOT
SQL> SELECT ename, job
2 FROM
emp
3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST');
ENAME
---------KING
MARTIN
ALLEN
TURNER
WARD

JOB
--------PRESIDENT
SALESMAN
SALESMAN
SALESMAN
SALESMAN

... WHERE
... WHERE
... WHERE

sal NOT BETWEEN 1000 AND


ename NOT LIKE %A%
comm IS NOT NULL

1500

Rgles de Priorit
Ordre de priorit
1
2
3
4

Oprateur
Tous les oprateurs
de comparaison
NOT
AND
OR

Les parenthses permettent de


modifier les rgles de priorit

Rgles de Priorit
SQL>
2
3
4
5

SELECT
FROM
WHERE
OR
AND

ENAME
ENAME
------------------KING
KING
MARTIN
MARTIN
ALLEN
ALLEN
TURNER
TURNER
WARD
WARD

ename, job, sal


emp
job='SALESMAN'
job='PRESIDENT'
sal>1500;

JOB
SAL
JOB
SAL
----------------- ----------------PRESIDENT
5000
PRESIDENT
5000
SALESMAN
1250
SALESMAN
1250
SALESMAN
1600
SALESMAN
1600
SALESMAN
1500
SALESMAN
1500
SALESMAN
1250
SALESMAN
1250

Rgles de Priorit

Utilisation de parenthses pour forcer


la priorit.
SQL>
2
3
4
5

SELECT
FROM
WHERE
OR
AND

ENAME
ENAME
------------------KING
KING
ALLEN
ALLEN

ename, job, sal


emp
(job='SALESMAN'
job='PRESIDENT')
sal>1500;

JOB
SAL
JOB
SAL
----------------- ----------------PRESIDENT
5000
PRESIDENT
5000
SALESMAN
1600
SALESMAN
1600

Ordre du rsultat
Le rsultat dune requte peut tre tri selon les
valeurs dune ou plusieurs colonne(s).
Par ordre
croissant :
SELECT * FROM Client ORDER BY solde;

Par ordre dcroissant (ici le tri est dabord fait par le


nom puis par le prenom pour les enregistrements de
mme nom) :
SELECT * FROM Client ORDER BY nom, prenom DESC;

Clause ORDER BY
Tri des lignes avec la clause ORDER BY
ASC : ordre croissant (par dfaut)
DESC : ordre dcroissant

La clause ORDER BY se place la fin de lordre


SELECT
SQL> SELECT
ename, job, deptno, hiredate
2 FROM
emp
3 ORDER BY hiredate;
ENAME
JOB
DEPTNO HIREDATE
---------- --------- --------- --------SMITH
CLERK
20 17-DEC-80
ALLEN
SALESMAN
30 20-FEB-81
...
14 rows selected.

Tri par Ordre Dcroissant


SQL> SELECT
ename, job, deptno, hiredate
2 FROM
emp
3 ORDER BY hiredate DESC;
ENAME
JOB
DEPTNO HIREDATE
---------- --------- --------- --------ADAMS
CLERK
20 12-JAN-83
SCOTT
ANALYST
20 09-DEC-82
MILLER
CLERK
10 23-JAN-82
JAMES
CLERK
30 03-DEC-81
FORD
ANALYST
20 03-DEC-81
KING
PRESIDENT
10 17-NOV-81
MARTIN
SALESMAN
30 28-SEP-81
...
14 rows selected.

Tri sur lAlias de Colonne


SQL> SELECT
empno, ename, sal*12 annsal
2 FROM
emp
3 ORDER BY annsal;
EMPNO ENAME
ANNSAL
--------- ---------- --------7369 SMITH
9600
7900 JAMES
11400
7876 ADAMS
13200
7654 MARTIN
15000
7521 WARD
15000
7934 MILLER
15600
7844 TURNER
18000
...
14 rows selected.

Tri sur Plusieurs Colonnes


Lordre des lments de la liste ORDER BY
donne lordre du tri.
SQL> SELECT ename, deptno, sal
2 FROM
emp
3 ORDER BY deptno, sal DESC;
ENAME
DEPTNO
SAL
---------- --------- --------KING
10
5000
CLARK
10
2450
MILLER
10
1300
FORD
20
3000
...
14 rows selected.

Vous pouvez effectuer un tri sur une colonne


ne figurant pas dans la liste SELECT.

Rsum
SELECT
FROM
[WHERE
[ORDER BY

[DISTINCT] {*, column [alias], ...}


table
condition(s)]
{column, expr, alias} [ASC|DESC]];

Slection-projection sur une table


Produire les noClient et dateCommande des
Commandes dont la date est suprieure au
05/07/2000
SELECT
noClient, dateCommande
FROM
WHERE

Commande
dateCommande > '05/07/2000'

noClient
30
20
40
40

08/10/15

dateCommande
09/ 07/ 2000
09/ 07/ 2000
15/ 07/ 2000
15/ 07/ 2000

170

Produit cartsien avec SELECT-FROM


Produire toutes les combinaisons
possibles de lignes de Client et de
Commande
SELECT
FROM

*
Client, Commande

Client
Commande
08/10/15

Robert Godin. Tous droits rservs.

171

Afficher des Donnes Issues de Plusieur


Tables
EMP
DEPT
EMPNO
-----7839
7698
...
7934

ENAME
----KING
BLAKE

... DEPTNO
... -----...
10
...
30

MILLER ...

10

DEPTNO
-----10
20
30
40

DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS

EMPNO
EMPNO DEPTNO
DEPTNO LOC
LOC
--------- ------------- --------------7839
10
NEW
7839
10 NEW YORK
YORK
7698
30
CHICAGO
7698
30 CHICAGO
7782
10
7782
10 NEW
NEW YORK
YORK
7566
20
DALLAS
7566
20 DALLAS
7654
30
7654
30 CHICAGO
CHICAGO
7499
30
CHICAGO
7499
30 CHICAGO
...
...
14
14 rows
rows selected.
selected.

LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON

la Jointure
Une jointure sert extraire des
donnes de plusieurs tables.
SELECT
SELECT
FROM
FROM
WHERE
WHERE

table1.column,
table1.column,
table1,
table1, table2
table2
table1.column1
table1.column1

table2.column
table2.column
== table2.column2;
table2.column2;

Ecrivez la condition de jointure dans la


clause WHERE.
Placez le nom de la table avant le nom de
la colonne lorsque celui-ci figure dans
plusieurs tables.

Jointure
Exemple:
SELECT * FROM Vehicule, Proprietaire
WHERE Vehicule.proprietaire = Proprietaire.numero;

Jointure naturelle avec SELECT-FROMWHERE


Produire les informations au sujet des Clients et de leurs
Commandes
SELECT
Client.noClient, nomClient, noTlphone, noCommande,
FROM
WHERE

dateCommande
Client, Commande
Client.noClient = Commande.noClient

Client.noClient
10
10
10
20
20
30
40
40

nomClient
Luc Sansom
Luc Sansom
Luc Sansom
DollarTremblay
DollarTremblay
Lin B
Jean Leconte
Jean Leconte

noTlphone
(999)999-9999
(999)999-9999
(999)999-9999
(888)888-8888
(888)888-8888
(777)777-7777
(666)666-6666
(666)666-6666

noCommande
1
3
4
2
6
5
7
8

dateCommande
01/ 06/ 2000
02/ 06/ 2000
05/ 07/ 2000
02/ 06/ 2000
09/ 07/ 2000
09/ 07/ 2000
15/ 07/ 2000
15/ 07/ 2000

Client.noClient, nomClient, noTlphone, noCommande,

dateCommande

08/10/15

Client.noCliente = Commande.noClient

(Client

175

Jointure avec JOIN (SQL2)


Produire les informations au sujet des Clients et de leurs
Commandes
SELECT
*
FROM
Client NATURAL JOIN Commande {SQL2}

Client
Commande

Client NATURAL JOIN Commande {Illgal!}

Jointure- (si noms de colonnes de jointure sont diffrents)


SELECT
FROM

08/10/15

*
Client JOIN Commande ON
Client.noClient = Commande.numroCLient {SQL2}
176

Types de Jointures
Equijointure

Non-quijointure

Jointure externe

Autojointure

L Equijointure
EMP

DEPT

EMPNO ENAME
DEPTNO
------ ------- ------7839 KING
10
7698 BLAKE
30
7782 CLARK
10
7566 JONES
20
7654 MARTIN
30
7499 ALLEN
30
7844 TURNER
30
7900 JAMES
30
7521 WARD
30
7902 FORD
20
7369 SMITH
20
...
14 rows selected.

DEPTNO
------10
30
10
20
30
30
30
30
30
20
20
...
14 rows

DNAME
---------ACCOUNTING
SALES
ACCOUNTING
RESEARCH
SALES
SALES
SALES
SALES
SALES
RESEARCH
RESEARCH
selected.

Cl trangre Cl primaire

LOC
-------NEW YORK
CHICAGO
NEW YORK
DALLAS
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
DALLAS
DALLAS

Extraction d'Enregistrements
avec les Equijointures
SQL> SELECT
2
3 FROM
4 WHERE

emp.empno, emp.ename, emp.deptno,


dept.deptno, dept.loc
emp, dept
emp.deptno=dept.deptno;

EMPNO ENAME DEPTNO DEPTNO LOC


----- ------ ------ ------ --------7839 KING
10
10 NEW YORK
7698 BLAKE
30
30 CHICAGO
7782 CLARK
10
10 NEW YORK
7566 JONES
20
20 DALLAS
...
14 rows selected.

Diffrencier les Noms de Colonne


Ambigus
Prfixer avec le nom de la table pour
diffrencier les noms de colonnes
appartenant plusieurs tables.
Ces prfixes de table amliorent les
performances.
Diffrencier des colonnes de mme nom
appartenant plusieurs tables en utilisant
des alias de colonne.

Dfinition d'un alias (clause AS)


~ renommer ()
SELECT
FROM
WHERE

SELECT
FROM
WHERE

08/10/15

Client.noClient, nomClient, noTlphone, noCommande,


dateCommande
Client, Commande
Client.noClient = Commande.noClient

Cl.noClient, nomClient, noTlphone, noCommande,


dateCommande
Client AS Cl, Commande AS Co
Cl.noClient = Co.noClient

181

Utilisation d'Alias de Table


Simplifiez les requtes avec les alias de
table.
SQL> SELECT emp.empno, emp.ename, emp.deptno,
2
dept.deptno, dept.loc
3 FROM
emp, dept
4 WHERE emp.deptno=dept.deptno;

SQL> SELECT e.empno, e.ename, e.deptno,


2
d.deptno, d.loc
3 FROM
emp e, dept d
4 WHERE e.deptno=d.deptno;

Auto-jointure
Quels sont les Clients qui ont le mme numro de tlphone?
SELECT
FROM
WHERE

Client.noClient, Client2.noClient,
Client2

Client.noTlphone = Client2.noTlphone

(Client

noClient, noClient2
Client NATURAL JOIN {SQL2}
Client AS Client2(noClient2, nomClient2, noTlphone)

(Client
(Client))

noClient, noClient2

noTlphone)

08/10/15

(Client)))

SELECT
FROM

Client.noClient, Client2.noClient
Client, Client AS Client2
Client.noTlphone = Client2.noTlphone

Client2(noClient2, nomClient2,

183

Non-Equijointures
EMP
EMPNO ENAME
SAL
------ ------- -----7839 KING
5000
7698 BLAKE
2850
7782 CLARK
2450
7566 JONES
2975
7654 MARTIN
1250
7499 ALLEN
1600
7844 TURNER
1500
7900 JAMES
950
...
14 rows selected.

SALGRADE
GRADE LOSAL HISAL
----- ----- -----1
700
1200
2
1201
1400
3
1401
2000
4
2001
3000
5
3001
9999

"Les salaires (SAL) de la table


EMP sont compris entre le
salaire minimum (LOSAL) et le
salaire maximum (HISAL) de la
table SALGRADE"

Extraction d'Enregistrements
avec les Non-Equijointures
SQL>
2
3
4

SELECT
FROM
WHERE
BETWEEN

e.ename, e.sal, s.grade


emp e, salgrade s
e.sal
s.losal AND s.hisal;

ENAME
SAL
GRADE
---------- --------- --------JAMES
950
1
SMITH
800
1
ADAMS
1100
1
...
14 rows selected.

Jointures Externes
EMP
ENAME
----KING
BLAKE
CLARK
JONES
...

DEPT
DEPTNO
-----10
30
10
20

DEPTNO
-----10
30
10
20
...
40

DNAME
---------ACCOUNTING
SALES
ACCOUNTING
RESEARCH
OPERATIONS

Pas d'employs dans le


dpartement OPERATIONS

Jointures Externes
Les jointures externes permettent de visualiser
des lignes qui ne rpondent pas la condition
de jointure.
L'oprateur de jointure externe est le signe (+).
SELECT
SELECT
FROM
FROM
WHERE
WHERE

table.column,
table.column, table.column
table.column
table1,
table1, table2
table2
table1.column(+)
table1.column(+) == table2.column;
table2.column;

SELECT
SELECT
FROM
FROM
WHERE
WHERE

table.column,
table.column, table.column
table.column
table1,
table1, table2
table2
table1.column
table1.column == table2.column(+);
table2.column(+);

Utilisation des Jointures Externes


SQL>
2
3
4

SELECT
FROM
WHERE
ORDER BY

e.ename, d.deptno, d.dname


emp e, dept d
e.deptno(+) = d.deptno
e.deptno;

ENAME
DEPTNO DNAME
---------- --------- ------------KING
10 ACCOUNTING
CLARK
10 ACCOUNTING
...
40 OPERATIONS
15 rows selected.

Jointure externe (OUTER JOIN)


Produire les informations au sujet des Clients et de leurs
Commandes incluant les informations sur les Clients qui nont pas
plac de Commande
SELECT
FROM

Client =
Commande

*
Client NATURAL LEFT OUTER JOIN Commande {SQL2}

Oracle
+ aprs colonne pour inclure la valeur NULL

08/10/15

Robert Godin. Tous droits rservs.

189

Oprations ensemblistes (UNION, INTERSECT,


EXCEPT)

Produire les noms et numros de tlphone des Employs qui sont aussi des Clients de la
ppinire
Table Client
noClient nomClient
10
Luc Sansom
20
Dollard Tremblay
30
Lin B
40
Jean Leconte
50
Hafedh Alaoui
60
Marie Leconte
70
Simon Lecoq
80
Dollard Tremblay

noTlphone
(999)999-9999
(888)888-8888
(777)777-7777
(666)666-6666
(555)555-5555
(666)666-6666
(444)444-4419
(333)333-3333

codeEmploy
CASD1
PIOY1
LAFH1
HASC1

Table Employ
nomEmploy
Dollard Tremblay
Yan Piochuneshot
Yvan Lafleur
Jean Leconte

noTlphone
(888)888-8888
911
(111)111-1111
(666)666-6666

(SELECT
nomClient as nomPersonne, noTlphone
FROM
Client)
INTERSECT
(SELECT
nomEmploy as nomPersonne, noTlphone
FROM
Employ)

nomPersonne
Dollard Tremblay
Jean Leconte
08/10/15

noTlphone
(888)888-8888
(666)666-6666
190

Fonctions de Groupe
Les fonctions de groupe agissent sur des groupes
de lignes et donnent un rsultat par groupe.
EMP

DEPTNO
SAL
--------- --------10
2450
10
5000
10
1300
20
800
20
1100
20
3000
20
3000
20
2975
30
1600
30
2850
30
1250
30
950
30
1500
30
1250

"salaire maximum
de la table EMP"

MAX(SAL)
--------5000

Fonctions de Groupe

AVG([DISTINCT | ALL] expr) : moyenne


COUNT(* | [DISTINCT | ALL] expr) : compteur
MAX([DISTINCT | ALL] expr) : maximum
MIN([DISTINCT | ALL] expr) : minimum
STDDEV([DISTINCT | ALL] expr) : cart type
SUM([DISTINCT | ALL] expr) : total
VARIANCE([DISTINCT | ALL] expr) : variance

Exemples doprateurs de
groupe
SELECT COUNT(*) FROM Vehicule
WHERE marque=BMW;
SELECT MAX(solde) FROM Client;
SELECT SUM(solde) FROM Client
WHERE nom = Durand;

Fonctions AVG et SUM


AVG et SUM s'utilisent avec des donnes
numriques.
SQL> SELECT
2
3 FROM
4 WHERE

AVG(sal), MAX(sal),
MIN(sal), SUM(sal)
emp
job LIKE 'SALES%';

AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)


-------- --------- --------- --------1400
1600
1250
5600

Fonctions MIN et MAX


MIN et MAX s'utilisent avec tous types
de donnes.
SQL>
SELECT MIN(hiredate), MAX(hiredate)
2

FROM

emp;

MIN(HIRED MAX(HIRED
--------- --------17-DEC-80 12-JAN-83

Utilisation de la Fonction COUNT


COUNT(*) ramne le nombre de
lignes
d'une
table.
SQL>
SELECT
COUNT(*)
2
3

FROM
WHERE

COUNT(*)
--------6

emp
deptno = 30;

Utilisation de la Fonction COUNT


COUNT(expr) ramne le nombre de
lignes
NULL.
SQL>
SELECTnon
COUNT(comm)
2
3

FROM
WHERE

COUNT(COMM)
----------4

emp
deptno = 30;

Fonctions de Groupe et Valeurs


NULL
Les fonctions de groupe ignorent les
valeurs
NULL des colonnes.
SQL>
SELECT AVG(comm)
2

FROM

AVG(COMM)
--------550

emp;

Utilisation de la Fonction NVL


avec les Fonctions de Groupe
La fonction NVL force la prise en compte des valeurs
NULL dans les fonctions de groupe.
SQL> SELECT AVG(NVL(comm,0))
2 FROM
emp;

AVG(NVL(COMM,0))
---------------157.14286

Fonctions de groupe
Le nombre d'Articles diffrents vendre
ainsi que le prixUnitaire moyen des
Articles
SELECT
FROM

COUNT(*) AS nombreArticles,
AVG(prixUnitaire) AS prixMoyen
Article

nombreArticles
10

08/10/15

prixMoyen
19.49

200

Fonctions de groupe:suite
SELECT
FROM

Count(DISTINCT prixUnitaire) AS nombrePrix


Article

nombrePrix
6
SELECT
FROM

Count(prixUnitaire) AS nombrePrixNonNull
Article

nombrePrixNonNull
10
08/10/15

201

Groupement des rsultats


Par dfaut les oprateurs de groupe sappliquent sur
lensemble des enregistrements slectionns
Linstruction GROUP BY permet dappliquer un
oprateur des groupes spars denregistrements
Par exemple, pour obtenir le nombre de vehicule de
chaque marque on peut crire :
SELECT COUNT(*) FROM Vehicule GROUP BY
marque;

EMP

Cration de Groupes de
Donnes
DEPTNO
SAL
--------- --------10
2450
10
5000
10
1300
20
800
20
1100
20
3000
20
3000
20
2975
30
1600
30
2850
30
1250
30
950
30
1500
30
1250

2916.6667

DEPTNO AVG(SAL)
"salaire
moyen pour ------- --------2175
chaque
10 2916.6667
dpartement
20
2175
de la table
30 1566.6667
EMP"
1566.6667

Cration de Groupes de Donnes : la


Clause GROUP BY
SELECT
FROM
[WHERE

column, group_function
table
condition]

[GROUP BY
[ORDER BY

group_by_expression]
column];

Utilisation de la Clause GROUP BY


La clause GROUP BY doit inclure toutes les
colonnes de la liste SELECT qui ne figurent
pas dans des fonctions de groupe.
SQL> SELECT
deptno, AVG(sal)
2 FROM
emp
3 GROUP BY deptno;

DEPTNO AVG(SAL)
--------- --------10 2916.6667
20
2175
30 1566.6667

Partition d'une table avec la clause


GROUP BY
Produire le nombre de Commandes passes par chacun
des Clients qui ont pass au moins une Commande
SELECT
FROM
GROUP BY

noClient, COUNT(*) AS nombreCommandes


Commande
noClient

Table Commande
noCommande dateCommande
1
01/ 06/ 2000
3
02/ 06/ 2000
4
05/ 07/ 2000
2
02/ 06/ 2000
6
09/ 07/ 2000
5
09/ 07/ 2000
7
15/ 07/ 2000
8
15/ 07/ 2000

08/10/15

noClient
10
10
10
20
20
30
40
40

noClient
10
20
30
40

nombreCommandes
3
2
1
2

206

Regroupement sur Plusieurs


Colonnes
EMP
DEPTNO
--------10
10
10
20
20
20
20
20
30
30
30
30
30
30

JOB
SAL
--------- --------MANAGER
2450
PRESIDENT
5000
CLERK
1300
CLERK
800
CLERK
1100
ANALYST
3000
ANALYST
3000
MANAGER
2975
SALESMAN
1600
MANAGER
2850
SALESMAN
1250
CLERK
950
SALESMAN
1500
SALESMAN
1250

'"somme des
salaires
de la table EMP
pour chaque
poste,
regroups par
dpartement"

DEPTNO
-------10
10
10
20
20
20
30
30
30

JOB
SUM(SAL)
--------- --------CLERK
1300
MANAGER
2450
PRESIDENT
5000
ANALYST
6000
CLERK
1900
MANAGER
2975
CLERK
950
MANAGER
2850
SALESMAN
5600

Utilisation de la Clause GROUP BY sur


Plusieurs Colonnes
SQL> SELECT
deptno, job, sum(sal)
2 FROM
emp
3 GROUP BY deptno, job;

DEPTNO JOB
SUM(SAL)
--------- --------- --------10 CLERK
1300
10 MANAGER
2450
10 PRESIDENT
5000
20 ANALYST
6000
20 CLERK
1900
...
9 rows selected.

Erreurs d'Utilisation des Fonctions


de Groupe dans une Requte

Toute colonne ou expression de la liste


Y
B
SELECT autre qu'une fonction de P
U
O
groupe, doit tre incluse dans la
R
G
e
s
clause GROUP BY.
l au
SQL>
SQL>
22

SELECT
SELECT
FROM
FROM

deptno,
deptno, COUNT(ename)
COUNT(ename) c l
a
l
emp;
emp;
s

n
a
d
e
t
n
SELECT
deptno,
COUNT(ename)
a
SELECT deptno, COUNT(ename)
u
q
**
n
a
ERROR
ERROR at
at line
line 1:
1: m
ORA-00937:
ORA-00937: not
not an
aesingle-group
single-group group
group function
function
n
lo
o
C

Erreurs d'Utilisation des Fonctions


de Groupe dans une Requte
Vous ne pouvez utiliser la clause WHERE pour
limiter les groupes.
es
l
r
e
t
Utilisez la clause HAVING.
i
m
SQL>
SQL>
22
33
44

SELECT
SELECT
FROM
FROM
WHERE
WHERE
GROUP
GROUP BY
BY

E
R
HE
W
e
s
u
la
c
a
l
s
a
p

deptno,
deptno, AVG(sal)
AVG(sal)
emp
emp
AVG(sal)
AVG(sal) >> 2000
2000
deptno;
deptno;

li
r
u
o
p

WHERE
WHERE AVG(sal)
AVG(sal) >> 2000
2000
**
z
e
ERROR
ERROR at
at line
line 3:
3: lis
ti es is
ORA-00934:
ORA-00934: group
group'ufunction
function
is not
not allowed
allowed here
here
p

N ou
gr

Requtes de groupement :
GROUP BY

Rgles:
Tous les attributs Ai, , Andans la clause SELECT
qui ne sont pas impliqus dans une opration
d'agrgation doivent tre inclus dans la clause
GROUP BY
GROUP BY peut avoir dautres attributs en plus

Clause HAVING
La clause HAVING ralise une slection ( la manire du
WHERE) sur les groupes retenir.
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY

column, group_function
table
condition]
group_by_expression]
group_condition]
column];

Par exemple, si on souhaite connatre le nombre de vhicules


de chaque marque en ayant plus de 5, on peut crire :
SELECT COUNT(*) FROM Vehicule GROUP BY marque
HAVING COUNT(*) > 5;

Utilisation de la clause HAVING


SQL>
2
3
4

SELECT
FROM
GROUP BY
HAVING

deptno, max(sal)
emp
deptno
max(sal)>2900;

DEPTNO MAX(SAL)
--------- --------10
5000
20
3000

Clause HAVING
Produire le nombre de Commandes passes par chacun
des Clients qui ont pass deux Commandes ou plus
SELECT
FROM
GROUP BY
HAVING

noClient, COUNT(*) AS nombreCommandes


Commande
noClient
COUNT(*) >= 2

Table Commande
noCommande dateCommande
1
01/ 06/ 2000
3
02/ 06/ 2000
4
05/ 07/ 2000
2
02/ 06/ 2000
6
09/ 07/ 2000
5
09/ 07/ 2000
7
15/ 07/ 2000
8
15/ 07/ 2000

noClient
10
10
10
20
20
30
40
40

noClient
10
20
30
40

nombreCommandes
3
2
1
2

Produire le nombre de Commandes


passes par chacun des Clients qui
ont pass deux Commandes ou plus
aprs
le 02/06/2000
SELECT
noClient, COUNT(*) AS nombreCommandes
FROM
WHERE
GROUP BY
HAVING

Commande
dateCommande > '02/06/2000'
noClient
COUNT(*) >= 2

Table Commande
noCommande dateCommande
1
01/ 06/ 2000
3
02/ 06/ 2000
4
05/ 07/ 2000
2
02/ 06/ 2000
6
09/ 07/ 2000
5
09/ 07/ 2000
7
15/ 07/ 2000
8
15/ 07/ 2000

noClient
10
10
10
20
20
30
40
40

noClient
10
20
30
40

nombreCommandes
1
1
1
2

Imbrication des Fonctions


de Groupe
Afficher le salaire moyen maximum.
SQL> SELECT
max(avg(sal))
2 FROM
emp
3 GROUP BY deptno;
MAX(AVG(SAL))
------------2916.6667

Rsum
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY

column, group_function
table
condition]
group_by_expression]
group_condition]
column];

Tri du rsultat (ORDER BY)


Les Clients en ordre alphabtique du nom
SELECT
FROM
ORDER BY
SELECT
FROM
ORDER BY

*
Client
nomClient

*
Client
nomClient DESC, noTlphone ASC
Laboratoire
Exercices 1 q) s) t) v)

08/10/15

218

Requtes imbriques
Permet le calcul d'un sous-rsultat sans
crer une nouvelle relation ;
Peut simplifier la lecture du rsultat (p. ex.
requte imbrique en remplacement d'une
jointure).

Sous-interrogations
Un critre de recherche employ dans une
clause WHERE peut tre lui-mme le rsultat
dun SELECT
Par exemple, pour connatre le nom des
personnes nes le mme jour que le client
Martin on peut crire :
SELECT nom FROM Client
WHERE naissance = (SELECT naissance FROM
Client WHERE nom = Martin);

Exemple

Exemple de requte imbrique


Requte : Etudiants de Durand ?
Algbre relationnelle :
R1 = (LesEnseignants : (nomEnseignant =
Durand))[matiere]
R2 = (LesInscriptions : (matiere = R1))[NoEt]

SQL : SELECT NoEt FROM


LesInscriptions WHERE matiere
=(SELECT matiere FROM LesEnseignants
WHERE nomEnseignant = Durand)

Exemple de requte imbrique


Rsultat de la requte

Sous-Interrogations
SELECT
FROM
WHERE

select_list
table
expr operator
(SELECT
FROM

select_list
table);

La sous-interrogation (requte interne) est excute une fois avant la requte


principale.
Le rsultat de la sous-interrogation est utilis par la requte principale (externe).

Conventions d'Utilisation
des Sous-Interrogations
Placez les sous-interrogations entre
parenthses.
Placez les sous-interrogations droite de
l'oprateur de comparaison.
N'ajoutez jamais de clause ORDER BY
une sous-interrogation.
Utilisez les oprateurs mono-ligne avec les
sous-interrogations mono-ligne.
Utilisez les oprateurs multi-ligne avec les
sous-interrogations multi-ligne.

Utilisation d'une Sous-Interrogation


SQL> SELECT ename
2 FROM
emp
2975
3 WHERE sal >
4
(SELECT sal
5
FROM
emp
6
WHERE empno=7566);
ENAME
ENAME
------------------KING
KING
FORD
FORD
SCOTT
SCOTT

Types de Sous-Interrogations
Sous-interrogation mono-ligne
Requte principale
sous-interrogation

ramne

CLERK

Sous-interrogation multi-ligne
Requte principale
ramne
sous-interrogation

CLERK
MANAGER

Sous-interrogation multi-colonne
Requte principale
ramne
sous-interrogation

CLERK
7900
MANAGER 7698

Sous-interrogations
Dans le cas o plusieurs enregistrements
peuvent tre renvoys on peut utiliser :
IN : pour tester une appartenance lensemble de
ce qui est renvoy
Un oprateur de comparaison (<, >, ) suivi de
ANY ou de ALL pour tester si la comparaison est
vraie au moins une fois ou pour tous les
enregistrements.

Par exemple pour connatre le client le plus


jeune on peut crire :
SELECT nom FROM Client WHERE naissance
<= ALL (SELECT naissance FROM Client);

Sous-Interrogations Mono-ligne
Ne ramnent qu'une seule ligne
Utilisent des oprateurs de comparaison
mono-ligne
Oprateur

Signification

Egal

>

Suprieur

>=

Suprieur ou gal

<

Infrieur

<=

Infrieur ou gal

<>

Diffrent de

Sous-Interrogations Mono-ligne
Exemple: Afficher les employs occupant le mme poste que
l'employ 7369 et gagnent plus que l'employ 7876

SQL>
2
3
4
5
6
7
8
9
10

SELECT
FROM
WHERE

AND

ename, job
emp
job =
(SELECT
FROM
WHERE
sal >
(SELECT
FROM
WHERE

CLERK

job
emp
empno = 7369)
1100

sal
emp
empno = 7876);

Clause HAVING avec SousInterrogations


Oracle Server excute les sousinterrogations en premier.
Oracle Server ramne les rsultats dans la
clause HAVING de la requte principale.
SQL>
2
3
4
5
6
7

SELECT
FROM
GROUP BY
HAVING

deptno, MIN(sal)
emp
deptno
MIN(sal) >
(SELECT
FROM
WHERE

800

MIN(sal)
emp
deptno = 20);

e
n
ig
l
ti
l
u
m

Qu'est-ce Qui ne Va pas


dans cet Ordre ? on

io
t
a
SQL> SELECT empno, ename
g
o
2 FROM
emp
r
er
3 WHERE sal =
t
in
4
(SELECT
MIN(sal)
s
5
FROM
emp
u
o
6
GROUP BY s deptno);
c
e
av
e
n
ERROR:
ERROR:
l- ig
ORA-01427:
osub-query
ORA-01427: single-row
single-row
sub-query returns
returns more
more than
than
n
one
o
one row
row
m
r
u
no
e
no rows
rows selected
selected
t
a
r
p
O

Cet Ordre Va-t-il Fonctionner ?ur


SQL> SELECT ename,
2 FROM
emp
3 WHERE job =
4
5
6

job

e
n

m
a
r

(SELECT job
FROM
emp
ne
WHERE
ename='SMYTHE');
on

no
no rows
rows selected
selected

La

i
t
a
g
ro
r
e
t
in
s
u
so

e
n
u
c
au

e
l
va

Sous-Interrogation Multi-ligne
Ramne plusieurs lignes
Utilise des oprateurs de comparaison
multi-ligne

Oprateur in
L'exemple prcdent ne fonctionne que si
la requte
imbrique ne renvoie qu'un seul n-uplet ;
Si une sous-requte renvoie un nombre
quelconque
d'lments, il faut utiliser les oprateurs
in et not in ,
traductions SQL de

Exemple d'utilisation de in
Requte : Enseignants de l'tudiant '12'?

SQL : SELECT nomEnseignant FROM


LesEnseignants WHERE matiere IN
(SELECT matiere FROM LesInscriptions
WHERE NoEt = 12)

Oprateur exists
Permet de tester si le rsultat d'une
requte imbrique est vide ;
Apparat comme lment d'une condition.

Exemple d'utilisation de exists


Requte : Enseignants ayant au moins
un lve ?
SQL : SELECT R1.nomEnseignant FROM
LesEnseignants R1 WHERE EXISTS (SELECT
* FROM LesInscriptions R2 WHERE
R2.matiere = R1.matiere)

Sous-Interrogations Multi-ligne

SQL> SELECT
2 FROM
3 WHERE
4
5
6

empno, ename, job 1300


1100
emp
800
950
sal < ANY
(SELECT
sal
FROM
emp
WHERE
job = 'CLERK');

Afficher les employs dont le salaire est infrieur celui de


n'importe quel employ CLERK'

Sous-Interrogations Multi-ligne
SQL> SELECT
2 FROM
3 WHERE
4
5
6

empno, ename, job 1566.6667


2175
emp
2916.6667
sal > ALL
(SELECT
avg(sal)
FROM
emp
GROUP BY
deptno)

Afficher les employs dont le salaire est suprieur au


salaire moyen de tous les dpartements

Sous-Interrogations Multi-colonne

Sous-interrogation ramenant plusieurs


colonnes
Sous-interrogation ramenant plusieurs colonnes: On
compare une liste de colonnes un SELECT ramenant
une liste de colonnes :

SELECT nom,fonction, n_sup


FROM emp
WHERE (fonction,n_sup) = (SELECT
fonction, n_sup
FROM emp WHERE nom = Martin)

Renvoie les employs ayant mme fonction


et mme suprieur que Martin

Sous-interrogation synchronise
Dans les exemples prcdents, la sousinterrogation tait value d'abord, puis le
rsultat pouvait tre utilis pour excuter
l'interrogation principale.
SQL sait galement traiter une sousinterrogation faisant rfrence une colonne de
la table de l'interrogation principale.
Le traitement dans ce cas est plus complexe car
il faut valuer la sous interrogation pour chaque
ligne de l'interrogation principale.

Sous-interrogation synchronise

Smantique :pour chaque tuple x de la requte externe


Q, excuter la requte interne Q; s'il existe au moins un
tuple y dans le rsultat de la requte interne, alors
slectionner x.
Les deux requtes sont gnralement corrles:
Condition dans la requte interne Q exprime une
jointure entre les tables de Q et les tables de la requte
externe Q.

Sous-interrogation synchronise
Sous-interrogation synchronise avec linterrogation
principale : pour chaque ligne de linterrogation

principale on teste toute la 2nd


Exemple: Renvoie les employs ne travaillant pas
dans le mme dpartement que leur suprieur
SELECT nombFROM emp e
WHERE n_dept != (SELECT n_dept FROM emp
WHERE e.n_sup = num)
AND n_sup IS NOT NULL;

Il faut renommer la table emp de linterrogation


principale pour pouvoir la rfrencer dans la sousinterrogation

Sous-interrogation synchronise
Sous-interrogation (synchronise) ramenant
au moins 1 ligne : Loprateur EXISTS permet
de construire un prdicat vrai si la sousinterrogation qui suit ramne au moins une ligne
Exemple: Renvoie les employs travaillant dans un
dpartement qui a procd des embauches depuis le
dbut de lanne 94.

Sous-interrogation multiples
Sous-interrogation multiples: On peut utiliser
plusieurs sous-interrogations dans un mme SELECT :
par imbrication, ou par combinaison (AND ou OR)

Exemple: Renvoie la liste des employs du dpartement 10 ayant


mme fonction que quelquun du dpartement de DUPONT.

Rsum
Les sous-interrogations sont utiles
lorsqu'une requte fait appel des valeurs
SELECT
select_list
inconnues.
FROM
WHERE

table
expr operator
(SELECT select_list
FROM
table);

Vues et Relations temporaires :


dfinition
Une vue est une relation non stocke dans la base
de donnes mais recalcule chaque utilisation.

Vue: rles

Constitution dune vue

Cration dune vue

Options de la syntaxe

Options de la syntaxe

Cration exemple

diteur de Paris
Create view editeur_paris AS select numediteur,
nom from editeur where adresseediteur=Paris;
Create view emp10et20 as select * from emp
where ndept in(10,20);
create view deptStat (nom, inf, moy, max, total)
as
select nomd,min(sal), avg(sal), max(sal),
sum(sal)
from emp natural join dept group by
dept.nomd

Extraction des donnes dune vue

Select * from editeur_paris;


select * from emp10et20 ;
select nom, total from deptStat where
total > 100000;

Rgles dexcutions des ordres du


LMD dans une vue

Suppression avec une vue


On peut effectuer des delete travers une
vue, sous les conditions suivantes sur le
select qui dfinit la vue :
une seule table
pas de group by
pas de distinct
pas de fonction de groupe

Modification avec une vue


On peut effectuer des update travers
une vue, sous les conditions du delete, et
en plus :
les colonnes modifies sont des colonnes
relles de la table (pas des expressions)
Exemple:
update emp10et20 set sal = sal * 1.1;

Insertion dun vue


On peut effectuer des insert travers une
vue, sous les conditions du update, et en
plus :
toute colonne not null de la table
reprsente par la vue est prsente dans la
vue

Exemple:
insert into emp10 (matr, nome, ) values
(1200, 'DUBOIS', );

CHECK OPTION
WITH CHECK OPTION protge contre les
disparitions de tuples de vues:
UPDATE emp10et20
SET dept = 30 WHERE dept = 10' ;

serait alors rejet.


e1...10
e2...20
e5...10
e7...30

e1...30

e2...20
e5...30
e7...30

Sans
CHECK OPTION

CHECK OPTION
WITH CHECK OPTION protge contre les
disparitions de tuples de vues:
UPDATE emp10et20
SET dept = 30 WHERE dept = 10' ;

serait alors rejet.


e1...10
e2...20
e5...10
e7...30

e1...10
Abort e2...20
e5...10
e7...30

Avec
CHECK OPTION

Synthse de mise jour travers


les vues

Suppression dune vue


DROP VIEW [view {RESTRICT |CASCADE};
L'effacement d'une vue n'efface pas les donnes
Option CASCADE et RESTRICT
RESTRICT : Si la vue intervient dans la
dfinition d'une autre vue, la suppression est
refuse
CASCADE : Si la vue intervient dans la
dfinition d'une autre vue, le systme les
efface toutes

INDEX

INDEX
Un index utilise des techniques informatiques
pour rendre trs rapides les accs aux valeurs
d'une colonne
select * from emp where nomE = 'Dupond'
est trs long si la table emp contient des millions
de lignes
Un index bien construit permet d'obtenir
l'emplacement des informations sur Dupond en
quelques accs disques (moins de 5, mme s'il
y a des millions de lignes dans la table EMP)

Index
Un index sera matrialis par la cration
de blocs disque contenant des couples
(valeurs d'index, numro de bloc) donnant
le numro de bloc disque dans lequel se
trouvent les lignes correspondant
chaque valeur d'index.

Structure d'un index


Un index contient la liste trie des valeurs des colonnes
indexes avec les adresses des lignes (numro de bloc
dans la partition et numro de ligne dans le bloc)
correspondantes )
Tous les index sont stocks sous forme d'arbres: une
structure arborescente permet de retrouver rapidement
dans l'index la valeur de cl cherche, et donc l'adresse
de la ligne correspondante dans la table.
Dans un tel arbre, toutes les feuilles sont la mme
profondeur, et donc la recherche prend
approximativement le mme temps quelle que soit la
valeur de la cl.

Choix des index


Indexer en priorit :
1.les cls primaires
2.les colonnes servant de critre de jointure
3.les colonnes servant souvent de critre de
recherche

Ne pas indexer :
1.les colonnes contenant peu de valeurs
distinctes (index alors peu efficace)
2.les colonnes frquemment modifies

Utilisation d'un index


Aprs
sa
cration
un
index
est
gr
automatiquement par le SGBD
Il est transparent pour l'utilisateur : celui-ci interroge
la base de la mme faon que si l'index n'existait pas
Le SGBD peut utiliser un index s'il pense que la
requte sera acclre
Les index ralentissent les modifications des donnes:
la cration d'index utilise de l'espace mmoire dans
la base de donnes, et, tant donn qu'il est mis
jour chaque modification de la table laquelle il est
rattach, peut alourdir le temps de traitement du
SGBDR lors de la saisie de donnes

Cration dun index


CREATE [UNIQUE] INDEX nomIndex ON
table (col1, col2,)
create index nomE on emp(nomE);
Le nom choisi doit tre unique parmi tous
les index de toutes les tables
Oracle cre automatiquement un index sur
les colonnes qui ont des contraintes
Primary key et Unique

Cration dun index


CREATE [UNIQUE] INDEX Nom_de_l_index ON
Nom_de_la_table (Nom_de_champ [ASC/DESC], ...)
Exemple: Create index nomE on emp(nomE);
Le nom choisi doit tre unique parmi tous les index de
toutes les tables
L'option UNIQUE permet de dfinir la prsence ou non
de doublons pour les valeurs de la colonne
Les options ASC/DESC permettent de dfinir un ordre
de classement des valeurs prsentes dans la colonne
Remarque: Oracle cre automatiquement un index sur
les colonnes qui ont des contraintes Primary key et
Unique

Suppression d'un index


DROP INDEX nomIndex

Les squences

Les squences
La cration de squences permet de gnrer
par exemple des valeurs squentielles de cl
primaire.
CREATE SEQUENCE nom_squence
[INCREMENT BY 1 ou autre_valeur]
[START WITH valeur]
[MAX VALUE valeur / NOMAXVALUE]
[MIN VALUE valeur / NOMINVALUE]
[CYCLE / NOCYCLE]
[CACHE valeur / NOCACHE];

Les squences
CYCLE / NOCYCLE permet de
recommencer la valeur de dpart ou de
sarrter au maximum (ou au minimum en
cas de dcrmentation)
CACHE permet de gnrer lavance des
valeur (par dfaut 20 valeurs sont
stockes en mmoire).

Les squences
Exemple :
CREATE SEQUENCE compteurauto
START WITH 1000
INCREMENT BY 10
NOMAXVALUE
NOCYCLE;

Exemple :
create sequence seqdept
increment by 10
start with 10

Utilisation des squences


Deux pseudo-colonnes permettent
d'utiliser les squences :
CURRVAL retourne la valeur courante
NEXTVAL incrmente la squence et
retourne la nouvelle valeur
insert into dept(dept, nomd) values
(seqdept.nextval, 'Finances')

CURRVAL et NEXTVAL
On ne peut utiliser CURRVAL quaprs
avoir utilis NEXTVAL au moins une fois
dans la session de travail
NEXTVAL modifie immdiatement la valeur
future pour les autres transactions, mme
sil est lanc dans une transaction non
valide
La valeur de CURRVAL ne dpend que des
NEXTVAL lancs dans la mme transaction

Modification des squences


ALTER SEQUENCE nom_squence
INCREMENT BY entier1
alter sequence seqdept increment by 5
On ne peut modifier la valeur de dpart

Les squences
Exemple :
INSERT INTO MACHINE (numeleve, nomeleve,
prenomeleve) VALUES (compteurauto.NEXTVAL,
Pamalin, Antony);
insert into dept(dept, nomd) values (seqdept.nextval,
'Finances')
Supprimer une squence :
DROP SEQUENCE nom_squence;
Modifier une squence (mmes paramtres que lors de
la cration) :
ALTER SEQUENCE

Informations sur les squences

Afficher la valeur dune squence :


select seqdept.currval from dual
Tables du dictionnaire des donnes :
USER_SEQUENCES et ALL_SEQUENCES

Exemple:
SELECT * FROM user_sequence WHERE
sequence_name = nom_squence;
select seqdept.currval from dual

Gestion des transactions


Objectif:
Pour permettre diffrents utilisateur de
travailler simultanment et partager les
meme ressource
Tous autre utilisateur ne peut intervenir
sur les mmes donnes tant quelles ne
sont pas dverrouilles
ORACLE:PL/SQL
labor par: EL ALAMI Nama

283

Gestion des transactions


Une transaction est un ensemble de
modifications de la base qui forme un tout
indivisible
Il faut effectuer ces modifications entirement ou
pas du tout, sous peine de laisser la base dans
un tat incohrent
Les SGBDs permettent aux utilisateurs de grer
leurs transactions :
COMMIT : les modifications de la transaction en
cours deviennent dfinitives et visibles de tous,
ROLLBACK : les modifications de la transaction en
cours sont toutes annules

Transaction: Concept fondamental

Principe dutilisation dune


transaction

Proprits des transactions


Latomicit: Une transaction est un ensemble de
mises jour de la base dpendantes. soit elles
sont toutes valides soit aucune ne lest
Cohernce: lexecution dune transaction fait
pass la base de donnes dun tat consistant
un autre etat consistant
Isolation:Les rsultats d'une transaction ne sont
visibles aux autres transactions qu'une fois la
transaction valide.
Durabilit: aprs validation, mise jour

prennes mme
si panne
ORACLE:PL/SQL
labor par: EL ALAMI Nama

287

Transactions
Dbut de transaction implicite
Dbut de toute commande SQL en dbut de session,
Fin de la transaction prcdente ensuite.

Fin de transaction explicite


Commandes de validation (COMMIT) ou annulation
(ROLLBACK),

Fin de transaction implicite


Commande de dfinition de donnes (CREATE,
ALTER, DROP etc.)
Fin de session, dtection de problme par le SGBD
ou arrt anormal du SGBD

Gestion des transactions

Les principaux ordres SQL de gestion des transactions sont les suivants:
COMMIT COMMIT ;
Termine une transaction par la validation des actions effectues
Annulation des verrous ventuels et publication dfinitive des
modifications effectues aux autres utilisateurs
ROLLBACK ROLLBACK ;
Termine une transaction en annulant toutes les actions
effectues.
Sous-transaction : SAVEPOINT
positionnement dun point intermdiaire dans la transaction
SAVEPOINT <point_repere> ;
annulation des actions depuis ce point de repre (et non depuis
le dbut)
ROLLBACK TO <point_repere> ;
LOCK TABLE ordre de verrouillage explicite

gestion des transactions

Gestion des transactions


En cours de transaction : mmorisation
des actions ralises dans un journal
(fichier de log ou de redolog)

Transaction : exemple
EXEMPLE
--- debut de session
Connect username/pwq
...
Update
Insert into
...
Commit
--- fin transaction 1
ORACLE:PL/SQL
labor par: EL ALAMI Nama

292

Gestion des transactions

--debut de la 2eme tansaction


Insert into
...
---debut sous transaction-2
Savepoint SV1;

Delete from
ROLLBACK to SV1;

---annulation sous-transaction2
COMMIT;--valide tous le reste de la transaction2
--fin transaction 2

ORACLE:PL/SQL
labor par: EL ALAMI Nama

293

Transaction : exemple

DELETE FROM emp WHERE .... ;


INSERT INTO TABLE emp VALUES ... ;
COMMIT ;
ALTER TABLE dept ADD . ;
UPDATE emp ... SET ;
SAVEPOINT a ;
DELETE FROM emp WHERE .... ;
UPDATE personne SET .... ;
ROLLBACK to a ;
ROLLBACK;

Gestion des transactions


Utilisation de la commande COMMIT
La commande commit valide
dfinitivement les mises jour opres
dans la base lors dune transaction.
jusqu la validation dfintive, les autres
utilisateurs ne peuvent pas voir les
donnes modifies mais telles quelles
taient avant les changements.
ORACLE:PL/SQL
labor par: EL ALAMI Nama

295

Dbut dune transaction

Fin dune transaction

Gestion des transactions


Update e_service set nom=achat WHERE
no=23;
-- pose dun verrou sur les donnes manipules
dans cet order SQL
COMMIT;-- verification dfinitive de la
transaction

ORACLE:PL/SQL
labor par: EL ALAMI Nama

298

Gestion des transactions


Utilisation de la commande ROLLBACK
cette commande annule dfinitivement
les mises jour opres dans la base lors
dune transaction

ORACLE:PL/SQL
labor par: EL ALAMI Nama

299

Gestion des transactions


Utilisation de savepoint
lordre Savepoint dcoupe une transaction
en sous-transactions.
lordre SAVEPOINT est utiliss
conjointement lordre ROLLBACK TO

ORACLE:PL/SQL
labor par: EL ALAMI Nama

300

Transactions
En gnral il existe deux modes
transactionnels:
aprs un SET AUTOCOMMIT ON toute
requte SQL est considre comme une
transaction en elle-mme
aprs un SET AUTOCOMMIT OFF il faut
ajouter explicitement un COMMIT (ou un
ROLLBACK) pour marquer la fin dune
suite de requtes SQL

ORDRE SELECT
Oprateurs et fonctions

Non typs

DECODE
CASE
GREATEST
LEAST
NVL

Types
numriques

ABS
CEIL
FLOOR
MOD
POWER
ROUND
SQRT
COS

Type
alphanumrique

Type
date

SUBSTR
INSTR
UPPER
LOWER
LTRIM
LPAD

SYSDATE
ADD_MONTHS
NEXT_DAY
LAST_DAY
MONTHS_BETWEEN

Fonctions non types

DECODE

DECODE( crit, val1, result1 [, val2, result2] ... [, default] )

Elle renvoie result1 si critre =val1, result2 si critre=val2, ou dfault dans tous les autres cas.
Ex : SELECT DECODE (deptno, 10, 'ACCOUNTING', 20, 'RESEARCH', 30, 'SALES', 40,
'OPERATION', 'NONE')
FROM emp;
CASE

CASE WHEN cond1 THEN expr1 [cond2 THEN expr2 ] [ELSE expr] END
En fonction de la condition vrifie, l'expression expr est xecute.

GREATEST

GREATEST(expr1,expr2,)

Renvoie la plus grande valeur parmi expr1,expr2,


LEAST

LEAST(expr1,expr2,
Renvoie la plus petite valeur parmi expr1,expr2,

NVL

NVL(expr1,expr2)
Renvoie la valeur de expr1 si elle est NOT NULL, sinon expr2.

Fonctions non types


Exemple:Liste des employs avec leur
catgorie (prsident = 1, directeur = 2,
autre = 3) :
SELECT NOME, DECODE(POSTE,
'PRESIDENT', 1, 'DIRECTEUR', 2, 3) FROM
EMP

Liste des employs avec leur catgorie (prsident = 1, directeur = 2, autre = 3), en
appelant la colonne Niveau :
Solution 1:
SELECT nome
CASE
WHEN (poste = 'Prsident') THEN 1
WHEN (poste = 'Directeur') THEN 2
ELSE 3
END Niveau
FROM emp;
Solution 2:
SELECT nome,
CASE poste
WHEN 'Prsident' THEN 1
WHEN 'Directeur' THEN 2
ELSE 3
END Niveau
FROM emp;

Fonctions numriques
Certaines des fonctions numriques utilises sous SQL
Fonction

Syntaxe

Rle

ABS

ABS(n NUMBER) : NUMBER

Valeur absolue de n

CEIL

CEIL(n NUMBER) : NUMBER

Entier immdiatement >= n

FLOOR

FLOOR((n NUMBER) : NUMBER

Entier immdiatement <= n

MOD

MOD(n1 NUMBER,n2 NUMBER) : NUMBER

Reste de division de n1 sur n2

POWER

POWER(n1 NUMBER,e NUMBER) : NUMBER

Renvoie n1 puissance e

ROUND

ROUND(n[,m]):

Si m est positif, renvoie n arrondi (et


non pas tronqu) m chiffres aprs la
virgule. Si m est ngatif,
renvoie n arrondi m chiffres avant la
virgule. m doit tre un entier et il vaut 0
par dfaut

SIGN

SIGN(n NUMBER) : SIGNTYPE

Renvoie un signe

SQRT

SQRT(n NUMBER) : NUMBER

Racine carre de n

COS

COS(n NUMBER) : NUMBER

Cosinus de n

SIN

SIN(n NUMBER) : NUMBER

Sinus de n

TAN

TAN(n NUMBER) : NUMBER

Tangente de n

LN

LN(n NUMBER) : NUMBER

Logarithme nprien

EXP

EXP(n NUMBER) : NUMBER

Exponentielle de n

LOG

LOG(n NUMBER) : NUMBER

Logarithme dcimal de n

Fonctions numriques
Exemple
SELECT FLOOR(10.8) AS VAL1,
POWER(2,4) AS VAL3,
ROUND(123.456,2) AS VAL4, SIGN(123)
AS VAL5,SIGN(-2) AS VAL6 From table;
Rsultat

Fonctions numriques
Exemple : Donner pour chaque employ son
salaire journalier.
Solution :
SELECT nom, ROUND(salaire/22,2) FROM
emp WHERE N_dept = 20;

Fonctions alphanumriques
Fonction

Syntaxe

Rle

LENGTH

LENGTH(str VARCHAR2) : numrique

Longueur d'une chane

SUBSTR

SUBSTR(str VARCHAR2,pos,length) : chane

Renvoie une sous-chane

INSTR

INSTR(str1 VARCHAR2,str2 VARCHAR2,pos,nocc)


Pos et nocc sont facultatives

Position d'une ss-chane dans


une chane

UPPER

UPPER(str VARCHAR2) : chane

Renvoie en MAJUSCULE

LOWER

LOWER(str VARCHAR2) : chane

Renvoie en minuscule

LPAD

LPAD(chane, long [,car])


Car est facultatif

complte (ou tronque) chane la


longueur long. La chane est
complte
gauche par le caractre (ou la
chane de caractres) car

RPAD

RPAD(chane, long [,car])

a une fonction analogue, chane


tant compl te droite

LTRIM

LTRIM(VARCHAR2[,set])

Supprime les sets gauche

RTRIM

LTRIM(VARCHAR2[,set])

Supprime les sets droite

REPLACE

REPLACE(char, search_string [,replacement_string])

Remplacement d'une ss-chane


dans une chane

ASCII

ASCII(ch CHAR)

Code ASCII d'un caractre

INITCAP

INITCAP(str VARCHAR2) : chane

Renvoie premire lettre en


CAPITAL

CHR

CHR(n NUMBER) : NUMBER

Caractre du code ASCII n

Fonctions alphanumriques
Concatnation
SELECT emp.nom||' travaille a ||dept.nom
as employe FROM emp inner join dept on
emp.n_dept=dept.n_dept and salaire
>=3000;

Fonctions alphanumriques
INSTR:
Position du deuxime 'A' dans les postes :
SELECT INSTR (POSTE, 'A', 1, 2) FROM
EMP
LPAD: SELECT LPAD (NOME, 10, '.')
FROM EMP.

Fonctions alphanumriques
TRANSLATE(chane, car_source, car_cible)
La fonction TRANSLATE remplace chaque caractre de
la chane chane prsent dans l'ensemble de caractres
car_source par le caractre correspondant (de mme
position) de l'ensemble car_cible.
Exemple : remplacer les A et les M par des * dans les
noms des employs :
SELECT TRANSLATE (NOME, 'AM', '**') FROM EMP
REPLACE(chane, ch1, ch2 ) remplace ch1 par ch2
dans chane.

Fonction TO_CHAR
La fonction TO_CHAR permet de convertir un nombre
ou une date en chane de caractre en fonction d'un
format :
Pour les nombres :
TO_CHAR (nombre, format) avec
9 reprsente un chiffre (non reprsente si non significatif)
0 reprsente un chiffre (prsent mme si non significatif)
. point dcimal apparent

Exemple: Affichage des salaires avec au moins trois


chiffres (dont deux dcimales)
SELECT TO_CHAR(SAL, '9990.00') FROM EMP

Fonctions DATE

Fonction

Syntaxe

Rle

SYSDATE

SYSDATE

Retourne la date OS

ADD_MONTHS

ADD_MONTHS(date1,n)

Rajoute n mois la date date1

MONTHS_BETWEEN

MONTHS_BETWEEN(date1,d
ate2)

Nombre de mois entre date1


et date2

LAST_DAY

LAST_DAY(date1)

Date du dernier du mois de


date1

NEXT_DAY

NEXT_DAY(date1,str)

Date du prochain jour indiqu


par str

TO_DATE

TO_DATE(char [, fmt [,
'nlsparams'] ])

Conversion d'une chane de


caractre en date selon le
format fmt

ROUND

ROUND(date1[,fmt])

Arrondit date1 selon le format


fmt

Affichage d'une colonne de


dates
TO_CHAR(date,format)
Avec paramtres date : la date convertir,
format : le format de conversion rsultat
une date sous forme de chane

Affichage d'une colonne de


dates
Format:
YYYY anne
YY deux derniers chiffres de l'anne
WW numro de la semaine dans l'anne
MM numro du mois
DDD numro du jour dans l'anne
DD numro du jour dans le mois
D numro du jour dans la semaine (1 pour lundi, 7 pour
dimanche)
HH ou HH12 heure (sur 12 heures)
HH24 heure (sur 24 heures)
MI minutes

Exemple:
1. select sysdate from dual;
Avec dual C'est une table particulire dfinie sous
Oracle et qui permet l'utilisation de la commande
SELECT lorsqu'on n'a pas de colonne de table
afficher
select to_char(sysdate,'DD MONTH YYYY') from
dual;
select to_char(sysdate,'Day DD MONTH YYYY')
from dual

select sysdate, user, round(3676 / 7) from


dual

LCD: langage de contrle de


donnes

LCD: langage de contrle de


donnes
Langage de dfinition du contrle d'accs
aux donnes
Dfinit les droits en lecture/criture des
utilisateurs
Contrle l'attribution de privilges
Commandes GRANT et REVOKE

Les diffrents privilges


Privilges
Privilge systme : droit dexcuter un ordre
SQL sur nimporte quel type dobjet. Par
dfaut, droit rserv uniquement DBA.
Privilge objet : droit d accs un objet
prcis dans un autre schma que le sien.

Par dfaut, un utilisateur qui cre un


nouvel objet tous les droits sur lui, les
autres aucun (sauf DBA)

Privilges objet

SELECT : droit de lecture


INSERT : droit d'insertion
DELETE : droit de suppression
UPDATE : droit de mise jour
ALTER : droit de modification de la dfinition de table
INDEX : droit de crer un index
EXECUTE: programmes PL/SQL
ALL : tous les droits prcdents
GRANT OPTION : droit de donner les droits (possds)

GRANT et REVOKE
GRANT attribut des privilges sur des tables (ou
des vues) certains utilisateurs ou tous.
Possibilit de restreindre les privilges sur
certaines colonnes seulement
Syntaxe :
GRANT { privilge_objet [, privilge objet ...] |
ALL } ON table1, ..., tablen, vue1, ..., vuen TO
user1, ..., usern|PUBLIC [WITH GRANT
OPTION];

GRANT et REVOKE
Avec GRANT OPTION: droit au bnficiaire
daccorder ce privilge dautres utilisateurs
Privilge et type dobjet:
Table : ALTER, DELETE, INDEX, INSERT, REFERENCES,
SELECT, UPDATE
Vue : ALTER, DELETE, INSERT, SELECT, UPDATE
Squence : ALTER, SELECT

Privilge sur attributs


Exemple GRANT SELECT ON ma_table(col1,
col2) TO PUBLIC;

GRANT et REVOKE
REVOKE annule les privilges des
utilisateurs
Syntaxe :
REVOKE privilge [GRANT OPTION
FOR] ON table1, ..., tablen, vue1, ..., vuen
FROM user1, ..., usern|PUBLIC

GRANT et REVOKE: exemple


GRANT SELECT ON emp TO u1 ;
GRANT SELECT, UPDATE (salaire, adresse) ON emp S
TO u1, u2 ;
GRANT ALL ON emp, dept TO u1,u2,u3;
GRANT SELECT ON emp TO PUBLIC ;
GRANT INDEX ON emp TO u1 ;
GRANT SELECT ON emp TO u2 WITH GRANT OPTION ;

Vues et scurit des donnes


Vues moyen ais davoir un contrle direct sur les
accs
Exemple :
GRANT sur attributs
GRANT SELECT ON Table1 (Att1) TO PUBLIC;
GRANT sur vue
CREATE VIEW S_ATT1 AS SELECT Attr1 FROM
Table1;
GRANT SELECT ON S_ATT1 TO PUBLIC;

SGBD Oracle : utilisateurs


Droit de cration limit au DBA
Syntaxe: CREATE USER nom
IDENTIFIED BY passwd
GRANT [CONNECT|RESOURCE|DBA]
TO nom INDENTIFIED BY passwd
REVOKE [CONNECT|RESOURCE|DBA]
FROM nom
Suppression :
DROP USER nom

SGBD Oracle : utilisateurs


Modifier son mot de passe :
ALTER USER <nom_id> IDENTIFIED BY
<password>
GRANT CONNECT TO user IDENTIFIED
BY passwd
UTILISATEURS PREDEFINIS
SYS propritaire du dictionnaire de donnes
SYSTEM administrateur ORACLE par dfaut

SGBD Oracle : rles


Regroupement dutilisateurs qui
partageront les mmes privilges
Un rle peut tre attribu ou retir un ou
plusieurs utilisateurs
Rle prdfinis ORACLE
CONNECT connexion, CREATE et SELECT sur
les objets courants
RESOURCE droits en cration plus avancs
(index, cluster, trigger)
DBA

SGBD Oracle : rles


CREATE ROLE nomRole;
Les rles sutilisent indiffremment comme
identifiants dutilisateur ou de privilge
GRANT privileges ON table TO nomRole;
GRANT nomRole TO user;

SGBD Oracle : rles

Rles prdfinis

CONNECT Utilisateur de base : CREATE SEQUENCE, CREATE TABLE,


CREATE VIEW

RESOURCE Complment pour utilisateur un peu plus avanc :


CREATE PROCEDURE, CREATE TRIGGER

DBA Tous les privilges avec WITH ADMIN OPTION

EXP_FULL_DATABASE Privilges requis pour lexportation

IMP_FULL_DATABASE Privilges requis pour limportation

SELECT_CATALOG_ROLE SELECT sur les objets du dictionnaire

EXECUTE_CATALOG_ROLE EXECUTE sur les objets du dictionnaire

Exercices dapplication
1.

Accorder le droit de SELECT sur la table DEPT un autre user.

2.

Accorder les droits de INSERT et UPDATE sur DEPT un autre


user.

3.

Accorder tous les droits sur la table DEPT un autre user.

4.

Crer une vue relative au numro, nom, titre, numro de


dpartement des employs. Puis accorder les droits de SELECT
sur la vue un autre user

5.

Crer une vue relative toutes les informations des employs du


service 50. Puis accorder tous les droits sur la vue un autre
user.

6.

Retirer le droit INSERT l'autre user, sur la table DEPT.

Correction
1. GRANT SELECT ON dept TO nom de l'autre user ;
2. GRANT INSERT,UPDATE ON dept TO nom de l'autre
user ;
3. GRANT ALL ON dept TO nom de l'autre user ;
4. CREATE VIEW empvue AS SELECT noemp, nom, titre,
nodept FROM emp ; GRANT SELECT ON empvue TO
nom de l'autre user ;
5. CREATE VIEW emp50 AS SELECT * FROM emp
WHERE nodept = 50 ; GRANT ALL ON emp50 TO nom
de l'autre user ;
6. REVOKE INSERT ON dept FROM nom de l'autre user ;