Escolar Documentos
Profissional Documentos
Cultura Documentos
Langage SQL
version 5.4.5 du polycopi
Richard Grin
9 dcembre 2006
Introduction
1.1
Prsentation de SQL
. . . . . . . . . . . . . . . . . . . . . . .
1.2
Normes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3
Utilitaires associs
1.4
Connexion et dconnexion
. . . . . . . . . . . . . . . . . . . .
1.5
1.5.1
Identicateurs . . . . . . . . . . . . . . . . . . . . . . .
1.5.2
Tables
. . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.3
Colonnes . . . . . . . . . . . . . . . . . . . . . . . . . .
Types de donnes . . . . . . . . . . . . . . . . . . . . . . . . .
1.6.1
Types numriques . . . . . . . . . . . . . . . . . . . . .
1.6.2
1.6.3
Types temporels
. . . . . . . . . . . . . . . . . . . . .
1.6.4
Types binaires . . . . . . . . . . . . . . . . . . . . . . .
1.6.5
Valeur NULL
. . . . . . . . . . . . . . . . . . . . . . .
1.7
Slections simples . . . . . . . . . . . . . . . . . . . . . . . . .
1.8
Expressions
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.8.1
1.8.2
Expressions NULL
1.6
vi
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
11
2.1
. . . . . . . . . . . . . . . . . . . . . . .
11
2.2
Contrainte d'intgrit . . . . . . . . . . . . . . . . . . . . . . .
12
2.2.1
Types de contraintes
. . . . . . . . . . . . . . . . . . .
12
2.2.2
15
2.2.3
15
ii
. . . . . . . . . . . . .
iii
Insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.2
Modication . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.3
Suppression
21
3.4
19
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.4.1
. . . . . . . . . . . . .
22
3.4.2
23
3.4.3
23
. . . . . . . . . . . . .
Interrogations
26
4.1
Syntaxe gnrale
. . . . . . . . . . . . . . . . . . . . . . . . .
26
4.2
Clause SELECT . . . . . . . . . . . . . . . . . . . . . . . . . .
26
4.2.1
. . . . . . . . . . . . . . . . .
27
4.2.2
Pseudo-colonnes . . . . . . . . . . . . . . . . . . . . . .
28
4.3
Clause FROM . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.4
Clause WHERE . . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.4.1
31
4.4.2
Oprateurs logiques . . . . . . . . . . . . . . . . . . . .
33
4.5
4.6
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
4.5.1
Jointure
Jointure naturelle . . . . . . . . . . . . . . . . . . . . .
35
4.5.2
35
4.5.3
Jointure externe . . . . . . . . . . . . . . . . . . . . . .
36
4.5.4
. . . . . . . . . . . . . . . . . . . .
37
Sous-interrogation . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.6.1
38
4.6.2
39
4.6.3
Sous-interrogation synchronise
40
4.6.4
. . . .
41
4.6.5
Clause EXISTS . . . . . . . . . . . . . . . . . . . . . .
41
4.7
Fonctions de groupes . . . . . . . . . . . . . . . . . . . . . . .
44
4.8
Clause GROUP BY . . . . . . . . . . . . . . . . . . . . . . . .
45
4.9
Clause HAVING
. . . . . . . . . . . . . . . . . . . . . . . . .
46
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
4.10 Fonctions
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
48
. . . . . . . . . . . . .
48
51
51
53
53
. . . . . . . . . . . . . . . . . . . . .
54
. . . . . . . . . . . . . . . . . . . .
54
iv
55
. . . . . . . . . . . . . . . . . . .
55
55
55
57
5.1
Schma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
5.2
Tables
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
5.3
5.4
5.5
5.6
5.7
5.2.1
CREATE TABLE AS
. . . . . . . . . . . . . . . . . .
57
5.2.2
ALTER TABLE . . . . . . . . . . . . . . . . . . . . . .
58
5.2.3
60
5.2.4
. . . . . . . . . .
60
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
Vues
5.3.1
CREATE VIEW
. . . . . . . . . . . . . . . . . . . . .
60
5.3.2
DROP VIEW . . . . . . . . . . . . . . . . . . . . . . .
61
5.3.3
61
5.3.4
62
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
5.4.1
CREATE INDEX . . . . . . . . . . . . . . . . . . . . .
63
5.4.2
. . . . . . . . . . . . . . . . . . . . .
63
5.4.3
DROP INDEX
. . . . . . . . . . . . . . . . . . . . . .
65
5.4.4
Types d'index . . . . . . . . . . . . . . . . . . . . . . .
65
5.4.5
66
66
5.5.1
67
5.5.2
Autres solutions . . . . . . . . . . . . . . . . . . . . . .
68
5.5.3
Squences
68
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
69
5.6.1
Procdure stocke . . . . . . . . . . . . . . . . . . . . .
69
5.6.2
Fonction stocke
71
5.6.3
Tables du dictionnaire
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
72
Trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
5.7.1
. . . . . . . . . . . . . . . . .
74
Dictionnaire de donnes
5.8
Dictionnaire de donnes
. . . . . . . . . . . . . . . . . . . . .
75
5.9
76
5.9.1
GRANT . . . . . . . . . . . . . . . . . . . . . . . . . .
77
5.9.2
REVOKE
78
5.9.3
. . . . . . . . . . . . . .
78
5.9.4
. . . . . . . . . . . . . .
78
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
79
6.1.1
. . . . . . . . . . . . . . . . . . .
79
6.1.2
80
6.1.3
6.1.4
6.2
6.3
6.4
6.5
79
hrente . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
Lignes fantmes . . . . . . . . . . . . . . . . . . . . . .
81
81
6.2.1
81
6.2.2
Niveaux d'isolation . . . . . . . . . . . . . . . . . . . .
82
83
6.3.1
Traitement pessimiste
. . . . . . . . . . . . . . . . . .
83
6.3.2
Traitement optimiste . . . . . . . . . . . . . . . . . . .
84
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
85
87
88
Prsentation du polycopi
Ce polycopi prsente le langage SQL. Il ne suppose que quelques connaissances de base exposes dans le polycopi d'introduction aux bases de donnes.
Les exemples ont t tests avec le SGBD Oracle, version 10g mais n'utilisent qu'exceptionnellement les particularits de ce SGBD par rapport aux
normes SQL.
Ce cours concerne la norme SQL2. SQL3, le relationnel-objet et l'interface
avec le langage Java sont tudis dans un autre cours.
Les remarques et les corrections d'erreurs peuvent tre envoyes par courrier lectronique l'adresse grin@unice.fr, en prcisant le sujet Poly
SQL et la version du document.
vi
Chapitre 1
Introduction
1.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 bases de donnes relationnelles. Il a t conu par IBM dans les annes 70. Il est devenu le langage
standard des systmes de gestion de bases de donnes (SGBD) relationnelles
(SGBDR).
C'est la fois :
un langage d'interrogation de la base (ordre SELECT)
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).
Le langage SQL est utilis par les principaux SGBDR : DB2, Oracle,
Informix, Ingres, RDB,... Chacun de ces SGBDR a cependant sa propre variante du langage. Ce support de cours prsente un noyau de commandes
disponibles sur l'ensemble de ces SGBDR, et leur implantation dans Oracle
Version 7.
CHAPITRE 1.
INTRODUCTION
1.5.
ORACLE_SID
donne le nom de la
EXIT (ou
Identicateurs
SQL utilise des identicateurs pour dsigner les objets qu'il manipule :
utilisateurs, tables, colonnes, index, fonctions, etc.
Un identicateur est un mot form d'au plus 30 caractres, commenant
obligatoirement par une lettre de l'alphabet. Les caractres suivants peuvent
tre une lettre, un chire, ou l'un des symboles
# $
et
_.
1.5.2
Tables
Remarques 1.1
(a) Selon la norme SQL-2, le nom d'une table devrait tre prcd d'un
nom de schma (voir 5.1).
CHAPITRE 1.
INTRODUCTION
(b) Il est d'usage (mais non obligatoire videmment) de mettre les noms
de table au singulier : plutt EMPLOYE que EMPLOYES pour une
table d'employs.
Exemple 1.1
Table DEPT des dpartements :
DEPT
NOMD
LIEU
10
FINANCES
PARIS
20
RECHERCHE
GRENOBLE
30
VENTE
LYON
40
FABRICATION
ROUEN
Table DUAL
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 acher une expression dont la valeur ne dpend
d'aucune table en particulier.
Exemple 1.2
Acher la date d'aujourd'hui, le nom de l'utilisateur et le rsultat d'un
calcul :
Colonnes
Les donnes contenues dans une colonne doivent tre toutes d'un mme
type de donnes. Ce type est indiqu au moment de la cration de la table
qui contient la colonne (voir 2.1).
Chaque colonne est repre par un identicateur unique l'intrieur de
chaque table. Deux colonnes de deux tables direntes peuvent porter le
mme nom. Il est ainsi frquent de donner le mme nom deux colonnes
de deux tables direntes lorsqu'elles correspondent une cl trangre la
cl primaire rfrence. Par exemple, la colonne Dept des tables DEPT et
EMP.
Une colonne peut porter le mme nom que sa table.
Le nom complet d'une colonne est en fait celui de sa table, suivi d'un
point et du nom de la colonne. Par exemple, la colonne DEPT.LIEU
Le nom de la table peut tre omis quand il n'y a pas d'ambigut sur la
table laquelle elle appartient, ce qui est gnralement le cas.
1.6.
TYPES DE DONNES
Types numriques
SMALLINT
DECIMAL(p, d )
correspond
Exemple 1.3
SALAIRE DECIMAL(8,2)
dnit une colonne numrique SALAIRE. Les valeurs auront au maximum 2 dcimales et 8 chires au plus au total (donc 6 chires avant le
point dcimal).
Les constantes numriques ont le format habituel : -10, 2.5, 1.2E-8 (ce
8
dernier reprsentant 1.2 x 10 ).
CHAPITRE 1.
INTRODUCTION
Si le paramtre dcimales n'est pas spci, 0 est pris par dfaut. La valeur
128
absolue du nombre doit tre infrieure 10
. NUMBER est un nombre
virgule ottante (on ne prcise pas le nombre de chires aprs la virgule) qui
peut avoir jusqu' 38 chires signicatifs.
L'insertion d'un nombre avec plus de chires que taille_maxi sera refuse
(taille_maxi ne prend en compte ni le signe ni le point dcimal). Les dcimales seront ventuellement arrondies en fonction des valeurs donnes pour
taille_maxi et dcimales.
1.6.2
'aujourd''hui'.
Il existe deux types pour les colonnes qui contiennent des chanes de
caractres :
le type
constante.
La dclaration de type chane de caractres de longueur constante a le
format suivant :
CHAR(longueur )
VARCHAR
gueurs variables.
On dclare ces colonnes par :
VARCHAR(longueur )
VARCHAR2
VARCHAR
s'appelle
1.6.
TYPES DE DONNES
1.6.3
Types temporels
1.6.4
Types binaires
Ce type permet d'enregistrer des donnes telles que les images et les sons,
de trs grande taille et avec divers formats.
SQL-2 fournit les types BIT et BIT VARYING (longueur constante ou
non).
Les dirents SGBD fournissent un type pour ces donnes mais les noms
varient :
LONG RAW pour Oracle, mais IMAGE pour Sybase, BYTE pour Informix,
etc.
Nous n'utiliserons pas ce type de donnes dans ce cours.
1.6.5
Valeur NULL
Une colonne qui n'est pas renseigne, et donc vide, est dite contenir la
valeur NULL. Cette valeur n'est pas zro, c'est une absence de valeur. Voir
aussi 1.8.2.
CHAPITRE 1.
INTRODUCTION
Exemples 1.4
(a)
(b)
(c)
=, !=
(dirent),
Exemple 1.5
1.8 Expressions
1.8.1
Les expressions acceptes par SQL portent sur des colonnes, des constantes,
des fonctions.
Ces trois types d'lments peuvent tre relis par des oprateurs arithmtiques (+
- * /),
des chanes), des dates (- donne le nombre de jours entre deux dates).
1.8.
EXPRESSIONS
/,
puis
et
-).
ARITHMETIQUES
DE CHAINES
DE DATES
SUM
NVL
NVL
NVL
COUNT
TO_CHAR
SUBSTR
TO_CHAR
VARIANCE
SQRT
LENGTH
ADD_MONTHS
MAX
ABS
INSTR
MONTHS_BETWEEN
MIN
POWER
TO_NUMBER
NEXT_DAY
1.8.2
Expressions NULL
expr1, expr2,....
Elle permet de remplacer la valeur
Exemple 1.6
COALESCE
Lue ) fournie par Oracle (COALESCE est disponible avec Oracle 10g mais pas
avec Oracle 9i) qui permet de remplacer une valeur NULL par une valeur par
COALESCE
NVL (expr1, expr2 )
prend la valeur expr1, sauf si expr1 a la valeur NULL, auquel cas NVL prend
la valeur expr2.
Exemple 1.7
NVL(COMM, 0)
10
CHAPITRE 1.
INTRODUCTION
null
si une
expression est gale une certaine valeur. Elle peut tre utile lorsque des
donnes sont reprises d'un ancien SGBD non relationnel qui ne supportait
pas la valeur null.
Exemple 1.8
Chapitre 2
Cration d'une table et
contraintes d'intgrit
2.1 Cration d'une table
L'ordre CREATE TABLE permet de crer une table en dnissant le nom
et le type (voir 1.6) de chacune des colonnes de la table. Nous ne verrons ici
que trois des types de donnes utiliss dans SQL : numrique, chane de
caractres et date. Nous nous limiterons dans cette section une syntaxe
simplie de cet ordre (voir 2.2 et 5.2.1 pour des complments) :
NULL.
Exemple 2.1
12
CHAPITRE 2.
On peut donner une valeur par dfaut pour une colonne si la colonne n'est
pas renseigne.
Exemple 2.2
Le nom d'une contrainte doit tre unique parmi toutes les contraintes de
toutes les tables de la base de donnes.
Il existe des contraintes :
sur une colonne : la contrainte porte sur une seule colonne. Elle suit la
dnition de la colonne dans un ordre CREATE TABLE (pas possible
dans un ordre ALTER TABLE).
sur une table : la contrainte porte sur une ou plusieurs colonnes. Elles se
place au mme niveau que les dnition des colonnes dans un ordre
CREATE TABLE ou ALTER TABLE.
2.2.1
Types de contraintes
Contrainte de cl primaire
(pour une contrainte sur une table :)
PRIMARY KEY
dnit la cl primaire de la table. Aucune des colonnes qui forment cette cl
ne doit avoir une valeur NULL.
2.2.
CONTRAINTE D'INTGRIT
13
Contrainte d'unicit
(pour une contrainte sur une table :)
UNIQUE
interdit qu'une colonne (ou la concatnation de plusieurs colonnes) contienne
deux valeurs identiques.
Remarque 2.1
Cette contrainte UNIQUE convient des cls candidates. Cependant
une colonne UNIQUE peut avoir des valeurs NULL et une contrainte
UNIQUE ne correspond donc pas toujours un identicateur.
Contrainte de cl trangre
(pour une contrainte sur une table :)
14
CHAPITRE 2.
La norme SQL2 ore 4 autres options qui ne sont pas implmente dans
Oracle :
Contrainte CHECK
CHECK(condition )
donne une condition que les colonnes de chaque ligne devront vrier (exemples
dans la section suivante). On peut ainsi indiquer des contraintes d'intgrit de
domaines. Cette contrainte peut tre une contrainte de colonne ou de table.
Si c'est une contrainte de colonne, elle ne doit porter que sur la colonne en
question.
Exemples de contraintes
Exemples 2.3
(a) Quelques contraintes sur des colonnes :
2.2.
CONTRAINTE D'INTGRIT
15
Exemple 2.4
2.2.3
Exemple 2.5
La clause ENABLE a une option qui permet de conserver dans une table
les lignes qui ne respectent pas la contrainte ractive.
16
CHAPITRE 2.
INITIALLY DEFERRED
le
On peut modier l'tat d'une contrainte dirable par la commande ALTER TABLE ; par exemple :
2.2.
17
CONTRAINTE D'INTGRIT
Exemple 2.6
USER_CONSTRAINTS.
TABLE FORMAT A9
COLONNE FORMAT A9
CONTRAINTE FORMAT A12
"TABLE REF" FORMAT A9
"COL REF" FORMAT A9
"TEXTE CONTRAINTE" FORMAT A20
DEFERRABLE
de la vue
COLUMN
COLUMN
COLUMN
COLUMN
COLUMN
COLUMN
18
CHAPITRE 2.
Chapitre 3
Langage de manipulation des
donnes
Le langage de manipulation de donnes (LMD) est le langage permettant
de modier les informations contenues dans la base.
Il existe trois commandes SQL permettant d'eectuer les trois types de
modication des donnes :
INSERT
ajout de lignes
UPDATE
DELETE
suppression de lignes
Ces trois commandes travaillent sur la base telle qu'elle tait au dbut
de l'excution de la commande. Les modications eectues par les autres
utilisateurs entre le dbut et la n de l'excution ne sont pas prises en compte
(mme pour les transactions valides).
3.1 Insertion
INSERT INTO table (col1,..., coln )
VALUES (val1,...,valn )
ou
19
20
CHAPITRE 3.
Exemples 3.1
(a)
(b)
La deuxime forme avec la clause SELECT permet d'insrer dans une table
des lignes provenant d'une table de la base. Le SELECT a la mme syntaxe
qu'un SELECT normal.
Exemple 3.2
Enregistrer la participation de MARTIN au groupe de projet numro
10 :
3.2 Modication
La commande UPDATE permet de modier 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 modies ; exp1, exp2,... sont des expressions. Elles peuvent
aussi tre un ordre SELECT renvoyant les valeurs attribues aux colonnes
(deuxime variante de la syntaxe).
Les valeurs de col1, col2... sont mises jour dans toutes les lignes satisfaisant le prdicat. La clause WHERE est facultative. Si elle est absente, toutes
les lignes sont mises jour.
Le prdicat peut contenir des sous-interrogations (voir 4.6).
3.3.
SUPPRESSION
21
Exemples 3.3
(a) Faire passer MARTIN dans le dpartement 10 :
UPDATE EMP
SET DEPT = 10
WHERE NOME = 'MARTIN'
(b) Augmenter de 10 % les commerciaux :
UPDATE EMP
SET SAL = SAL * 1.1
WHERE POSTE = 'COMMERCIAL'
(c) Donner CLEMENT un salaire 10 % au dessus de la moyenne des
salaires des secrtaires :
UPDATE EMP
SET SAL = (SELECT AVG(SAL) * 1.10
FROM EMP
WHERE POSTE = 'SECRETAIRE')
WHERE NOME = 'CLEMENT'
On remarquera que la moyenne des salaires sera calcule pour les valeurs qu'avaient les salaires au dbut de l'excution de la commande
UPDATE et que les modications eectues sur la base pendant l'excution de cette commande ne seront pas prises en compte.
(d) Enlever (plus exactement, mettre la valeur NULL) la commission
de MARTIN :
UPDATE EMP
SET COMM = NULL
WHERE NOME = 'MARTIN'
3.3 Suppression
L'ordre DELETE permet de supprimer des lignes d'une table.
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 (heureusement qu'il
existe ROLLBACK !).
Le prdicat peut contenir des sous-interrogations (voir 4.6).
22
CHAPITRE 3.
3.4 Transactions
3.4.1
Dnitions
Une transaction est un ensemble de modications de la base qui forment
un tout indivisible : il faut eectuer ces modications entirement ou pas du
tout, sous peine de laisser la base dans un tat incohrent.
Exemple 3.5
Une transaction peut transfrer une somme d'argent entre deux comptes
d'un client d'une banque. Elle comporte deux ordres : un dbit sur un
compte et un crdit sur un autre compte. Si un problme empche le
crdit, le dbit doit tre annul.
Une transaction est termine :
soit par une validation qui entrine les modications,
soit par une annulation qui remet la base dans son tat initial.
Dans le modle plat des transactions (celui utilis par SQL), deux transactions ne peuvent se chevaucher ni tre embotes l'une dans l'autre : dans
une session de travail, la transaction en cours doit se terminer avant qu'une
nouvelle transaction ne puisse dmarrer.
Ce mcanisme est aussi utilis pour assurer l'intgrit de la base en cas
de n anormale d'une tche utilisateur : il y a automatiquement annulation
des transactions non termines.
3.4.
23
TRANSACTIONS
par I, car ainsi il n'a pas considrer les interactions avec les autres
transactions,
par la vrication automatique des contraintes d'intgrit par le SGBD.
On verra dans l'tude de l'utilisation et de l'implmentation des SGBD
que I est eectu par le systme de contrle de la concurrence et AD sont
supports par les procdures de reprise aprs panne.
3.4.2
COMMITED
les insertions,
Remarque 3.1
Certains ordres SQL, notamment ceux de dnitions de donnes (create
table...), provoquent une validation automatique de la transaction en
cours.
3.4.3
Dans la norme SQL, la structure des transactions est plate et les transactions sont chanes :
24
CHAPITRE 3.
Transactions embotes
Le modle des transactions embotes permet une transaction d'avoir
des sous-transactions lles, qui elles-mmes peuvent avoir des lles.
L'annulation d'une transaction parente annule toutes les transactions
lles mais l'annulation d'une transaction lle n'annule pas ncessairement
la transaction mre. Si la transaction mre n'est pas annule, les autres transactions lles ne sont pas annules.
l'annulation d'une transaction lle, la transaction mre peut
dcider d'un traitement substitutif ;
reprendre la transaction annule ;
s'annuler (si elle ne peut pas se passer de la transaction annule) ;
ou mme ignorer l'annulation (si le traitement que devait eectuer la
transaction annule n'est pas indispensable).
Ainsi, un traitement eectu dans une transaction lle peut tre repris ou
tre remplac par un traitement alternatif pour arriver au bout du traitement
complet. Ce modle est bien adapt aux transactions longues et multi-sites
(une transaction lle par site sur le rseau) qui doivent faire face des problmes de rupture de rseau.
SQL ne supporte pas ce modle de transaction.
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 (appels aussi points de sauvegarde ;
savepoint en anglais).
On peut dsigner des points de reprise dans une transaction :
savepoint nomPoint
On peut ensuite annuler toutes les modications eectues depuis un
point de reprise s'il y a eu des problmes :
3.4.
TRANSACTIONS
25
rollback to nomPoint
On vite ainsi d'annuler toute la transaction et on peut essayer de pallier
le problme au lieu d'annuler la transaction globale.
Chapitre 4
Interrogations
4.1 Syntaxe gnrale
L'ordre SELECT possde six clauses direntes, dont seules les deux premires sont obligatoires. Elles sont donnes ci-dessous, dans l'ordre dans lequel elles doivent apparatre, quand elles sont utilises :
SELECT ...
FROM ...
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY ...
SELECT [DISTINCT] *
ou
26
4.2.
27
CLAUSE SELECT
d'liminer les duplications : si, dans le rsultat, plusieurs lignes sont identiques, une seule sera conserve.
Exemples 4.1
(a)
(b)
(c)
(d) La requte suivante va provoquer une erreur car on utilise le nom Salaire
dans la clause where :
Exemple 4.2
Le nom complet d'une colonne d'une table est le nom de la table suivi d'un
point et du nom de la colonne. Par exemple : EMP.MATR, EMP.DEPT,
DEPT.DEPT
Le nom de la table peut tre omis quand il n'y a pas d'ambigut. Il
doit tre prcis s'il y a une ambigut, ce qui peut arriver quand on fait une
slection sur plusieurs tables la fois et que celles-ci contiennent des colonnes
qui ont le mme nom (voir en particulier 4.5).
4.2.1
La norme SQL-2, mais pas tous les SGBD, permet d'avoir des select embots parmi les expressions. Il faut viter cette facilit dans les programmes
si on veut qu'ils soient portables. Rien n'empche de l'utiliser en interactif si
elle existe.
C'est possible avec Oracle :
null.
Si cette possibilit existe, le select embot peut mme alors tre synchronis avec le select principal (le vrier sur le SGBD que vous utilisez). La
requte suivante ache les noms des employs avec le nombre d'employs qui
gagnent plus :
28
CHAPITRE 4.
INTERROGATIONS
select nomE,
(select count(*) from emp where sal > e1.sal) as rang
from emp e1
Attention, avec Oracle on ne peut utiliser rang dans la clause where (
vrier sur votre SGBD). Par exemple, la requte suivante renverra une erreur :
select nomE,
(select count(*) from emp where sal > e1.sal) as rang
from emp e1
where rang < 8
Si on veut contourner cette erreur, on peut le faire ainsi (mais il y a un
moyen plus simple pour obtenir les 8 plus gros salaires) :
Pseudo-colonnes
rownum est le numro des lignes slectionnes par une clause where : le
rownum de la premire ligne a la valeur 1, celui de la deuxime la
valeur 2, etc.
rownum permet de numroter les lignes :
4.3.
29
CLAUSE FROM
> 5
select nome
from (select rownum RANG, nome from emp where sal > 2000)
where RANG > 5
On peut ainsi rcuprer les lignes numrotes entre deux nombres :
order by ;
la
30
CHAPITRE 4.
INTERROGATIONS
certaines ambiguts, quand la mme table est utilise de plusieurs faons diffrentes dans une mme interrogation (voir 4.5.2 ou 4.6.3 pour des exemples
caractristiques). Quand on a donn un synonyme une table dans une requte, elle n'est plus reconnue sous son nom d'origine dans cette requte.
Le nom complet d'une table est celui de son crateur (celui du nom du
schma selon la norme SQL-2 : voir 5.1), suivi d'un point et du nom de la
table. Par dfaut, le nom du crateur est celui de l'utilisateur en cours. Ainsi,
on peut se dispenser de prciser ce nom quand on travaille sur ses propres
tables. Mais il faut le prciser ds que l'on se sert de la table d'un autre
utilisateur.
Quand on prcise plusieurs tables dans la clause FROM, on obtient le
produit cartsien des tables. On verra plus loin (remarque 4.5 page 34) une
syntaxe spciale pour les produits cartsiens.
Exemple 4.3
Produit cartsien des noms des dpartements par les numros des dpartements :
NOMD
-----------------FINANCES
FINANCES
FINANCES
RECHERCHE
RECHERCHE
RECHERCHE
VENTES
VENTES
VENTES
Exemples 4.4
(a) Pour obtenir la liste des employs avec le pourcentage de leur salaire
par rapport au total des salaires, il fallait auparavant utiliser une vue
(voir 5.3). Il est maintenant possible d'avoir cette liste avec une seule
instruction SELECT :
4.4.
CLAUSE WHERE
31
Remarque 4.1
Ce select n'est pas une sous-interrogation ; on ne peut synchroniser le
select avec les autres tables du from (voir 4.6.3).
4.4.1
WHERE prdicat
Un prdicat simple est la comparaison de deux expressions ou plus au
moyen d'un oprateur logique :
32
CHAPITRE 4.
WHERE
WHERE
WHERE
WHERE
WHERE
WHERE
WHERE
WHERE
WHERE
WHERE
WHERE
WHERE
WHERE
INTERROGATIONS
exp1 = exp2
exp1 != exp2
exp1 < exp2
exp1 > exp2
exp1 <= exp2
exp1 >= exp2
exp1 BETWEEN exp2 AND exp3
exp1 LIKE exp2
exp1 NOT LIKE exp2
exp1 IN (exp2, exp3,...)
exp1 NOT IN (exp2, exp3,...)
exp IS NULL
exp IS NOT NULL
>=)
: pour les types date, la relation d'ordre est l'ordre chronologique ; pour
est vrai si exp1 est gale l'une des expressions de la liste entre parenthses.
teste l'galit de deux chanes en tenant compte des caractres jokers dans
la 2me chane :
_ remplace 1 caractre exactement
LIKE '_AR%'
et
pour le
sera vraie.
Remarques 4.2
(a) L'utilisation des jokers ne fonctionne qu'avec LIKE ; elle ne fonctionne
pas avec =.
(b) 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
4.5.
33
JOINTURE
Remarque 4.3
Le prdicat expr
= NULL
NOT).
4.4.2
Oprateurs logiques
Exemples 4.5
(a) Slectionner les employs du dpartement 30 ayant un salaire suprieur
1500 frs.
La clause WHERE peut aussi tre utilise pour faire des jointures (vues
dans le cours sur le modle relationnel) et des sous-interrogations (une des
valeurs utilises dans un WHERE provient d'une requte SELECT embote)
comme nous allons le voir dans les sections suivantes.
4.5 Jointure
Quand on prcise plusieurs tables dans la clause FROM, on obtient le produit cartsien des tables. Ce produit cartsien ore en gnral peu d'intrt.
34
CHAPITRE 4.
INTERROGATIONS
Exemple 4.6
Liste des employs avec le nom du dpartement o ils travaillent :
Remarque 4.5
La norme SQL2 a aussi une syntaxe spciale pour le produit cartsien
de deux tables :
4.5.
35
JOINTURE
4.5.1
Jointure naturelle
Lorsque l'on a une qui-jointure (c'est--dire quand la condition de jointure est une galit de valeurs entre une colonne de la premire table et une
colonne de la deuxime), il est le plus souvent inutile d'avoir les deux colonnes
de jointure dans le rsultat, puisque les valeurs sont gales. On peut prfrer
la jointure naturelle qui ne garde dans la jointure qu'une colonne pour les
deux colonnes qui ont servi la jointure. videmment, moins d'utiliser
* dans la clause du select, on ne voit pas la dirence l'achage. Voici
l'exemple prcdent avec une jointure naturelle :
join
toutes les colonnes qui ont le mme nom dans les deux tables.
Remarque 4.6
Si on utilise une jointure naturelle, il est interdit de prxer une colonne utilise pour la jointure par un nom de table. La requte suivante
provoque une erreur :
using
(s'il y a plusieurs
Il peut tre utile de rassembler des informations venant d'une ligne d'une
table avec des informations venant d'une autre ligne de la mme table.
Dans ce cas il faut renommer au moins l'une des deux tables en lui donnant un synonyme (voir 4.3), an de pouvoir prxer sans ambigut chaque
nom de colonne.
36
CHAPITRE 4.
INTERROGATIONS
Exemple 4.7
Lister les employs qui ont un suprieur, en indiquant pour chacun le
nom de son suprieur :
Jointure externe
null,
RIGHT indique que la table dans laquelle on veut acher toutes les lignes
dept) est droite de RIGHT OUTER JOIN. C'est dans l'autre table
(la table
LEFT OUTER JOIN qui est utilis si on veut acher toutes les lignes de
OUTER JOIN) et FULL OUTER JOIN si on
Remarque 4.7
Oracle n'accepte cette syntaxe que depuis la version 9. Pour les versions
plus anciennes, la requte doit s'crire :
4.5.
37
JOINTURE
EMP.DEPT
pro-
4.5.4
ou encore
between
et
in.
Exemples 4.8
(a) Liste des employs, avec tous les employs qui gagnent plus :
38
CHAPITRE 4.
INTERROGATIONS
4.6 Sous-interrogation
Une caractristique puissante de SQL est la possibilit qu'un prdicat
employ dans une clause WHERE (expression droite d'un oprateur de
comparaison) comporte un SELECT embot.
Par exemple, la slection des employs ayant mme poste que MARTIN
peut s'crire en joignant la table EMP avec elle-mme :
SELECT EMP.NOME
FROM EMP JOIN EMP MARTIN ON EMP.POSTE = MARTIN.POSTE
WHERE MARTIN.NOME = 'MARTIN'
mais on peut aussi la formuler au moyen d'une sous-interrogation :
4.6.1
Exemple 4.9
Liste des employs travaillant dans le mme dpartement que MERCIER :
Exemples 4.10
(a) Liste des employs du dpartement 10 ayant mme poste que quelqu'un
du dpartement VENTES :
4.6.
SOUS-INTERROGATION
39
FROM EMP
WHERE DEPT = (SELECT DEPT
FROM DEPT
WHERE NOMD = 'VENTES'))
(b) Liste des employs ayant mme poste que MERCIER ou un salaire
suprieur CHATEL :
Exemple 4.11
Liste des employs travaillant LYON et ayant mme poste que FREMONT.
4.6.2
40
CHAPITRE 4.
INTERROGATIONS
les oprateurs obtenus en ajoutant ANY ou ALL la suite des oprateurs de comparaison classique
WHERE
WHERE
WHERE
WHERE
exp
exp
exp
exp
o op est un
Exemple 4.12
Liste des employs gagnant plus que tous les employs du dpartement 30 :
IN est
!= ALL.
L'oprateur
valent
4.6.3
quivalent
= ANY,
et l'oprateur
NOT IN
est qui-
Sous-interrogation synchronise
Exemple 4.13
Liste des employs ne travaillant pas dans le mme dpartement que
leur suprieur.
4.6.
SOUS-INTERROGATION
4.6.4
41
WHERE
WHERE
WHERE
WHERE
WHERE
(exp,
(exp,
(exp,
(exp,
(exp,
exp,...)
exp,...)
exp,...)
exp,...)
exp,...)
Exemple 4.14
Employs ayant mme poste et mme salaire que MERCIER :
4.6.5
Clause EXISTS
La clause
et prend la valeur vrai s'il existe au moins une ligne satisfaisant les conditions
de la sous-interrogation.
Exemple 4.15
42
CHAPITRE 4.
INTERROGATIONS
une ligne est trouve dans la table EMP, EXISTS prend la valeur vrai
et la ligne de DEPT satisfait les critres de l'interrogation.
Souvent on peut utiliser IN la place de la clause EXISTS. Essayez sur
l'exemple prcdent.
Remarque 4.9
Il faut se mer lorsque l'on utilise EXISTS en prsence de valeurs
NULL. Si on veut par exemple les employs qui ont la plus grande
commission par la requte suivante,
S,
par :
D = {a
select A from R R1
where not exists
(select C from S
where not exists
(select A, B from R
where A = R1.A and B = S.C))
En fait, on peut remplacer les colonnes des select placs derrire des not
exists par ce que l'on veut, puisque seule l'existence ou non d'une ligne
compte. On peut crire par exemple :
select A from R R1
where not exists
(select null from S
where not exists
4.6.
43
SOUS-INTERROGATION
Exemple 4.16
La rponse la question Quels sont les dpartements qui participent
Dept S o R = (PARTICIPATION
( JN {Matr} indique une jointure na-
JN {Matr}
SELECT DEPT
FROM PARTICIPATION NATURAL JOIN EMP E1
WHERE NOT EXISTS
(SELECT CODEP FROM PROJET
WHERE NOT EXISTS
(SELECT DEPT, CODEP
FROM PARTICIPATION NATURAL JOIN EMP
WHERE DEPT = E1.DEPT
AND CODEP = PROJET.CODEP))
Remarque 4.10
Il faudrait ajouter DISTINCT dans le premier select pour viter
les doublons.
Sur ce cas particulier on voit qu'il est inutile de travailler sur la jointure de PARTICIPATION et de EMP pour le SELECT externe. On
peut travailler sur la table DEPT. Il en est de mme sur tous les cas
o la table R est une jointure. D'aprs cette remarque, le SELECT
prcdent devient :
44
CHAPITRE 4.
INTERROGATIONS
ne contient dans la colonne qui sert pour la division que des valeurs qui
existent dans la table diviseur, on peut exprimer la division en utilisant
les regroupements (tudis dans la prochaine section) et en comptant
les lignes regroupes. Pour l'exemple des dpartements qui participent
tous les projets, on obtient :
select dept
from emp natural join participation
group by dept
having count(distinct codeP) =
(select count(distinct codeP) from projet)
codeP associs un dpartement donn
tous les codeP possibles, a signie que ce
codeP
PROJET).
PARTICIPATION
codeP
de la
qui rfrence la cl
codeP
codeP doit
select dept
from emp natural join participation
where codeP in (select codeP from projet)
group by dept
having count(distinct codeP) =
(select count(distinct codeP) from projet)
4.8.
45
CLAUSE GROUP BY
AVG
moyenne
SUM
somme
MIN
MAX
VARIANCE
variance
STDDEV
COUNT(*)
nombre de lignes
COUNT(col )
COUNT(DISTINCT col )
Exemples 4.17
(a)
(b)
Les valeurs NULL sont ignores par les fonctions de groupe. Ainsi, SUM(col)
est la somme des valeurs qui ne sont pas gales NULL de la colonne 'col'.
De mme, AVG est la somme des valeurs non NULL divise par le nombre
de valeurs non NULL.
Il faut remarquer qu' un niveau de profondeur (relativement aux sousinterrogations), d'un SELECT, les fonctions de groupe et les colonnes doivent
tre toutes du mme niveau de regroupement. Par exemple, si on veut le nom
et le salaire des employs qui gagnent le plus dans l'entreprise, la requte
suivante provoquera une erreur :
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.
Des lignes peuvent tre limines avant que le groupe ne soit form grce
la clause WHERE.
46
CHAPITRE 4.
INTERROGATIONS
Exemples 4.18
(a)
(b)
(c)
(d)
RESTRICTION :
Une expression d'un SELECT avec clause GROUP BY ne peut videmment que correspondre une caractristique de groupe. SQL n'est pas trs
intelligent pour comprendre ce qu'est une caractristique de groupe ; une
expression du SELECT ne peut tre que :
soit une fonction de groupe,
soit une expression gurant dans le GROUP BY.
L'ordre suivant est invalide car NOMD n'est pas une expression du GROUP
BY :
4.10.
FONCTIONS
47
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 gurant dans la clause GROUP BY.
Exemple 4.19
4.10 Fonctions
Nous allons dcrire ci-dessous les principales fonctions disponibles dans
Oracle. Il faut remarquer que ces fonctions ne sont pas standardises et ne
sont pas toutes disponibles dans les autres SGBD ; elles peuvent aussi avoir
une syntaxe dirente,ou mme un autre nom.
48
CHAPITRE 4.
4.10.1
INTERROGATIONS
Fonctions arithmtiques
ABS(n )
valeur absolue de n
MOD(n1, n2 )
n1 modulo n2
POWER(n, e )
n la puissance e
ROUND(n [, p ])
SIGN(n )
SQRT(n )
racine carre de n
TRUNC(n [, p ])
GREATEST(n1, n2,...)
LEAST(n1, n2,...)
TO_CHAR(n, format )
TO_NUMBER(chane )
Exemple 4.20
Calcul du salaire journalier :
LENGTH(chane )
prend comme valeur la longueur de la chane.
Exemple 4.21
Position du deuxime 'A' dans les postes :
4.10.
FONCTIONS
49
RPAD(chane, long [,car ]) a une fonction analogue, chane tant complte droite.
Exemple :
LTRIM(chane, car )
supprime les caractres l'extrmit gauche de la chane chane tant qu'ils
appartiennent l'ensemble de caractres car. Si l'ensemble des caractres
n'est pas donn, ce sont les espaces qui sont enlevs.
RTRIM(chane, car )
a une fonction analogue, les caractres tant supprims l'extrmit droite
de la chane. Si l'ensemble des caractres n'est pas donn, ce sont les espaces
qui sont enlevs.
Exemple : supprimer les A et les M en tte des noms :
50
CHAPITRE 4.
INTERROGATIONS
MI
PR
< >
Exemple 4.22
Achage des salaires avec au moins trois chires (dont deux dcimales) :
anne
YY
WW
MM
numro du mois
DDD
DD
HH ou HH12
HH24
MI
minutes
Tout caractre spcial insr dans le format sera reproduit dans la chane
de caractre rsultat. On peut galement insrer dans le format une chane
de caractres quelconque, condition de la placer entre guillemets.
Exemple 4.23
TO_NUMBER (chane )
convertit une chane de caractres en nombre (quand la chane de caractres
est compose de caractres numriques.
ASCII(chane )
donne le code ASCII du premier caractre de chane.
4.10.
51
FONCTIONS
TO_DATE(chane, format )
permet de convertir une chane de caractres en donne de type date. Le
4.10.3
ROUND(date, prcision )
arrondit la date la prcision spcie. La prcision est indique en utilisant
un des masques de mise en forme de la date.
Exemple : premier jour de l'anne o les employs ont t embauchs :
SYSDATE ou CURRENT_DATE
a pour valeur la date et l'heure courante du systme d'exploitation hte.
Exemple : nombre de jour depuis l'embauche :
Une fonction de choix existe dans la norme SQL2 (et dans Oracle depuis
la version 9i). Elle correspond la structure
switch
du langage C (ou
case
de Pascal ou Ada).
Elle remplace avantageusement la fonction
CASE
conditions quelconques et une qui donne une valeur suivant la valeur d'une
expression.
CASE
WHEN condition1 THEN expression1
[WHEN condition2 THEN expression2 ]
. . .
[ELSE expression_dfaut ]
END
Remarques 4.12
(a) La condition qui suit un
WHEN
boolenne.
(b) Si aucune condition n'est remplie et s'il n'y a pas de ELSE,
null
retourn.
(c) Les direntes expressions renvoyes doivent tre de mme type.
est
52
CHAPITRE 4.
INTERROGATIONS
CASE expression
WHEN valeur1 THEN expression1
[WHEN valeur2 THEN expression2 ]
. . .
[ELSE expression_dfaut]
END
Remarques 4.13
(a) Attention, ne fonctionne pas pour le cas o une des valeurs n'est pas
renseigne (when
taxe de
(b) Si l'expression n'est gale aucune valeur et s'il n'y a pas de ELSE,
null
est retourn.
Exemple 4.24
Liste des employs avec leur catgorie (prsident = 1, directeur = 2,
autre = 3), en appelant la colonne Niveau :
SELECT nome,
CASE
WHEN (poste
WHEN (poste
ELSE 3
END Niveau
FROM emp;
= 'Prsident') THEN 1
= 'Directeur') THEN 2
SELECT nome,
CASE poste
WHEN 'Prsident' THEN 1
WHEN 'Directeur' THEN 2
ELSE 3
END Niveau
FROM emp;
Pour les versions d'Oracle antrieures la version 9i, il est possible d'utiliser la fonction
decode.
4.11.
CLAUSE ORDER BY
53
Exemple 4.25
Liste des employs avec leur catgorie (prsident = 1, directeur = 2,
autre = 3) :
Nom de l'utilisateur
USER
a pour valeur le nom sous lequel l'utilisateur est entr dans Oracle.
Exemple 4.26
la place de :
on peut taper
54
CHAPITRE 4.
INTERROGATIONS
Cette nouvelle syntaxe doit tre utilise pour les interrogations exprimes
l'aide d'un oprateur boolen UNION, INTERSECT ou MINUS.
Elle permet aussi de simplier l'criture d'un tri sur une colonne qui
contient une expression complexe.
Exemples 4.27
(a) Liste des employs et de leur poste, trie par dpartement et dans
chaque dpartement par ordre de salaire dcroissant :
(c)
(d)
4.12.1
Oprateur UNION
UNION ALL.
Exemple 4.28
Liste des ingnieurs des deux liales :
4.13.
4.12.2
55
Oprateur INTERSECT
L'oprateur INTERSECT permet d'obtenir l'ensemble des lignes communes deux interrogations.
Exemple 4.29
Liste des dpartements qui ont des employs dans les deux liales :
Oprateur EXCEPT
Exemple 4.30
Liste des dpartements qui ont des employs dans la premire liale
mais pas dans la deuxime.
Clause ORDER BY
ORDER BY
56
CHAPITRE 4.
INTERROGATIONS
rownum
numrote
avant un ventuel tri (ce qui n'est pas le cas avec limit ou top) comme on l'a
vu en 4.2.2.
Si un select comporte une clause order by il faut donc ruser avec Oracle
en utilisant une sous-requte qui trie, alors que la requte principale limite
le nombre de lignes :
select * from
(select nomE, sal
from emp
order by sal)
where rownum <= 10
Chapitre 5
Langage de dnition des donnes
Le langage de dnition des donnes (LDD est la partie de SQL qui
permet de dcrire les tables et autres objets manipuls par le SGBD.
5.1 Schma
Un schma est un ensemble d'objets (tables, vues, index, autorisations,
etc...) grs ensemble. On pourra ainsi avoir un schma li la gestion du
personnel et un autre li la gestion des clients. Un schma est cr par la
commande
Cette notion introduite par la norme SQL2 n'est pas vraiment prise en
compte par Oracle qui identie pour le moment un nom de schma avec un
nom d'utilisateur.
Autre notion de SQL2, le catalogue, est un ensemble de schmas. Un catalogue doit ncessairement comprendre un schma particulier qui correspond
au dictionnaire des donnes (voir 5.8).
5.2 Tables
5.2.1
CREATE TABLE AS
57
58
CHAPITRE 5.
Exemple 5.1
ALTER TABLE
Les sections 2.2.2 et 2.2.3 montrent comment grer les contraintes d'intgrit avec la commande ALTER TABLE. Cette commande permet aussi de
grer les colonnes d'une table : ajout d'une colonne (aprs toutes les autres
colonnes), suppression et modication d'une colonne existante.
5.2.
TABLES
59
Exemple 5.2
Exemple 5.3
60
CHAPITRE 5.
5.2.4
Si une table ou une vue doit tre utilise par plusieurs utilisateurs, il peut
tre intressant de lui donner un synonyme public pour que les utilisateurs
ne soient pas obligs de prxer le nom de la table ou de la vue par le nom de
son crateur. Oracle ore la commande
pour cela.
Exemple 5.4
5.3 Vues
Une vue est une vision partielle ou particulire des donnes d'une ou
plusieurs tables de la base.
La dnition d'une vue est donne par un SELECT qui indique les donnes de la base qui seront vues.
Les utilisateurs pourront consulter la base, ou modier la base (avec certaines restrictions) 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 dnition de la vue est enregistre dans la base, et pas les donnes
de la vue. On peut parler de table virtuelle.
5.3.1
CREATE VIEW
dfaut, les colonnes de la vue ont pour nom les noms des colonnes rsultat
du SELECT. Si certaines colonnes rsultat du SELECT sont des expressions
sans nom, il faut alors obligatoirement spcier les noms de colonnes de la
vue.
5.3.
VUES
61
Le SELECT peut contenir toutes les clauses d'un SELECT, sauf la clause
ORDER BY.
Exemple 5.5
Vue constituant une restriction de la table EMP aux employs du dpartement 10 :
5.3.2
DROP VIEW
5.3.3
Une vue peut tre rfrence dans un SELECT de la mme faon qu'une
table. Ainsi, il est possible de consulter la vue EMP10. Tout se passe comme
s'il existait une table EMP10 des employs du dpartement 10 :
62
CHAPITRE 5.
Une vue peut crer des donnes qu'elle ne pourra pas visualiser. On peut
ainsi ajouter un employ du dpartement 20 avec la vue EMP10.
Si l'on veut viter cela il faut ajouter WITH
CHECK OPTION
Exemple 5.6
5.3.4
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). Ceci favorise l'indpendance entre
les programmes et les donnes. Si la structure des donnes est modie, les
programmes ne seront pas modier si l'on a pris la prcaution d'utiliser
des vues (ou si on peut se ramener travailler sur des vues). Par exemple, si
une table est dcoupe en plusieurs tables aprs l'introduction de nouvelles
donnes, on peut introduire une vue, jointure des nouvelles tables, et la nommer du nom de l'ancienne table pour viter de rcrire les programmes qui
utilisaient l'ancienne table.
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 ; on peut de plus ajouter des
restrictions d'utilisation sur cette vue comme on le verra en 5.9.1.
Dans le mme ordre d'ides, une vue peut tre utilise pour implanter
une contrainte d'intgrit grce l'option WITH CHECK OPTION.
Une vue peut galement simplier la consultation de la base en enregistrant des SELECT complexes.
Exemple 5.7
En crant la vue
5.4.
63
INDEX
5.4 Index
Considrons le SELECT suivant :
= 'MARTIN'
5.4.1
CREATE INDEX
Remarque 5.2
Deux index construits sur des tables d'un mme utilisateur ne peuvent
avoir le mme nom (mme s'ils sont lis deux tables direntes).
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 modications de la table.
Un index peut porter sur plusieurs colonnes : la cl d'accs sera la concatnation des direntes colonnes.
On peut crer plusieurs index indpendants sur une mme table.
5.4.2
Les requtes SQL sont transparentes au fait qu'il existe un index ou non.
C'est l'optimiseur de requtes du SGBD qui, au moment de l'excution de
chaque requte, recherche s'il peut s'aider d'un index.
64
CHAPITRE 5.
5.4.
INDEX
5.4.3
65
DROP INDEX
Remarque 5.3
Un index est automatiquement supprim ds qu'on supprime la table
laquelle il appartient.
5.4.4
Types d'index
66
CHAPITRE 5.
Il existe aussi d'autres types d'index qui peuvent tre utiliss dans des
circonstances particulires ; les plus courants sont les suivants :
Index bitmap : ils ne sont utiles que lorsque les donnes de la table ne
sont presque jamais modies. Ils sont le plus souvent utiliss dans les
applications dcisionnelles OLAP (On Line Analytical Processing) qui
facilitent les prises de dcisions lies l'analyse des donnes conserves par une entreprise. L'implmentation est trs dirente de celle
des B-arbres. Pour chaque valeur distincte de la colonne indexe l'index contient un tableau de bits (autant de bits que de lignes dans la
table) indiquant si chaque ligne de la table a cette valeur. Il est facile
de combiner dirents tableaux de bits pour rpondre aux slections
de type col1=valeur1
and col2=valeur2
col1
et
col2
sont in-
dexes par un index bitmap. Lorsque les index bitmap sont utiliss par
l'optimiseur ils peuvent fournir de trs bonnes performances. Oracle
a aussi introduit un nouveau type d'index bitmap pour acclrer les
jointures.
Index de type table de hachage : ils ne sont plus vraiment utiliss car ils
n'orent pas d'avantages consquents par rapport aux B-arbres. Ils
orent un accs quasi instantan une ligne dont on donne la cl
mais ils ne permettent pas le parcours dans l'ordre des cls et ne sont
donc d'aucune utilit pour les slections du type col1
> valeur1.
> fonction(...).
des valeurs d'une fonction sur toutes les lignes de la table qui sont
indexs.
5.4.5
L'utilisateur peut avoir des informations sur les index qu'il a crs en
consultant la table
lui donne les index qu'il peut utiliser (mme s'il ne les a pas cres).
5.5.
67
exemple un nombre entier, dont la valeur n'est pas lie aux proprits des
employs.
5.5.1
Dans les premiers temps des SGBD, les dveloppeurs utilisaient des valeurs enregistres dans des tables de la base pour crer les identicateurs
dont ils avaient besoin. L'ide est de crer une suite de nombres entiers de
telle sorte que jamais le mme nombre n'est utilis deux fois, mme si deux
transactions distinctes ont besoin d'un identicateur en mme temps. Voici
les procds les plus courants :
Le premier identicateur des lignes d'une table est gal 1. Pour trouver les identicateurs suivants il sut d'ajouter 1 la plus grande valeur
de la table ; par exemple,
68
CHAPITRE 5.
5.5.2
Autres solutions
Tous les SGBD orent dsormais une facilit pour obtenir des identicateurs sans avoir accder une table. Cette facilit permet d'obtenir des
valeurs qui sont gnres automatiquement par le SGBD. Cette facilit n'est
malheureusement pas standardise ; par exemple,
MySQL permet d'ajouter la clause
DB2 et SQL Server ont une clause
est un identiant ;
Oracle, DB2 et PostgreSQL utilisent des squences.
La section suivante prsente les squences.
5.5.3
Squences
Exemple 5.8
Remarque 5.4
Utiliser un incrment suprieur 1 permet de disposer de plusieurs
identicateurs en un seul appel, pour amliorer les performances.
5.6.
69
Exemple 5.9
avec la table
dual
Remarques 5.5
(a)
currval
nextval
n'est pas dni tant qu'on n'a pas appel au moins une fois
dans la session de travail.
(b) La valeur de
transaction.
(c)
nextval
nextval
non valide.
en consultant la table
pas cres).
Procdure stocke
70
CHAPITRE 5.
Exemple 5.11
Voici une procdure stocke Oracle qui prend en paramtre un numro de dpartement et un pourcentage, augmente tous les salaires
des employs de ce dpartement de ce pourcentage et renvoie dans un
paramtre le cot total pour l'entreprise.
5.6.
71
errors.
On peut
aussi voir ces erreurs en utilisant le dictionnaire des donnes (voir 5.6.3).
5.6.2
Fonction stocke
IN
sont accepts.
Exemple 5.12
Le code suivant cre une fonction qui permet le calcul en franc d'un
montant en euros :
72
CHAPITRE 5.
5.6.3
Tables du dictionnaire
Pour avoir les noms des procdures on peut utiliser les vues
ou
ALL_OBJECTS.
La vue
USER_SOURCE
USER_PROCEDURES
Exemples 5.13
(a) Voici un ordre SQL pour avoir, sous Oracle, les noms des procdures
stockes et le nom de leur propritaire :
augmentation
euro_to_fr
5.7 Trigger
Les triggers (dclencheurs en franais) ressemblent aux procdures stockes car ils sont eux aussi compils et enregistrs dans le dictionnaire des
donnes de la base et ils sont le plus souvent crits dans le mme langage.
La dirence est que leur excution est dclenche automatiquement par
des vnements lis des actions sur la base. Les vnements dclencheurs
peuvent tre les commandes LMD insert, update, delete ou les commandes
LDD create, alter, drop.
Les triggers compltent les contraintes d'intgrit en permettant des contrles
et des traitements plus complexes. Par exemple, on peut implanter la rgle
qu'il est interdit de baisser le salaire d'un employ (on peut toujours rver).
Pour des contraintes trs complexes, des procdures stockes des procdures
stockes peuvent encapsuler des requtes SQL.
Si l'excution d'un trigger provoque une erreur, par exemple s'il viole une
contrainte d'intgrit, la requte qui l'a dclench est annule (mais pas la
transaction en cours).
5.7.
73
TRIGGER
Exemple 5.14
Le trigger suivant met jour automatiquement une table cumul qui
totalise les augmentations de salaire de chaque employ.
Les pseudo-variables
et nouvelles valeurs
delete et
:OLD
a la
:NEW et :OLD :
CREATE OR REPLACE TRIGGER totalAugmentation
AFTER UPDATE OF sal ON emp
REFERENCING old as ancien, new as nouveau
FOR EACH ROW
update cumul
set augmentation = augmentation + nouveau.sal - ancien.sal
where matricule = ancien.matr
Un trigger peut tre lanc avant (BEFORE) ou aprs (AFTER) la commande
prxes par
dclenchante.
Le code d'un trigger ne peut contenir de
commit
ou de
rollback.
74
CHAPITRE 5.
WHEN
old
Exemple 5.15
Sous Oracle, comme pour les procdures stockes, les erreurs de compilation des triggers s'achent avec la commande SQL*PLUS show
errors.
Remarque 5.8
L'outil SQL*FORMS d'Oracle (construction et utilisation d'crans de
saisie) utilise aussi le terme de trigger mais pour des programmes dont
l'excution est dclenche par des actions de l'utilisateur, qui ne sont
pas toujours lies aux donnes enregistres dans la base (par exemple,
sortie d'une zone de saisie ou entre dans un bloc logique de l'cran de
saisie).
5.7.1
Dictionnaire de donnes
5.8.
75
DICTIONNAIRE DE DONNES
TRIGGER_NAME
----------CREETOTAL
TRIGGER_TYPE
-------------AFTER EACH ROW
TRIGGERING_EVENT
---------------INSERT
BASE_OBJECT_TYPE TABLE_NAME
---------------- ---------TABLE
EMP
COLUMN_NAME
-----------
REFERENCING_NAMES
-------------------------------REFERENCING NEW AS NEW OLD AS OLD
WHEN_CLAUSE
-----------
STATUS
DESCRIPTION
-------- ----------ENABLED creetotal AFTER INSERT ON emp
for each row
ACTION_TYPE TRIGGER_BODY
----------- ---------------------------------------------PL/SQL
BEGIN insert into cumul (matricule, augmentation)
values (:NEW.matr, 0); END;
On obtient quelques informations complmentaires avec la vue
USER_TRIGGER_COLS.
76
CHAPITRE 5.
parenthses) :
DICTIONARY (DICT)
USER_TABLES
USER_CATALOG (CAT)
tables et vues sur lesquelles l'utilisateur courant a des droits, l'exclusion des tables et vues du dictionnaire de donnes
USER_TAB_COLUMNS (COLS)
colonnes
de
chaque
table
ou
vue
USER_VIEWS
USER_TAB_PRIVS
donneur
ou
receveur
d'autorisation
USER_CONSTRAINTS
USER_CONS_COLUMNS
Exemples 5.16
(a) Colonnes de la table EMP :
5.9.
77
5.9.1
GRANT
SELECT
droit de lecture
INSERT
UPDATE
DELETE
ALTER
INDEX
ALL
78
CHAPITRE 5.
REVOKE
Remarque 5.9
Si on enlve un privilge un utilisateur, ce privilge est automatiquement retir tout autre utilisateur qui il aurait accord ce privilge.
5.9.3
Tout utilisateur peut modier son mot de passe par l'ordre GRANT
CONNECT :
5.9.4
donner par GRANT. L'administrateur peut crer plusieurs rles correspondants dirents types standard d'utilisateurs pour les aecter aux utilisateurs qu'il cre.
On peut crer un rle par la commande CREATE ROLE nom-rle. On
peut ensuite lui attribuer des droits comme on le fait avec un utilisateur par
la commande GRANT.
Des rles sont prdnis par Oracle : CONNECT permet un utilisateur
de se connecter et de crer des tables. RESOURCE permet en plus un
utilisateur de crer des procdures stockes, des types, des squences,....
Chapitre 6
Gestion des accs concurrents
Les problmes lis aux accs concurrents aux donnes sont prsents dans
leur gnralit. Les solutions apportes par les dirents SGBDs, et plus
particulirement Oracle, sont ensuite tudies.
6.1.1
Transaction T1
t1
Lire S
t2
t3
Lire S
S = S + 1000
t4
t5
Transaction T2
S = S + 2000
Enregistrer S
t6
Enregistrer S
79
80
CHAPITRE 6.
Pour viter ce genre de situation, les SGBD bloquent l'accs aux tables
(ou parties de tables : blocs mmoire ou lignes par exemple) lorsque de nouveaux accs pourraient occasionner des problmes. Les processus qui veulent
accder aux tables bloques sont mis en attente jusqu' ce que les tables
soient dbloques.
Cependant ceci peut aussi amener l'interblocage de processus (deadlock
en anglais) comme dans l'exemple suivant :
Temps
Transaction T1
Transaction T2
t1
Verrouiller la table A
t2
Verrouiller la table B
t3
Verrouiller la table B
t4
Attente
Verrouiller la table A
Attente
t5
6.1.2
Une transaction T2 lit une valeur V donne par une autre transaction T1.
Ensuite la transaction T1 annule son aectation de V et la valeur lue par T2
est donc fausse.
Temps
Transaction T1
t1
V = 100
t2
t3
Transaction T2
Lire V
ROLLBACK
6.1.3
Une transaction lit deux fois une mme valeur et ne trouve pas la mme
valeur les deux fois.
6.2.
81
Temps
Transaction T1
t1
Lire V
t2
Transaction T2
V = V + 100
t3
COMMIT
t4
Lire V
Pour viter ceci, T1 devra bloquer les donnes qu'elle veut modier entre
les temps t1 et t3, pour empcher les autres transactions de les modier (voir,
par exemple, les blocages explicites d'Oracle en 6.5).
6.1.4
Lignes fantmes
Transaction T1
t1
t2
Transaction T2
Crer des lignes avec V = 10
t3
Une variante que l'on peut rencontrer si on veut accder aux donnes
depuis un langage de programmation tel que Java : on commence par lire le
nombre de lignes qui vrient un critre pour dimensionner un tableau Java
qui les contiendra ; on relance ensuite la mme slection pour ranger les lignes
dans le tableau ; si entre temps un autre utilisateur a rajout des lignes qui
vrient ce critre, on provoque une erreur (le tableau n'est plus assez grand
pour contenir toutes les lignes).
Un blocage de ligne n'est plus la solution ici car ces lignes n'existent pas
la premire lecture. On sera souvent amen eectuer un blocage explicite
de table, ou choisir le degr d'isolation serializable (dcrit dans la section
suivante).
Pour viter tous les problmes dcrits dans la section prcdente, la gestion des transactions doit, si possible, rendre les transactions srialisable :
82
CHAPITRE 6.
6.2.2
Niveaux d'isolation
6.3.
83
6.3.1
Traitement pessimiste
Si l'on est pessimiste, on pense qu'il y aura forcment des problmes d'accs concurrent. Pour pouvoir faire tranquillement son travail, on (les transactions qu'on lance) bloque donc les donnes sur lesquelles on veut travailler.
Un tel blocage durera le temps de la transaction en cours.
84
CHAPITRE 6.
6.3.2
Traitement optimiste
Si l'on est optimiste, on pense que tout va bien se passer et que les autres
transactions ne vont pas modier les donnes sur lesquelles on va travailler.
On n'eectue donc aucun blocage.
Pour ne pas tre d'un optimisme bat, au moment o on veut valider le
traitement eectu (et seulement ce moment), on contrle si on a eu raison
d'tre optimiste. Pour cela on dmarre une transaction courte qui bloque les
donnes et vrie que les donnes que l'on a utilises n'ont pas t modies
par une autre transaction.
Si elles n'ont pas t modies, on valide la transaction.
Si malheureusement les donnes ont t modies c'est que l'optimisme
n'tait pas justi. On agit en consquence pour viter les problmes des
accs concurrents dcrits prcdemment : soit on invalide tout le travail effectu dans la transaction, soit on fait un travail correcteur ou alternatif. Par
exemple, si le traitement comporte une interaction avec l'utilisateur, on peut
lui proposer plusieurs choix pour terminer au mieux la transaction.
Il y a plusieurs faons de reprer qu'une autre transaction a modi les
valeurs. La faon la plus simple est de comparer tout simplement les valeurs
lues au moment o on en a eu besoin et au moment o on va valider la
transaction. Mais a ne convient pas aux donnes de grandes tailles. On peut
aussi ajouter chaque ligne des tables une information lie la dernire
modication de la ligne. Par exemple on peut ajouter un numro de version
incrment chaque modication de la ligne ; on peut utiliser pour cela une
squence ; voir 5.5.3, ou un timestamp qui indique le moment exact de la
dernire modication ( la microseconde prs par exemple).
6.4.
85
Remarque 6.1
Le traitement optimiste permet une granularit trs ne (au niveau des
attributs et pas des lignes) dans le cas o la validation de la transaction
utilise la comparaison des valeurs des donnes utilises. En eet, rien
n'empche une autre transaction de modier des donnes des lignes que
l'on utilise partir du moment o elle ne modie pas les attributs qui
sont intervenus dans le traitement.
Le choix entre un traitement pessimiste ou optimiste dpend du contexte
et il n'est pas toujours vident. Comme il a t dit, si le traitement comporte une intervention de l'utilisateur place entre la lecture des donnes
et l'criture des nouvelles donnes, le traitement optimiste est sans doute le
meilleur. En revanche, si le risque de problmes de concurrence est trop grand
(s'il y a peu de chance que l'optimisme soit justi), le choix pessimiste est
sans doute le meilleur pour viter trop de calculs inutiles et d'invalidation au
dernier moment de la procdure.
6.4 Traitement par dfaut des accs concurrents par les SGBDs
Pour mettre en uvre le type de traitement des accs concurrents qu'ils
ont choisis, les dveloppeurs peuvent s'appuyer sur les possibilits oertes
par les SGBDs.
Les SGBDs grent automatiquement les accs concurrents mais permettent
de choisir d'autres modes de fonctionnement en posant des verrous explicites.
Nous allons dcrire le comportement d'Oracle.
Le mode de fonctionnement par dfaut de la plupart des SGBDs est le
mode read committed : les modications eectues par une transaction ne
sont connues des autres transactions que lorsque la transaction a t conrme (ordre COMMIT).
Une opration eectue par un SGBD doit s'eorcer d'eectuer une lecture consistante des donnes qu'elle manipule : toutes ces donnes doivent
avoir les valeurs qu'elles avaient un mme moment prcis. La lecture de
tous les salaires des employs d'une entreprise par une requte SQL peut
prendre un certain temps. Cependant si le premier salaire est lu au moment
t1, en tenant compte des modications eectues par toutes les transactions
valides ce moment, il faut que les valeurs lues pour tous les autres salaires soient celles qu'ils avaient au mme moment t1, mme si une autre
transaction valide les a modis depuis le moment t1.
Certains SGBDs, Oracle en particulier, assurent une lecture consistante
86
CHAPITRE 6.
des donnes pendant l'excution d'un seul ordre SQL ; par exemple, un ordre
SELECT ou UPDATE va travailler sur les lignes telles qu'elles taient au
moment du dbut de l'excution de la commande, mme si entre-temps une
autre transaction valide par un COMMIT a modi certaines de ces lignes.
De mme, si une commande UPDATE comporte un SELECT embot, les
modications de la commande UPDATE ne sont pas prises en compte par
le SELECT embot. Les SGBDs comme DB2 qui ne conservent pas plusieurs versions des donnes rcemment modies n'orent pas cette lecture
consistante.
Aucun SGBD n'assure automatiquement une lecture consistante pendant
toute une transaction. Si une transaction est valide, toutes les autres transactions voient ensuite les modications qu'elle a eectue. Ce comportement
n'est pas souhait pour des traitements, tels que les bilans, qui souhaitent
voir toutes les donnes comme elles taient au moment du dbut de la transaction. Il est cependant possible d'obtenir une lecture consistante pendant
toute une transaction. On peut
soit indiquer que la transaction est en lecture seule par
set
6.5.
87
BLOCAGES EXPLICITES
transaction.
Ces comportements sont mis en uvre par les SGBDs en provoquant implicitement des blocages sur les lignes ou les tables impliques lors de certains
traitements : DELETE, UPDATE, INSERT, SELECT FOR UPDATE et les
ordres de dnitions et de contrle des donnes : LDD (Langage de Dnition
des Donnes) et LCD (Langage de Contrle des Donnes) : ALTER TABLE,
GRANT, etc. Certains SGBDs (mais pas Oracle) posent aussi un verrou avec
la commande SELECT.
Voici les blocages eectus implicitement par Oracle :
Ordre SQL
DELETE, UPDATE
Exclusif
Row Exclusive
INSERT
SELECT FOR UPDATE
Row Exclusive
Exclusif
LDD/LCD
Row Share
Exclusif
88
CHAPITRE 6.
6.5.1
Les commandes qui provoquent des blocages explicites sont lock table
et select for update.
Voici les cinq variantes de la commande
6.5.
BLOCAGES EXPLICITES
89
Ce mode tant trs contraignant pour les autres utilisateurs (ils sont mis
en attente et ne reprennent la main qu'au dblocage de la table), le blocage
doit tre le plus court possible. Un blocage en mode exclusif doit tre suivi
rapidement d'un COMMIT ou d'un ROLLBACK.
Remarque 6.2
Pour les 5 modes de blocage, l'option NOWAIT (ajoute la n de
la commande LOCK) permet de reprendre immdiatement la main au
cas o la table que l'on veut bloquer serait dj bloque. Par exemple :
90
CHAPITRE 6.
6.5.
BLOCAGES EXPLICITES
91
Remarque 6.3
Si on n'eectue pas ce type de blocage sur les donnes que l'on veut
modier, on risque d'avoir un problme de mise jour perdue : les
donnes que l'on a lues par un SELECT pour les modier ont t modies par une autre transaction avant qu'on ait le temps d'enregistrer
leur nouvelle valeur. On peut choisir de ne pas eectuer ce blocage et
faire un traitement optimiste (on espre qu'aucune transaction n'a
travaill sur les mmes donnes) et des vrications au moment du
COMMIT pour voir si on avait eectivement raison d'tre optimiste
(voir 6.3.2 page 84).
Tableau rcapitulatif
Ce tableau indique les commandes qui sont autorises dans chacun des
modes de blocage.
92
CHAPITRE 6.
Modes
SRX
RX
RS
non
non
non
non
non
non
non
non
non
OUI
non
non
OUI
non
OUI
non
non
non
OUI
OUI
Commandes
CLUSIVE (SRX)
(RX)
LOCK ROW SHARE (RS)
non
OUI
OUI
OUI
OUI
INSERT
non
non
non
OUI *
OUI *
non
OUI *
OUI *
OUI *
OUI *
DELETE
UP-
DATE
SELECT FOR UPDATE
* condition que l'on ne travaille pas sur des lignes dj bloques par
une autre transaction.
Index
ABS, 48
DATE, 7
accs concurrents, 79
date du jour, 29
ACID, 22
DECODE, 52
DEFAULT, 12
ALTER TABLE, 58
DELETE, 21
AND, 33
DESC, 53
dictionnaire de donnes, 75
ASCII, 50
AVG, 45
DISTINCT, 45
division, 42
BETWEEN, 32
DROP INDEX, 65
DROP VIEW, 61
case, 51
DUAL, 4
catalogue, 57
changer son mot de passe, 78
CHAR, 6
EXCEPT, 55
CHR, 50
except, 55
COALESCE, 9
EXISTS, 41
colonne, 4
EXIT, 3
COMMIT, 23, 88
concatner des chanes, 8
fonction de choix, 51
CONSTRAINT, 12
fonction stocke, 69
fonction utilisateur, 71
COUNT, 45
fonctions arithmtiques, 48
crer un index, 63
fonctions de groupes, 44
FOREIGN KEY, 13
FROM, 29
CREATE INDEX, 63
CREATE TABLE, 11
GRANT, 77
CREATE VIEW, 60
GREATEST, 48
CURRENT_DATE, 51
GROUP BY, 45
93
94
INDEX
HAVING, 46
nom de l'utilisateur, 29
norme SQL, 1
identicateur, 3
IN, 32
index, 63
insrer des lignes, 19
INSERT, 19
INSTR, 48
NOT, 33
NULL, 7
NULLIFF, 10
NUMBER, 5
NVL, 9
interblocage, 80, 88
OLAP, 66
interroger la base, 26
ON DELETE CASCADE, 13
INTERSECT, 55
intersect, 55
IS NULL, 33
8
oprateur ensembliste, 54
jointure, 33
oprateur logique, 33
jointure externe, 36
oprateurs, 8
jointure naturelle, 35
oprateurs arithmtiques, 8
optimiste, 84
LCD, 1, 87
LDD, 1, 57, 87
OR, 33
ORDER BY, 53
LEAST, 48
pessimiste, 83
point de reprise, 24
LENGTH, 48
POWER, 48
PRIMARY KEY, 12
55
privilges d'accs, 76
LMD, 1, 19
procdure stocke, 69
LOCK TABLE, 88
pseudo-colonne, 28
LOWER, 49
pseudo-table, 4
LPAD, 49
PUBLIC, 77
LTRIM, 49
rle, 78
MAX, 45
REFERENCES, 13
MIN, 45
MINUS, 55
minus, 55
REPLACE, 49
REVOKE, 78
MOD, 48
ROLLBACK, 23, 88
ROUND, 48, 51
rowid, 29
mot de passe, 78
rownum, 28
95
INDEX
RPAD, 49
RTRIM, 49
savepoint, 24
types d'index, 65
schma, 57
types de contraintes, 12
squence, 68
srialisable, 81
srialisation, 81
UNION, 54
union, 54
ONLY, 91
SGBDR, 1
SIGN, 48
UNIQUE, 13
UPDATE, 20
UPPER, 49
sous-interrogation, 38
USER, 53
SQLFORMS, 2
user, 29
SQRT, 48
STDDEV, 45
SUBSTR, 48
SUM, 45
supprimer des lignes, 21
supprimer un index, 65
supprimer une colonne, 59
supprimer une table, 60
VARCHAR, 6
VARCHAR2, 6
VARIANCE, 45
vue, 60
WHERE, 31
synonyme public, 60
SYSDATE, 51
sysdate, 29
table, 3
table DUAL, 4
TO_CHAR, 48, 49
TO_DATE, 51
TO_NUMBER, 48, 50
traitement optimiste, 84
traitement pessimiste, 83
transaction, 22
TRANSLATE, 49
trigger, 72
TRUNC, 48, 51
type chane, 6
type numrique, 5, 7