Vous êtes sur la page 1sur 51

sql.

doc

Le langage SQL
SQL : Interroger une base

Introduction 4

Interroger simplement une base 6

Slection de colonnes ou projection 6

Slection de lignes ou restriction 6

Valeurs NULL 8

Nom de colonne 8

Classer le rsultat d'une interrogation 10

Requtes avances 11

les jointures 11

Equi-jointure

Jointure d'une table elle-mme

Autres jointures

Jointure externe

Les sous-interrogations 13

Sous-interrogation ramenant une seule valeur

Sous-interrogation ramenant plusieurs lignes

Sous-interrogation ramenant plusieurs colonnes

Sous-interrogation synchronise avec l'interrogation principale

Sous-interrogation ramenant au moins une ligne

Sous-interrogations multiples

Le traitement des structures d'arbre 15

Parcours d'un arbre

Niveau : LEVEL

Slection de lignes

Restrictions

Les oprateurs ensemblistes 17

sql.doc

Les expressions et fonctions 18

Expressions et fonctions simples 18

Expressions et fonctions arithmtiques

Expressions et fonctions sur les chanes de caractres

Expressions et fonctions sur les dates

Fonctions de conversion

Autres fonctions

Les fonctions de groupe 26

Les fonctions de groupe

Valeurs NULL

Calcul sur plusieurs groupes

Slection des groupes

Fonction de groupe deux niveaux

SQL : Modifier une base

Ajout de lignes 28

Modification de lignes 29

Suppression de lignes 29

SQL : Dfinir une base

Les tables 30

Crer une table

Contraintes d'intgrit

Modifier d'une table

Supprimer une table

Renommer une table

Les vues 34

Crer une vue

Supprimer une vue

Renommer une vue

Les index 36

sql.doc

Crer d'un index

Supprimer un index

Les clusters 40

Crer un cluster

Mise en cluster d'une table

Retrait d'une table d'un cluster

Supprimer un cluster

Contrle des accs la base

Droits daccs aux tables 43

Droits daccs aux vues 44

Gestion des transactions

Dfinition 45

Cohrence dune interrogation 45

Cohrence de plusieurs interrogations 45

Mise jour 46

Dictionnaire de donnes

Description du dictionnaire de donnes 47

Vues dcrivant les objets de l'utilisateur 48

Vues dcrivant les objets auxquels l'utilisateur a accs 49

Synonymes 50

Rfrences bibliographiques

sql.doc

SQL : Interroger une base


Introduction
Ce chapitre expose la partie du langage sql permettant de retrouver des informations stockes dans
une base de donnes. Il s'agit, comme cela a dj t dit, d'un langage dclaratif dont la syntaxe est
trs simple (comme beaucoup de langages de ce type) ce qui permet de se concentrer sur le
problme rsoudre.
Les exemples cits dans ce chapitre ont tous ts tests sous ORACLE, un des systmes de gestion
de bases de donnes relationnels les plus rpandus sur le march.
Ces exemples sont btis sur une base de donnes compose des deux relations suivantes :

emp (nom, num, fonction, n_sup, embauche, salaire, comm, n_dept)

NOM
NUM
FONCTION
-------- ------ ------------MARTIN
16712 directeur
DUPONT
17574 administratif
DUPOND
26691 commercial
LAMBERT
25012 administratif
JOUBERT
25717 prsident
LEBRETON 16034 commercial
MARTIN
17147 commercial
PAQUEL
27546 commercial
LEFEBVRE 25935 commercial
GARDARIN 15155 ingnieur
SIMON
26834 ingnieur
DELOBEL
16278 ingnieur
ADIBA
25067 ingnieur
CODD
24533 directeur
LAMERE
27047 directeur
BALIN
17232 administratif
BARA
24831 administratif

N_SUP
-----25717
16712
27047
27047
27047
27047
27047
27047
24533
24533
24533
24533
25717
25717
24533
16712

EMBAUCHE SALAIRE COMM N_DEPT


--------- ------- ----- -----23-MAY-90
40000
30
03-MAY-95
9000
30
04-APR-88
25000 2500 20
14-APR-91
12000
20
10-OCT-82
50000
30
01-JUN-91
15000 0
20
10-DEC-93
20000 500
20
03-SEP-83
22000 2000 20
11-JAN-84
23500 1500 20
22-MAR-85
24000
10
04-OCT-88
20000
10
16-NOV-94
21000
10
05-OCT-87
30000
10
12-SEP-75
55000
10
07-SEP-89
45000
20
03-OCT-87
13500
10
10-SEP-88
15000
30

dept(n_dept, nom, lieu)


N_DEPT
NOM
LIEU
------ -------------- ------------10
recherche
Rennes
20
vente
Metz
30
direction
Gif
40
fabrication
Toulon

La commande SELECT constitue, elle seule, le langage permettant d'interroger une base de
donnes. Elle permet :

de slectionner certaines colonnes d'une table : c'est l'opration de projection ;

de slectionner certaines lignes d'une table en fonction de leur contenu : c'est l'opration de
restriction ;

de combiner des informations venant de plusieurs tables : ce sont les oprations de jointure,
union, intersection, diffrence relationnelle ;

sql.doc

de combiner entre elles ces diffrentes oprations.

Une interrogation, on parle plutt de requte, est une combinaison d'oprations portant sur
des tables (relations) et dont le rsultat est lui-mme une table dont l'existence est phmre
(le temps de la requte).
On peut introduire un commentaire l'intrieur d'une commande sql en l'encadrant par /* */.

sql.doc

Interroger simplement une base


Slection de colonnes ou projection
La commande SELECT la plus simple a la syntaxe suivante :
SELECT *
FROM nom_table ;

Dans laquelle :

nom_table : est le nom de la table sur laquelle porte la slection.

*:signifie que toutes les colonnes de la table sont slectionnes.

Par dfaut toutes les lignes sont slectionnes. On peut limiter la slection certaines colonnes, en
indiquant une liste de noms de colonnes la place de l'astrisque.
SELECT nom_col1, nom_col2, ...
FROM nom_table ;

Exercice : Donner le nom et la fonction de chaque employ.


La clause DISTINCT ajoute derrire la commande SELECT permet d'liminer les duplications.
Exercice : Quelles sont toutes les fonctions diffrentes ?

Slection de lignes ou restriction


La clause WHERE permet de spcifier quelles sont les lignes slectionner. Elle est suivie d'un
prdicat qui sera valu pour chaque ligne de la table. Les lignes pour lesquelles le prdicat est vrai
seront slectionnes.
La syntaxe est la suivante :
SELECT *
FROM nom_table
WHERE prdicat ;

Un prdicat n'est ni plus ni moins que la faon dont on exprime une proprit. Les prdicats, qu'ils
soient simples ou composs, sont constitus partir d'expressions que l'on compare entre elles.
Expression simple
Une expression simple peut tre :

une variable dsigne par un nom de colonne,

une constante.

Les expressions peuvent tre de trois types : numrique, chane de caractres ou date. A chacun de
ces types correspond un format de constante :
Constante numrique
nombre contenant ventuellement un signe, un point dcimal et une puissance de dix. Ex : -10,
2.5, 1.2 E-10

sql.doc
Constante chane de caractres
une chane de caractres entre apostrophes. Ex :'MARTIN' (Attention, une lettre en majuscules
n'est pas considre comme gale la mme lettre en minuscule).
Constante date
une chane de caractres entre apostrophes au format suivant : jour-mois-anne o le jour est sur
deux chiffres, le mois est dsign par les trois premires lettres de son nom en anglais, l'anne
est sur deux chiffres. Ex : '01-FEB-85'
On peut, en SQL, exprimer des expressions plus complexes en utilisant des oprateurs et des
fonctions tudis dans le chapitre Expressions et fonctions.
Prdicat simple
Un prdicat simple est le rsultat de la comparaison de deux expressions au moyen d'un oprateur
de comparaison qui peut tre :
=

gal

!=

diffrent

<

infrieur

<=

infrieur ou gal

>

suprieur

>=

suprieur ou gal

Les trois types d'expressions peuvent tre compars au moyen de ces oprateurs :

Pour les types date, la relation d'ordre est l'ordre chronologique.

Pour les types caractre, la relation d'ordre est l'ordre alphabtique.

Il faut ajouter ces oprateurs arithmtiques classiques les oprateurs suivants :


expr1 BERTWEEN expr2 AND expr3

vrai si expr1 est compris entre expr2 et expr3, bornes incluses


expr1 IN (expr2, expr3, ...)

sql.doc
Quels sont les employs dont le nom commence par M ?
Prdicats composs
Les oprateurs logiques AND (et) et OR (ou inclusif) peuvent tre utiliss pour combiner entre eux
plusieurs prdicats. L'oprateur NOT plac devant un prdicat en inverse le sens.
L'oprateur AND est prioritaire par rapport l'oprateur OR. Des parenthses peuvent tre utilises
pour imposer une priorit dans l'valuation du prdicat ou simplement pour rendre plus claire
l'expression logique.
Exercices : Quels sont les employs du dpartement 30 ayant un salaire suprieur 25000 ?
Quels sont les employs directeurs, ou commerciaux et travaillant dans le dpartement
10 ?
La requte prcdente donnerait le mme rsultat sans les parenthses, rsultat diffrent de celui du
SELECT suivant.
Exercice : Quels sont les employs directeurs ou commerciaux, et travaillant dans le dpartement
10 ?

Valeurs NULL
Pour sql, une valeur NULL est une valeur non dfinie. Il est possible d'ajouter une ligne une table
sans spcifier de valeur pour les colonnes non obligatoires : ces colonnes absentes auront la valeur
NULL.
Par exemple les employs dont la rmunration ne prend pas en compte de commission auront une
valeur NULL, c'est--dire indfinie, comme commission.
L'oprateur IS NULL permet de tester la valeur NULL : le prdicat expr IS NULL est vrai si
l'expression a la valeur NULL (c'est--dire si elle est indfinie).
Exercice : Quels sont les employs dont la commission a la valeur NULL ?
L'oprateur IS NOT NULL permet de construire un prdicat vrai si la valeur n'est pas NULL (et donc
le prdicat expr IS NOT NULL est vrai si expr est dfinie)
Remarques

La valeur NULL est diffrente de la valeur zro qui, elle, qui est une valeur bien dfinie.

Le prdicat expr = NULL est toujours faux, et ne permet donc pas de tester si l'expression a la
valeur NULL.

Une expression de la forme NULL + val donne NULL comme rsultat quelle que puisse tre
la valeur de val.

Nom de colonne
Les colonnes constituant le rsultat d'un SELECT peuvent tre renommes dans le SELECT, ceci est
utile en particulier lorsque la colonne rsultat est une expression. Pour cela, il suffit de faire suivre
l'expression dfinissant la colonne d'un nom, selon les rgles suivantes :

le nom (30 caractres maximum) est insr derrire l'expression dfinissant la colonne,

sql.doc
spar de cette dernire par un espace.

si le nom contient des sparateurs (espace, caractre spcial), ou s'il est identique un mot
cl de SQL (ex : DATE), il doit tre mis entre guillemets "".

Ce nom est celui sous lequel la colonne sera connue des interfaces externes. Sous SQLPLUS, par
exemple, il constituera le titre par dfaut de la colonne, et servira de rfrence pour dfinir un
format pour la colonne.
Exercice : Salaire de chaque employ.
Remarque : Attention, ce nom n'est pas connu l'intrieur du SELECT.

sql.doc

Classer le rsultat d'une interrogation


Les lignes constituant le rsultat d'un SELECT sont obtenues dans un ordre indtermin. On peut,
dans un SELECT, demander que le rsultat soit class dans un ordre ascendant ou descendant, en
fonction du contenu d'une ou plusieurs colonnes (jusqu' 16 critres de classement possibles). Les
critres de classement sont spcifis dans une clause ORDER BY dont la syntaxe est la suivante :
ORDER BY {nom_col1 | num_col1 [DESC] [, nom_col2 | num_col2 [DESC],...]}

Le classement se fait d'abord selon la premire colonne spcifie dans l'ORDER BY puis les lignes
ayant la mme valeur dans la premire colonne sont classes selon la deuxime colonne de l'ORDER
BY, etc... Pour chaque colonne, le classement peut tre ascendant (par dfaut) ou descendant (DESC).
L'ORDER BY peut faire rfrence une colonne par son nom ou par sa position dans la liste des
colonnes prsentes derrire le SELECT (la premire colonne slectionne a le numro 1, la deuxime
a le numro 2, ...).
Exercice : Donner tous les employs classs par fonction, et pour chaque fonction classs par
salaire dcroissant
Remarque : Dans un classement les valeurs NULL sont toujours en tte quel que soit l'ordre du
classement (ascendant ou descendant).

10

sql.doc

Requtes avances
Les jointures
La jointure est une opration permettant de combiner des informations venant de plusieurs tables.

11

sql.doc

Jointure externe
Lorsqu'une ligne d'une table figurant dans une jointure n'a pas de correspondant dans les autres
tables, elle ne satisfait pas au critre d'qui-jointure et donc ne figure pas dans le rsultat de la
jointure.
Une option permet de faire figurer dans le rsultat les lignes satisfaisant la condition d'qui-jointure
plus celles n'ayant pas de correspondant. Cette option s'obtient en accolant (+) au nom de colonne
de la table dans laquelle manquent des lments, dans la condition d'qui-jointure.
Exercice : Le dpartement 40 ne figurait pas dans le rsultat du SELECT prcdent. Faites-le figurer
dans le rsultat du SELECT suivant.
Le (+) peut s'interprter comme l'ajout d'une ligne fictive dont toutes les colonnes ont la valeur
NULL, et qui ralise la correspondance avec les lignes de l'autre table qui n'ont pas de correspondant
rel. Dans l'exemple ci-dessus, la valeur de nom associe au dpartement 40 est la valeur NULL.

Exercice : Retrouver les dpartements n'ayant aucun employ.

12

sql.doc

Les sous-interrogations
Une caractristique puissante de SQL est la possibilit qu'un critre de recherche employ dans une
clause WHERE (expression droite d'un oprateur de comparaison) soit lui-mme le rsultat d'un
SELECT ; c'est ce qu'on appelle une sous-interrogation.

Sous-interrogation ramenant une seule valeur


Exercice : Quels sont les employs ayant la mme fonction que coda ?
Remarques

une sous-interrogation qui ne ramne aucune ligne se termine avec un code d'erreur.

une sous-interrogation ramenant plusieurs lignes provoquera aussi, dans ce cas, une erreur
(pour traiter correctement ce cas, voir paragraphe ci-dessous)

Sous-interrogation ramenant plusieurs lignes


Une sous-interrogation peut ramener plusieurs lignes condition que l'oprateur de comparaison
admette sa droite un ensemble de valeurs. Les oprateurs permettant de comparer une valeur un
ensemble de valeurs sont :

l'oprateur IN

les oprateurs obtenus en ajoutant ANY ou ALL la suite d'un oprateur de comparaison
classique (=, !=, >, >=, <, <=)

ANY: la comparaison est vraie si elle est vraie pour au moins un des lments de

l'ensemble.

ALL: la comparaison sera vraie si elle est vraie pour tous les lments de l'ensemble.

Exercice : Quels sont les employs gagnant plus que tous les employs du dpartement 30.

Sous-interrogation ramenant plusieurs colonnes


Il est possible de comparer le rsultat d'un SELECT ramenant plusieurs colonnes une liste de
colonnes. La liste de colonnes figurera entre parenthses gauche de l'oprateur de comparaison.
Exercice : Quels sont les employs ayant mme fonction et mme suprieur que CODD?

Sous-interrogation synchronise avec l'interrogation principale


Dans les exemples prcdents, la sous-interrogation 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.
Exercice : Quels sont les employs ne travaillant pas dans le mme dpartement que leur suprieur
hirarchique ?
Il a fallu ici renommer la table emp de l'interrogation principale pour pouvoir la rfrencer dans la
13

sql.doc
sous-interrogation.
n_sup IS NOT NULL est ncessaire car dans le cas de JOUBERT la colonne n_sup est NULL et la sous-

requte ne ramne alors aucune valeur.

Sous-interrogation ramenant au moins une ligne


L'oprateur EXISTS permet de construire un prdicat vrai si la sous-interrogation qui suit ramne au
moins une ligne.
Exercice : Quels sont les employs travaillant dans un dpartement qui a procd des embauches
depuis le dbut de l'anne 94 ?
Remarque : On peut inverser le sens de l'oprateur EXISTS en le faisant prcder de NOT.

Sous-interrogations multiples
Un SELECT peut comporter plusieurs sous-interrogations, soit imbriques, soit au mme niveau dans
diffrents prdicats combins par des AND ou des OR.
Exercice : Liste des employs du dpartement 10 ayant mme fonction que quelqu'un du
dpartement de DUPONT.

14

sql.doc

Le traitement des structures d'arbre


Il est possible de reprsenter selon le modle relationnel des listes ou des structures d'arbre. Pour
cela, il suffit d'introduire dans la relation un attribut reprsentant un lien vers l'lment suivant ou le
prdcesseur dans la liste ou l'arbre :
Relation(cl, ... , cl du prdcesseur)

C'est le cas dans la table emp o chaque ligne contient un "pointeur" vers le suprieur hirarchique :
n_sup. Chaque employ a un seul suprieur hirarchique. Par contre, un employ peut tre le
suprieur hirarchique de plusieurs employs. Le lien n_sup dfinit donc une structure d'arbre.

Parcours d'un arbre


En utilisant la cl num et le lien vers le suprieur hirarchique n_sup, il est possible de parcourir
l'arbre hirarchique implicitement dcrit par la table emp. SQL permet d'obtenir comme rsultat d'un
SELECT les lignes dans l'ordre de parcours de l'arbre (ou de la liste). Pour cela il faut :
dfinir comment se fait le lien entre une ligne et la prcdente, en indiquant la colonne cl et la
colonne lien dans une clause CONNECT BY :
CONNECT BY nom_col_1 = PRIOR nom_col_2

Le mot cl PRIOR , accol l'une ou l'autre des colonnes, dfinit le sens du parcours.

dfinir un (ou plusieurs) point de dpart, par une clause START WITH place aprs la clause
CONNECT BY.

Un arbre (ou une liste) sera construit partir de chaque ligne rpondant au prdicat. En l'absence de
clause START WITH, un arbre sera construit partir de chaque ligne.
Exercice : Quels sont toutes les personnes dont CODD est le suprieur hirarchique (CODD compris) ?

Niveau : LEVEL
Il est possible d'obtenir pour chaque ligne le niveau correspondant dans l'arbre ou dans la liste, la
premire ligne slectionne tant de niveau 1. Ce niveau s'obtient dans la variable LEVEL, que l'on
peut utiliser dans le SELECT comme rsultat. Cette variable peut aussi tre prsente dans un prdicat.
Exercice : Donner la liste des subordonns de JOUBERT, avec pour chacun d'eux son niveau.

Slection de lignes
Clause WHERE
Le prdicat de la clause WHERE permet d'liminer certaines lignes. Mais le parcours de l'arbre n'est
pas interrompu lorsqu'une ligne ne rpondant pas au prdicat est rencontre.
Exercice : Quelles sont toutes les personnes dont JOUBERT est le suprieur hirarchique (JOUBERT
compris et CODD non compris) ?
CODD ne figure pas dans le rsultat , mais tous ses subordonns y figurent.

Clause CONNECT BY
Il est possible de rajouter des conditions dans le CONNECT BY. Lorsque le prdicat du CONNECT BY
15

sql.doc
n'est plus satisfait, le parcours de l'arbre s'arrte.
Exercice : Quelles sont toutes les personnes dont JOUBERT est le suprieur hirarchique (JOUBERT
compris et CODD et ses subordonns non compris) ?
Dans la requte prcdente, nom !='CODD' n'tait pas un des prdicats du CONNECT BY alors qu'ici il
l'est.

Restrictions
Boucle
SQL dtecte les boucles dans les CONNECT BY. Le SELECT est interrompu avec un code d'erreur.
Niveaux
Le parcours descendant d'un arbre ncessite, lorsqu'on a atteint l'extrmit d'une branche, de
remonter jusqu'au nud le plus proche pour parcourir la branche suivante.
Le nombre de niveaux qu'il est ainsi possible de remonter est limit 256.
Jointure
Un SELECT avec clause CONNECT BY ne doit pas tre une jointure.

16

sql.doc

Les oprateurs ensemblistes


Les oprateurs ensemblistes permettent de "joindre" des tables verticalement c'est--dire de
combiner dans un rsultat unique des lignes provenant de deux interrogations. Les lignes
peuvent venir de tables diffrentes mais aprs projection on doit obtenir des tables ayant mme
schma de relation.
Les oprateurs ensemblistes sont les suivants :

l'union : UNION

l'intersection : INTERSECT

la diffrence relationnelle : MINUS

La syntaxe d'utilisation est la mme pour ces trois oprateurs :


SELECT ...

{UNION | INTERSECT | MINUS } SELECT ...

Dans une requte utilisant des oprateurs ensemblistes :

Tous les SELECT doivent avoir le mme nombre de colonnes slectionnes, et leur types
doivent tre un un identiques. Les conversions ventuelles doivent tre faites l'intrieur
du SELECT l'aide des fonctions de conversion.

Les doubles sont limins (DISTINCT implicite).

Les noms de colonnes (titres) sont ceux du premier SELECT.

La largeur des colonnes est la plus grande parmi tous les SELECT.

Dans une requte on ne peut trouver qu'un seul ORDER BY. S'il est prsent, il doit tre mis
dans le dernier SELECT et il ne peut faire rfrence qu'aux numros des colonnes et non pas
leurs noms (car les noms peuvent tre diffrents dans chacune des interrogations).

L'on peut combiner le rsultat de plus de deux SELECT au moyen des oprateurs UNION, INTERSECT,
MINUS.
SELECT ... UNION SELECT ... MINUS SELECT ...

Dans ce cas l'expression est value de gauche droite, mais on peut modifier l'ordre d'valuation
en utilisant des parenthses.
SELECT ...
UNION (SELECT ...
MINUS
SELECT ...)

17

sql.doc

Expressions et fonctions
Expressions et Fonctions simples
Une expression est un ensemble de variables (contenu d'une colonne), de constantes et de fonctions
combines au moyen d'oprateurs. Les fonctions prennent une valeur dpendant de leurs arguments
qui peuvent tre eux-mmes des expressions.
Les expressions peuvent figurer :

en tant que colonne rsultat d'un SELECT,

dans une clause WHERE,

dans une clause ORDER BY.

Il existe trois types d'expressions correspondant chacun un type de donnes de SQL :


arithmtique, chane de caractre, date. A chaque type correspondent des oprateurs et des
fonctions spcifiques.
SQL autorise les mlanges de types dans les expressions et effectuera les conversions ncessaires :
dans une expression mlangeant dates et chanes de caractres, les chanes de caractres seront
converties en dates, dans une expression mlangeant nombres et chanes de caractres, les chanes
de caractres seront converties en nombre.

Expressions et fonctions arithmtiques


Une expression arithmtique peut contenir :

des noms de colonnes

des constantes

des fonctions arithmtiques

combins au moyen des oprateurs arithmtiques.


Oprateurs arithmtiques
Les oprateurs arithmtiques prsents dans sql sont les suivants :

addition ou + unaire

soustraction ou - unaire

multiplication

division

Remarque : la division par 0 provoque une fin avec code d'erreur.


Priorit des oprateurs

Une expression arithmtique peut comporter plusieurs oprateurs. Dans ce cas, le rsultat de
l'expression peut varier selon l'ordre dans lequel sont effectues les oprations. Les oprateurs de
18

sql.doc
multiplication et de division sont prioritaires par rapport aux oprateurs d'addition et de
soustraction. Des parenthses peuvent tre utilises pour forcer l'valuation de l'expression dans un
ordre diffrent de celui dcoulant de la priorit des oprateurs.
Exercices :

Donner pour chaque commercial son revenu (salaire + commission).


Donner la liste des commerciaux classe par commission sur salaire dcroissant.
Donner la liste des employs dont la commission est infrieure 5% du salaire.

Fonctions arithmtiques
Dans ce paragraphe, ont t regroupes les fonctions ayant un ou plusieurs nombres comme
arguments, et renvoyant une valeur numrique. [ROUND(n ,m )]
ABS(nb)

Renvoie la valeur absolue de nb.


CEIL(nb)

Renvoie le plus petit entier suprieur ou gal nb.


COS(n)

Renvoie le cosinus de n, n tant un angle exprim en radians.


COSH(n)

Renvoie le cosinus hyperbolique de n.


EXP(n)

Renvoie e puissance n.
FLOOR(nb)

Renvoie le plus grand entier infrieur ou gal nb.


LN(n)

Renvoie le logarithme nprien de n qui doit tre un entier strictement positif.


LOG(m,n)

Renvoie le logarithme en base m de n. m doit tre un entier strictement suprieur 1, et n un


entier strictement positif.
MOD(m,n)

Renvoie le reste de la division entire de m par n, si n vaut 0 alors renvoie m. Attention, utilise
avec au moins un de ses arguments ngatifs, cette fonction donne des rsultats qui peuvent tre
diffrents d'un modulo classique. Cette fonction ne donne pas toujours un rsultat dont le signe
du diviseur.
POWER(m,n)

Renvoie m puissance n, m et n peuvent tre des nombres quelconques entiers ou rels mais si m
est ngatif n doit tre un entier.
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(nb)

Renvoie -1 si nb est ngatif, 0 si nb est nul, 1 si nb est positif.

19

sql.doc
SIN(n)

Renvoie le sinus de n, n tant un angle exprim en radians.


SINH(n)

Renvoie le sinus hyperbolique de n.


SQRT(nb)

Renvoie la racine carre de nb qui doit tre un entier positif ou nul.


TAN(n)

Renvoie la tangente de n, n tant un angle exprim en radians.


TANH(n)

Renvoie la tangente hyperbolique de n.


TRUNC(n[,m])

Si m est positif, renvoie n arrondi tronqu m chiffres aprs la virgule. Si m est ngatif, renvoie n
tronqu m chiffres avant la virgule. m doit tre un entier et il vaut 0 par dfaut.
Exercice : Donner pour chaque employ son salaire journalier.

Expressions et fonctions sur les chanes de caractres


Oprateur sur les chanes de caractres
Il existe un seul oprateur sur les chanes de caractres : la concatnation. Cet oprateur se note au
moyen de deux caractres |(barre verticale) accols. Le rsultat d'une concatnation est une chane
de caractres obtenue en crivant d'abord la chane gauche de || puis celle droite de ||.
Fonctions sur les chanes de caractres
Le paragraphe suivant contient les fonctions travaillant sur les chanes de caractres et renvoyant
des chanes de caractres.
CONCAT(chane1,chane2)

Renvoie la chane obtenue en concatnant chane1 chane2. Cette fonction est quivalente
l'oprateur de concatnation | |.
INITCAP(chane)

Renvoie chane en ayant mis la premire lettre de chaque mot en majuscule et toutes les autres
en minuscule. Les sparateurs de mots sont les espaces et les caractres non alphanumriques.
LOWER(chane)

Renvoie chane en ayant mis toutes ses lettres en minuscules.


LPAD(chane, long,[char])

Renvoie la chane obtenue en compltant, ou en tronquant, chane pour qu'elle ait comme
longueur long en ajoutant ventuellement gauche le caractre (ou la chane de caractres)
char. La valeur par dfaut de char est un espace.
LTRIM(chane[,ens])

Renvoie la chane obtenue en parcourant partir de la gauche chane et en supprimant tous les
caractres qui sont dans ens. On s'arrte quand on trouve un caractre qui n'est pas dans ens. La
valeur de dfaut de ens est un espace.
REPLACE(chane, avant, aprs)

Renvoie chane dans laquelle toutes les occurrences de la chane de caractres avant ont t
remplacs par la chane de caractres aprs.

20

sql.doc
RPAD(chane, n,[char])

Renvoie la chane obtenue en compltant, ou en tronquant, chane pour qu'elle ait comme
longueur long en ajoutant ventuellement droite le caractre (ou la chane de caractres) char.
La valeur par dfaut de char est un espace.
RTRIM(chane[,ens])

Renvoie la chane obtenue en parcourant partir de la droite chane et en supprimant tous les
caractres qui sont dans ens. On s'arrte quand on trouve un caractre qui n'est pas dans ens. La
valeur de dfaut de ens est un espace.
SOUNDEX(chane)

Renvoie la chane de caractres constitue de la reprsentation phontique des mots de chane.


SUBSTR(chane, m[,n])

Renvoie la partie de chane commenant au caractre m et ayant une longueur de n.


TRANSLATE(chane, avant, aprs)

Renvoie une chane de caractres en remplaant chaque caractre de chane prsent dans avant
par le caractre situ la mme position dans aprs. Les caractres de chane non prsents
dans avant ne sont pas modifis. avant peut contenir plus de caractres que aprs, dans ce cas
les caractres de avant sans correspondants dans aprs seront supprims de chane .
UPPER(chane)

Renvoie chane en ayant mis toutes ses lettres en majuscules.


Le paragraphe suivant contient les fonctions travaillant sur les chanes de caractres et renvoyant
des entiers.
INSTR(chane, sous-chane, dbut, occ)

Renvoie la position du premier caractre de chane correspondant loccurrence occ de souschane en commenant la recherche la position dbut.
LENGTH(chane)

Renvoie la longueur de chane, exprime en nombre de caractres.

Expressions et fonctions sur les dates


Oprateurs sur les dates
Au moyen des oprateurs arithmtiques + et - il est possible de construire les expressions suivantes
:

date +/- nombre : le rsultat est une date obtenue en ajoutant le nombre de jours nombre
la date date.

date2 - date1 : le rsultat est le nombre de jours entre les deux dates.

Fonctions sur les dates


ADD_MONTHS(date, n)

Renvoie la date obtenue en ajoutant n mois date. n peut tre un entier quelconque. Si le mois
obtenu a moins de jours que le jour de date, le jour obtenu est le dernier du mois.
LAST_DAY(date)

Renvoie la date du dernier jour du mois de date.


MONTHS_BETWEEN(date2, date1)

21

sql.doc
Renvoie le nombre de mois entre date2 et date1, si date2 est aprs date1 le rsultat est
positif, sinon le rsultat est ngatif. Si les jours date2 et date1 sont les mmes, ou si ce sont les
derniers jours du mois, le rsultat est un entier. La partie fractionnaire est calcule en
considrant chaque jour comme 1/31me de mois
NEXT_DAY(date, nom_du_jour)

Renvoie la date du prochain jour de la semaine dont le nom est nom_de_jour.


ROUND(date[,prcision])

Renvoie date arrondie l'unit spcifie dans prcision. L'unit de prcision est indique en
utilisant un des masques de mise en forme de la date. On peut ainsi arrondir une date l'anne,
au mois, la minute,... Par dfaut la prcision est le jour.
SYSDATE

Renvoie la date et l'heure courantes du systme d'exploitation hte.


TRUNC(date[,prcision])

Renvoie date tronque l'unit spcifie dans prcision. Les paramtres sont analogues
ceux de la fonction ROUND.
Exercices :

Donner la date du lundi suivant l'embauche de chaque employ.


Donner la date date d'embauche de chaque employ arrondie l'anne.
Donner pour chaque employ le nombre de jours depuis son embauche.

Fonctions de conversion
ASCII(chane)

Renvoie le nombre correspondant au code ascii du premier caractre de chane.


CHR(nombre)

Renvoie le caractre dont nombre est le code ascii.


TO_CHAR(nombre, format)

Renvoie la chane de caractres en obtenue en convertissant nombre en fonction de format.


Format est une chane de caractres pouvant contenir les caractres suivants :
9

reprsente un chiffre (non reprsent si non significatif)

reprsente un chiffre (reprsent mme si non significatif)

point dcimal apparent

dfinit la position du point dcimal non apparent

$
B

une virgule apparatra cet endroit


un $ prcdera le premier chiffre significatif
le nombre sera reprsent par des blancs s'il vaut 0

EEEE

le nombre sera reprsent avec un exposant (le spcifier avant MI ou PR)

MI

le signe ngatif sera droite

PR

un nombre ngatif sera entre <>

22

sql.doc
TO_CHAR(date, format)

Renvoie conversion d'une date en chane de caractres. Le format indique quelle partie de la
date doit apparatre, c'est une combinaison des codes suivants :
Scc

sicle avec signe

Cc

sicle

sy,yyy

anne (avec signe et virgule)

y,yyy anne( avec virgule)


yyyy

anne

yyy

3 derniers chiffres de l'anne

yy

2 derniers chiffres de l'anne

dernier chiffre de l'anne

numro du trimestre dans l'anne

ww

numro de la semaine dans l'anne

numro de la semaine dans le mois

mm

numro du mois

ddd

numro du jour dans l'anne

dd

numro du jour dans le mois

numro du jour dans la semaine

hh ou hh12

heure (sur 12 heures)

hh24

heure sur 24 heures

mi

minutes

ss

secondes

sssss secondes aprs minuit


j

jour du calendrier julien

Les formats suivants permettent d'obtenir des dates en lettres ( en anglais) :


syear ou year

anne en toutes lettres

month nom du mois


mon

nom du mois abrg sur 3 lettres

day

nom du jour

dy

nom du jour abrg sur 3 lettres

23

sql.doc
am ou pm

indication am ou pm

bc ou ad indication avant ou aprs jsus christ

Les suffixes suivants modifient la prsentation du nombre auquel ils sont accols :
Th

ajout du suffixe ordinat st, nd, rd, th

Sp

nombre en toutes lettres

Tout caractre spcial insr dans le format sera reproduit tel quel dans la chane de
caractres rsultat.
TO_DATE(chane, format)

Permet de convertir une chane de caractres en donne de type date. Le format est identique
celui de la fonction TO_CHAR.
TO_NUMBER(chane)

Convertit chane en sa valeur numrique.


Remarque : On peut galement insrer dans le format une chane de caractres quelconque,
condition de la placer entre guillemets"".
Exercices :

Donner la liste de tous les employs dont le nom ressemble DUPONT.

Donner la liste de tous les noms des employs en ayant supprim tous les 'L' et les 'E'
en tte des noms.
Donner la liste de tous les noms des employs en ayant remplac les A et les M par
des * dans les noms.
Afficher tous les salaires avec un $ en tte et au moins trois chiffres ( dont deux
dcimales).

Autres fonctions
GREATEST(expr1, expr2,...)

Renvoie la plus grande des valeurs expr1, expr2,.... Toutes les expressions sont converties
au format de expr1 avant comparaison.
LEAST

Renvoie la plus petite des valeurs expr1, expr2,.... Toutes les expressions sont converties au
format de expr1 avant comparaison.
NVL(expr_1, expr_2)

Prend la valeur expr_1, sauf si expr_1 est NULL auquel cas NVL prend la valeur expr_2.
Une valeur NULL en SQL est une valeur non dfinie.
Lorsque l'un des termes d'une expression a la valeur NULL, l'expression entire prend la valeur NULL.
D'autre part, un prdicat comportant une comparaison avec une expression ayant la valeur NULL
prendra toujours la valeur faux. La fonction NVL permet de remplacer une valeur NULL par une
valeur significative.
DECODE(crit, val_1, res_1 [, val_2, res_2 ...], def)

Cette fonction permet de choisir une valeur parmi une liste d'expressions, en fonction de la

24

sql.doc
valeur prise par une expression servant de critre de slection.
Le rsultat rcupr est :

25

sql.doc

Les fonctions de groupe


Les fonctions de groupe
Dans les exemples prcdents, chaque ligne rsultat d'un SELECT tait le rsultat de calculs sur les
valeurs d'une seule ligne de la table consulte. Il existe un autre type de SELECT qui permet
d'effectuer des calculs sur l'ensemble des valeurs d'une colonne. Ces calculs sur l'ensemble des
valeurs d'une colonne se font au moyen de l'une des fonctions suivantes :
AVG([DISTINCT | ALL] expression)

Renvoie la moyenne des valeurs d' expression.


COUNT(* | [DISTINCT | ALL] expression)

Renvoie le nombre de lignes du rsultat de la requte. Si expression est prsent, on ne


compte que les lignes pour lesquelles cette expression n'est pas NULL.
MAX([DISTINCT | ALL] expression)

Renvoie la plus petite des valeurs d'expression.


MIN([DISTINCT | ALL] expression)

Renvoie la plus grande des valeurs d'expression.


STDDEV([DISTINCT | ALL] expression)

Renvoie l'cart-type des valeurs d'expression.


SUM([DISTINCT | ALL] expression)

Renvoie la somme des valeurs


VARIANCE([DISTINCT | ALL] expression)

Renvoie la variance des valeurs d'expression.


DISTINCT Indique la fonction de groupe de ne prendre en compte que des valeurs distinctes.
ALL
Indique la fonction de groupe de prendre en compte toutes les valeurs, c'est la
valeur par dfaut.
Exercices :

Donner le total des salaires du dpartement 10.

Donner le nom, la fonction et le salaire de l'employ (ou des employs) ayant le


salaire le plus lev.
Remarques

Ces SELECT sont diffrents de ceux vus prcdemment. Il est, par exemple, impossible de
demander en rsultat la fois une colonne et une fonction de groupe.

un SELECT comportant une fonction de groupe peut tre utilis dans une sous-interrogation.

Valeurs NULL
Aucune des fonctions de groupe ne tient compte des valeurs NULL l'exception de count(*). Ainsi,
SUM(col) est la somme des valeurs non NULL de la colonne col. De mme AVG est la somme des
valeurs non NULL divise par le nombre de valeurs non NULL.

Calcul sur plusieurs groupes


Il est possible de subdiviser la table en groupes, chaque groupe tant l'ensemble des lignes ayant

26

sql.doc
une valeur commune. C'est la clause GROUP BY qui permet de dcouper la table en plusieurs groupes
:
GROUP BY expr_1, expr_2, ...

Si on a une seule expression, ceci dfinit les groupes comme les ensembles de lignes pour lesquelles
cette expression prend la mme valeur. Si plusieurs expressions sont prsentes les groupes sont
dfinis de la faon suivante : parmi toutes les lignes pour lesquelles expr_1 prend la mme valeur,
on regroupe celles ayant expr_2 identique, ... Un SELECT de groupe avec une clause GROUP BY
donnera une ligne rsultat pour chaque groupe.
Exercice : Total des salaires pour chaque dpartement

Remarque : Dans la liste des colonnes rsultat d'un SELECT comportant une fonction de groupe, ne
peuvent figurer que des caractristiques de groupe, c'est--dire :

soit des fonctions de groupe ;

soit des expressions figurant dans le GROUP BY.

Slection des groupes


De la mme faon qu'il est possible de slectionner certaines lignes au moyen de la clause WHERE, il
est possible dans un SELECT comportant une fonction de groupe de slectionner par la clause
HAVING, qui se place aprs la clause GROUP BY.
Le prdicat dans la clause HAVING suit les mmes rgles de syntaxe qu'un prdicat figurant dans une
clause WHERE.
Cependant, il ne peut porter que sur des caractristiques du groupe : fonction de groupe ou
expression figurant dans la clause GROUP BY, dans ce cas la clause HAVING doit tre place aprs la
clause GROUP BY.
Exercice : Donner la liste des salaires moyens par fonction pour les groupes ayant plus de deux
employs.
Remarque : Un SELECT de groupe peut contenir la fois une clause WHERE et une clause HAVING.
La clause WHERE sera d'abord applique pour slectionner les lignes, puis les groupes seront
constitus partir des lignes slectionnes, et les fonctions de groupe seront values.
Exercice : Donner le nombre d'ingnieurs ou de commerciaux des dpartements ayant au moins
deux employs de ces catgories.
Une clause HAVING peut comporter une sous-interrogation.
Exercice : Quel est le dpartement ayant le plus d'employs ?

Fonction de groupe deux niveaux


Il est possible d'appliquer au rsultat d'un SELECT avec GROUP BY un deuxime niveau de fonction
de groupe.
Exercice : la fonction MAX peut tre applique aux nombres d'employs de chaque dpartement pour
obtenir le nombre d'employs du dpartement ayant le plus d'employs.

27

sql.doc

SQL : Modifier une base


Dfinition
Le langage de manipulation de donnes est le langage permettant de modifier les informations
contenues dans une base de donnes.
L'unit manipule est la ligne. Il existe trois commandes sql permettant d'effectuer les trois types de
modifications des donnes : ajout, modification et suppression.

Ajout de lignes
La commande INSERT permet d'insrer une ligne dans une table en spcifiant les valeurs insrer.
La syntaxe est la suivante :
INSERT INTO nom_table(nom_col1, nom_col2, ...)
VALUES (val1, val2...)

La liste des noms de colonne est optionnelle. Si elle est omise, la liste des colonnes sera par dfaut
la liste de l'ensemble des colonnes de la table dans l'ordre de la cration de la table.
Si une liste de colonnes est spcifie, les colonnes ne figurant pas dans la liste auront la valeur
NULL.
Il est possible d'insrer dans une table des lignes provenant d'une autre table. La syntaxe est la
suivante :
INSERT INTO nom_table(nom_col1, nom_col2, ...)
SELECT ...

Le SELECT peut contenir n'importe quelle clause sauf un ORDER BY qui impliquerait un classement
des lignes contraire l'esprit du relationnel.
Exemple : Insrer dans la table bonus les noms et salaires des directeurs.
INSERT INTO bonus
SELECT nom, salaire
FROM emp
WHERE fonction = 'directeur';

28

sql.doc

Modification de lignes
La commande UPDATE permet de modifier les valeurs d'une ou plusieurs colonnes, dans une ou
plusieurs lignes existantes d'une table. La syntaxe est la suivante :
UPDATE nom_table
SET nom_col1 = {expression1 | ( SELECT ...) },
nom_col2 = {expression2 | ( SELECT ...) }
WHERE prdicat

Les valeurs des colonnes nom_col1, nom_col2, ... sont modifies dans toutes les lignes
satisfaisant au prdicat. En l'absence d'une clause WHERE, toutes les lignes sont mises jour.
Les expressions expression1, expression2,... peuvent faire rfrence aux anciennes valeurs
de la ligne.
Exemple : Augmenter de 10% les ingnieurs.
UPDATE emp
SET salaire = salaire * 1.1
WHERE fonction = 'ingnieur' ;

Suppression de lignes
La commande DELETE permet de supprimer des lignes d'une table.
La syntaxe est la suivante :
DELETE FROM nom_table
WHERE prdicat ;

Toutes les lignes pour lesquelles prdicat est valu vrai sont supprimes. En l'absence de clause
WHERE, toutes les lignes de la table sont supprimes.

29

sql.doc

SQL : Dfinir une base


Dfinition
Le langage de dfinition des donnes est le langage permettant de crer ou de modifier le schma
d'une relation et donc d'une table.
Il permet de crer, de modifier et de supprimer non seulement les tables, mais aussi les vues, les
index et les clusters.

Les tables
Crer une table
La table est la structure de base contenant les donnes des utilisateurs. Quand on cre une table, on
peut spcifier les informations suivantes :

la dfinition des colonnes,

les contraintes d'intgrit,

La tablespace contenant la table,

les caractristiques de stockage,

le cluster contenant la table,

les donnes rsultant d'une ventuelle requte.

Cration simple
La commande de cration de table la plus simple ne comportera que le nom et le type de chaque
colonne de la table. L'on peut crer une table par la commande CREATE TABLE en spcifiant le nom
et le type de chaque colonne. A la cration, la table sera vide mais un certain espace lui sera allou.
La syntaxe est la suivante :
CREATE TABLE nom_table
(nom_col1 TYPE1,
nom_col2 TYPE2,
...)

L'option NOT NULL assure qu'ORACLE interdit lors d'un INSERT ou d'un UPDATE que cette colonne
contienne la valeur NULL, par dfaut elle est autorise.
Cration avec Insertion de donnes
On peut insrer des donnes dans une table lors de sa cration par la commande suivante :
CREATE TABLE nom_table
[(nom_col1,
nom_col2,
...)]
AS SELECT...

On peut ainsi, en un seul ordre SQL crer une table et la remplir avec des donnes provenant du
rsultat d'un SELECT.
On n'a pas besoin alors de spcifier de type pour les colonnes : les types des donnes sont ceux

30

sql.doc
provenant du SELECT. Si des conversions de type sont faire, on peut dans le SELECT utiliser les
fonctions TO_CHAR, TO_DATE, TO_NUMBER.
Par dfaut les noms des colonnes de la nouvelle table sont les noms des colonnes du SELECT. Si des
expressions apparaissent dans le SELECT, les colonnes correspondantes doivent imprativement
tre renommes.
Le SELECT peut contenir des fonctions de groupes mais pas d'ORDER BY car les lignes d'une table ne
peuvent pas tre classes.
On peut, et mme on doit, quand on cre une table dfinir les contraintes d'intgrit que devront
respecter les donnes que l'on mettra dans la table (voir un peu plus bas).
Les types de donnes
Les types de donnes peuvent tre :
NUMBER[(longueur,[prcision]

Ce type de donnes permet de stocker des donnes numriques la fois entires et relles dont
la valeur est comprise entre 10^-130 et 10^125 avec une prcision de 38 chiffres.
Longueur

prcise le nombre maximum de chiffres significatifs stocks (par dfaut 38),


Prcision

donne le nombre maximum de chiffres aprs la virgule (par dfaut 38), sa valeur peut tre
comprise entre -84 et 127. Une valeur ngative signifie que le nombre est arrondi gauche de la
virgule.
CHAR(longueur)

Ce type de donnes permet de stocker des chanes de caractres de longueur fixe. longueur doit
tre infrieur 255, sa valeur par dfaut est 1.
VARCHAR(longueur)

Ce type de donnes permet de stocker des chanes de caractres de longueur variable. longueur
doit tre infrieur 2000, il n'y a pas de valeur par dfaut.
DATE

Ce type de donnes permet de stocker des donnes constitues d'une date et d'une heure.
RAW(longueur)

Ce type de donnes permet de stocker des caractres non imprimables.


LONG

Ce type de donnes permet des stocker des chanes de caractres de longueur variable et
infrieure 2^31 -1. Les colonnes de ce type sont soumises certaines restrictions ;

une table ne peut pas contenir plus d'une colonne de ce type ;

les colonnes de ce type ne peuvent pas apparatre dans des contraintes d'intgrit ;

les colonnes de ce type ne peuvent pas tre indexes ;

les colonnes de ce type ne peuvent pas apparatre dans des clauses : WHERE, GROUP BY,
ORDER BY ou CONNECT BY ainsi que dans un DISTINCT.

31

sql.doc

Contraintes d'intgrit
A la cration d'une table, les contraintes d'intgrit se dclarent de la faon suivante :
CREATE TABLE nom_table (
nom_col_1 type_1,
nom_col_2 type_2,
...
nom_col_n type_n
CONSTRAINT [nom_contrainte_1] contrainte_1,
CONSTRAINT [nom_contrainte_2] contrainte_2,
...
CONSTRAINT [nom_contrainte_m] contrainte_m
);

Ou bien de la faon suivante :


CREATE TABLE nom_table (
nom_col_1 type_1 CONSTRAINT [nom_contrainte_1_1] contrainte_1_1
CONSTRAINT [nom_contrainte_1_2] contrainte_1_2
...
CONSTRAINT [nom_contrainte_1_m] contrainte_1_m,
nom_col_2 type_2

CONSTRAINT [nom_contrainte_2_1] contrainte_2_1


CONSTRAINT [nom_contrainte_2_2] contrainte_2_2
...
CONSTRAINT [nom_contrainte_2_p] contrainte_2_p,

...
nom_col_n type_n

CONSTRAINT [nom_contrainte_n_1] contrainte_n_1


CONSTRAINT [nom_contrainte_n_2] contrainte_n_2
...
CONSTRAINT [nom_contrainte_n_q] contrainte_n_q

);

Les contraintes diffrentes que l'on peut dclarer sont les suivantes :
NOT NULL

La colonne ne peut pas contenir de valeurs NULL.


UNIQUE

Chaque ligne de la table doit avoir une valeur diffrente ou NULL pour cette (ou ces) colonne.
PRIMARY KEY

Chaque ligne de la table doit avoir une valeur diffrente pour cette (ou ces) colonne. les valeurs
NULL sont rejetes.
FOREIGN KEY

Cette colonne fait rfrence une colonne cl d'une autre table.


CHECK

Permet de spcifier les valeurs acceptables pour une colonne.

Modifier une table


On peut modifier dynamiquement la dfinition d'une table grce la commande ALTER TABLE.
Deux types de modifications sont possibles : ajout d'une colonne et modification d'une colonne
existante.
Il n'est pas possible de supprimer une colonne. Par contre une colonne qui n'est plus utilise peut
tre mise la valeur NULL, auquel cas elle n'occupe plus d'espace disque. Si on dsire vraiment

32

sql.doc
supprimer une colonne, il faut :

se crer une nouvelle table sans la colonne en question

dtruire l'ancienne table,

donner la nouvelle table le nom de l'ancienne.

Ajouter une colonne


La commande suivante permet d'ajouter une ou plusieurs colonnes une table existante :
ALTER TABLE nom_table ADD
(nom_col1 TYPE1,
nom_col2 TYPE2,
...)

Les types possibles sont les mmes que ceux dcrits avec la commande CREATE TABLE.
Si la table contient dj des lignes, la nouvelle colonne aura des valeurs NULL pour les lignes
existantes.
Modifier une colonne
Il est possible de modifier la dfinition d'une colonne, condition que la nouvelle dfinition soit
compatible avec le contenu de la colonne et en respectant les contraintes suivantes :

dans tous les cas il est possible d'augmenter la taille d'une colonne ;

il est possible de diminuer la taille, ou mme de changer le type d'une colonne vide ;

on peut spcifier NOT NULL si la colonne ne contient aucune valeur NULL ;

on peut dans tous les cas spcifier NULL pour autoriser les valeurs NULL.

ALTER TABLE nom_table MODIFY


(nom_col1 nouveau_TYPE1,
nom_col2 nouveau_TYPE2,
...)

Supprimer une table


La commande DROP TABLE permet de supprimer une table, sa syntaxe est la suivante :
DROP TABLE nom_table ;

La table nom_table est alors supprime. La dfinition de la table ainsi que son contenu sont
dtruits, et l'espace occup par la table est libr.

Renommer une table


On a la possibilit de changer le nom d'une table par la commande RENAME, la syntaxe est la
suivante :
RENAME ancien_nom TO nouveau_nom ;

33

sql.doc

Les vues
Les vues permettent d'assurer l'objectif d'indpendance logique. Grce elles, chaque utilisateur
pourra avoir sa vision propre des donnes.
On a vu que le rsultat d'un SELECT est lui-mme une table.
Une telle table, qui n'existe pas dans la base mais est cre dynamiquement lors de l'excution du
SELECT, peut tre vue comme une table relle par les utilisateurs. Pour cela, il suffit de cataloguer le
SELECT en tant que vue.
Les utilisateurs pourront consulter la base, ou modifier la base (avec certaines restrictions) travers
la vue, c'est--dire manipuler la table rsultat du SELECT comme si c'tait une table relle.

Crer une vue


La commande CREATE VIEW permet de crer une vue en spcifiant le SELECT constituant la
dfinition de la vue :
CREATE VIEW nom_vue [(nom_col1,...)]
AS SELECT ...
WITH CHECK OPTION ;

La spcification des noms de colonnes de la vue est facultative. Par dfaut, les noms des colonnes
de la vue sont les mmes que les noms des colonnes rsultat du SELECT (si certaines colonnes
rsultat du SELECT sont des expressions, il faut renommer ces colonnes dans le SELECT, ou spcifier
les noms de colonne de la vue).
Une fois cre, une vue s'utilise comme une table. Il n'y a pas de duplication des informations mais
stockage de la dfinition de la vue.
Exemple : Cration d'une vue constituant une restriction de la table emp aux employs du
dpartement 10.
CREATE VIEW emp10 AS
SELECT *
FROM emp
WHERE n_dept = 10 ;

Le CHECK OPTION permet de vrifier que la mise jour ou l'insertion faite travers la vue ne
produisent que des lignes qui font partie de la slection de la vue.
Ainsi donc, si la vue emp10 a t cre avec CHECK OPTION on ne pourra travers cette vue ni
modifier, ni insrer des employs ne faisant pas partie du dpartement 10.
Il est possible d'effectuer des INSERT et des UPDATE travers des vues, sous deux conditions :

le SELECT dfinissant la vue ne doit pas comporter de jointure,

les colonnes rsultat du SELECT doivent tre des colonnes relles et non pas des expressions.

Exemple : Modification des salaires du dpartement 10 travers la vue emp10.


UPDATE emp10
SET sal = sal *1.1;

Toutes les lignes de la table emp, telles que le contenu de la colonne n_dept est gal 10 seront
modifies.

34

sql.doc

Supprimer une vue


Une vue peut tre dtruite par la commande :
DROP VIEW nom_vue;

Renommer une vue


On peut renommer une vue par la commande :
RENAME ancien_nom TO nouveau_nom;

35

sql.doc

Les index
Introduction - Gnralits
Selon le modle relationnel les slections peuvent tre faites en utilisant le contenu de n'importe
quelle colonne et les lignes sont stockes dans n'importe quel ordre.
Considrons le SELECT suivant :
SELECT *
FROM emp
WHERE nom = 'MARTIN'

Un moyen de retrouver la ou les lignes pour lesquelles ,font color=rednom est gal MARTIN est de
balayer toute la table.
Un tel moyen d'accs conduit des temps de rponse prohibitifs pour des tables dpassant quelques
centaines de lignes.
Une solution offerte par tous les systmes de gestion de bases de donnes est la cration d'index, qui
permettra de satisfaire aux requtes les plus frquentes avec des temps de rponse acceptables.
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
Les index sont des structures permettant de retrouver une ligne dans une table partir de la valeur
d'une colonne ou d'un ensemble de colonnes. 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 oracle sont stocks sous forme d'arbres quilibrs (btree) : 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.
Lorsqu'un bloc d'index est plein, il est clat en deux blocs ; en consquence, tous les blocs d'index
ont un taux de remplissage variant de 50% 100%. Sans index on balaie squentiellement toute la
table quelle que soit la position de l'lment recherch.
Utilisation des index
L'adjonction d'un index une table ralentit les mises jour (insertion, suppression, modification de
la cl) mais acclre beaucoup la recherche d'une ligne dans la table.
L'index acclre la recherche d'une ligne partir d'une valeur donne de cl, mais aussi la recherche
des lignes ayant une valeur d'index suprieure ou infrieure une valeur donne, car les valeurs de
cls sont tries dans l'index.
Exemple : Les requtes suivantes bnficieront d'un index sur le champ n_dept.

36

sql.doc
SELECT * FROM emp WHERE num = 16034 ;
SELECT * FROM emp WHERE num >= 27234 ;
SELECT * FROM emp WHERE num BETWEEN 16034

AND 27234;

Un index est utilisable mme si le critre de recherche est constitu seulement du dbut de la cl.
Exemple : La requte suivante bnficiera d'un index sur la colonne nom.
SELECT *
FROM emp
WHERE nom LIKE 'M%' ;

Par contre si le dbut de la cl n'est pas connu, l'index est inutilisable.


Exemple : La requte suivante ne bnficiera pas d'un index sur le champ nom.
SELECT *
FROM emp
WHERE ename LIKE '?????????' ;

Valeurs NULL
Elles ne sont pas reprsentes dans l'index, ceci afin de minimiser le volume ncessaire pour stocker
l'index. En contrepartie, l'index ne sera d'aucune utilit pour retrouver les valeurs NULL lorsque le
critre de recherche est du type IS NULL.
Conversions
L'index n'est utilisable que si le critre de slection est le contenu de la colonne indexe, sans
aucune transformation. Par exemple un index sur salaire ne sera pas utilis pour la requte
suivante :
SELECT * FROM emp
WHERE salaire * 12

300000 ;

Attention en particulier aux conversions de type qui peuvent empcher l'utilisation de l'index.
SQL est un langage typ, chaque type de donnes (numrique, caractre, date) ayant ses propres
oprateurs, ses propres fonctions et sa propre relation d'ordre. En consquence, si dans une
expression, figurent la fois un nombre et une chane de caractres, SQL convertira la chane de
caractres en nombre. De mme si dans une expression, figurent la fois une chane de caractres et
une date, SQL convertira la chane de caractres en date.
Or, dans un prdicat du type :
WHERE fonction(col_indexe) = constante

SQL ne peut pas utiliser l'index.


Ceci peut se produire , de faon insidieuse, lorsque SQL est oblig d'ajouter un appel une fonction
de conversion cause d'une discordance de type.
Exemple : Le prdicat suivant ne bnficiera pas d'un index sur le champ embauche.
SELECT * FROM emp
WHERE embauche LIKE '????' ;

En effet, SQL est oblig d'effectuer une conversion, et le prdicat qui sera valu est :
WHERE TO_CHAR(embauche) LIKE '????'

Le critre de recherche est une fonction de embauche, et non le champ embauche lui-mme, dans ce
cas l'index est inutilisable.

37

sql.doc
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

Crer un index
Un index peut tre cr par la commande suivante :
CREATE [UNIQUE] INDEX nom_index
ON nom_table (nom_col1 , nom_col2, ...)
[PCTFREE nombre]
[COMPRESS | NOCOMPRESS]
[ROWS = nombre_lignes] ;

dans laquelle :

L'option UNIQUE indique que l'on interdit que deux lignes aient la mme valeur dans la
colonne indexe.

PCTFREE prcise le pourcentage de place laisse libre dans les blocs d'index la cration de

l'index. Cette place libre vitera une rorganisation de l'index des les premires insertions de
nouvelles cls. La valeur par dfaut est 20% .

NOCOMPRESS indique que l'on ne veut pas comprimer les cls.

nombre_lignes est une estimation du nombre de lignes, permettant d'optimiser l'algorithme

de classement..
Un index peut tre cr dynamiquement sur une table contenant dj des lignes. Il sera ensuite tenu
jour automatiquement lors des modifications de la table.
Un index peut porter sur plusieurs colonnes, la cl d'accs sera alors la concatnation des diffrentes
colonnes.
On peut crer plusieurs index indpendants sur une mme table.
Les requtes SQL sont transparentes au fait qu'il existe un index ou non. C'est l'optimiseur du
systme de gestion de bases de donnes qui, au moment de l'excution de chaque requte, recherche
s'il peut s'aider ou non d'un index.
Index comprim et non comprim
Les cls dans les index peuvent tre comprimes ou non. La compression est une technique
permettant de rduire dans des proportions trs importantes (d'autant plus que la cl est longue) le
volume de l'index.
En contrepartie, il faut parfois un traitement supplmentaire pour recomposer la cl lors des mises

38

sql.doc
jour de l'index.
Par dfaut, les index sont comprims, les avantages de rduction de taille l'emportant sur les
inconvnients dans la plupart des cas.
sql sait excuter certaines requtes directement au niveau de l'index sans passer par le segment de
donnes, si l'index est non comprim et si tous les champs rsultats de la requte sont dans l'index.
Exemple : L'index cre par :
CREATE INDEX x
ON emp (num, nom)
nocompress ;

permettra de rpondre la question :


SELECT nom
FROM emp
WHERE num

sans lire la table puisque toutes les informations se trouvent dans l'index et que l'index est non
concatn.
Index concatn
Un index concatn est un index portant sur plusieurs colonnes.
Exemple :
CREATE INDEX xemp
ON (n_dept,num) ;

Les index concatns peuvent tre utiliss pour matrialiser une cl compose de plusieurs
colonnes.
SQL sait utiliser un index concatn mme si le critre de recherche ne porte pas sur toutes les
colonnes prsentes dans l'index.
Exemple : L'index ci-dessus est utilisable si l'on ne connat que le numro de dpartement.
SELECT nom
FROM emp
WHERE n_dept = 20 ;

Supprimer un index
Un index peut tre supprim dynamiquement par la commande :
DROP

INDEX nom_index ;

L'espace libr reste attach au segment d'index de la table : il pourra tre utilis pour un autre
index sur la mme table.
L'espace ne sera rendu la partition que lors de la suppression de la table.

39

sql.doc

Les clusters
Introduction - Gnralits
Dfinition : Le cluster est une organisation physique des donnes qui consiste regrouper
physiquement (dans un mme bloc disque) les lignes d'une ou plusieurs tables ayant une
caractristique commune (une mme valeur dans une ou plusieurs colonnes) constituant la cl du
cluster.
La mise en cluster a trois objectifs :

acclrer la jointure selon la cl de cluster des tables mises en cluster,

acclrer la slection des lignes d'une table ayant mme valeur de cl, par le fait que ces
lignes sont regroupes physiquement,

conomiser de la place, du fait que chaque valeur de la cl du cluster ne sera stocke qu'une
seule fois.

Le regroupement en cluster est totalement transparent l'utilisateur : des tables mises en cluster sont
toujours vues comme des tables indpendantes.
Par exemple on pourrait mettre en cluster les tables emp et dept selon n_dept. Ces tables seraient
rorganises de la faon suivante : un bloc de cluster serait cr pour chaque numro de
dpartement, ce bloc contenant la fois les lignes de la table empet de la table dept correspondant
ce numro de dpartement. La jointure entre les tables emp et dept selon n_dept deviendrait alors
beaucoup plus rapide, puisqu'elle serait dj ralise dans l'organisation physique des tables.
Pour que l'on puisse mettre une table en cluster il faut que l'une au moins des colonnes faisant
partie du cluster soit dfinie comme obligatoire (NOT NULL).
On peut indexer les colonnes d'une table en cluster, y compris les colonnes correspondant la cl
ou une partie de la cl du cluster. La cl elle-mme est automatiquement indexe, on peut
ventuellement la rindexer pour crer un index unique servant contrler son unicit.

Crer un cluster
Avant de pouvoir mettre en cluster une ou plusieurs tables il faut crer le cluster au moyen de la
commande CREATE CLUSTER dont la syntaxe est la suivante :
CREATE CLUSTER nom_cluster
(cle1 type1,
cle2 type2,
...)

o l'on donne un nom au cluster, et o l'on dfinit le nom et le type des colonnes constituant la cl
du cluster.
CREATE CLUSTER nom_cluster
(cle1 type1,
cle2 type2,
...)
[SIZE taille_du_bloc]
[COMPRESS | NOCOMPRESS]
[SPACE nom_de_space_definition]

dans laquelle :

40

sql.doc
SIZE

est la taille d'un bloc de cluster. Cette taille peut varier de 1/6 de bloc oracle 1 bloc oracle (2k
octets sur vax/vms), ce paramtre doit tre choisi de faon avoir un bon remplissage des blocs.
COMPRESS|NOCOMPRESS

est relatif l'index qui sera cre sur la cl du cluster


SPACE

spcifie le SPACE DEFINITION qui dfinira les paramtres d'allocation d'espace pour le cluster.
CREATE CLUSTER DEM
(DEPNO NUMBER)
SIZE 512;

Mise en cluster d'une table


En principe c'est ds sa cration qu'il faut spcifier si une table sera implante dans un cluster.
Lors de la cration de la table
L'option cluster de l'ordre CREATE TABLE permet de spcifier que la table doit tre mise en cluster.
Le cluster doit dj exister.
CREATE TABLE nom_table
(nom_col1 TYPE1 NOT NULL,
(nom_col2 TYPE2 NOT NULL,
CLUSTER NOM_CLUSTER

...)
(nom_coli, nom_colj...)

nom_coli, nom_colj sont des noms de colonnes de la table, elles seront identifies une une aux

colonnes cls du cluster spcifies la cration du cluster.


Table dj existante
En principe cela n'est pas possible, il faut donc procder de la faon suivante :

crer une nouvelle table avec l'option cluster et y copier le contenu de la table initiale ;

supprimer l'ancienne table ;

renommer ventuellement la nouvelle table.

Retrait d'une table d'un cluster


Pour retirer une table d'un cluster il faut :

crer une nouvelle table en dehors du cluster et copier la table en cluster dans la nouvelle
table ;

dtruire l'ancienne table ;

la nouvelle table pourra alors tre renomme pour prendre le nom de l'ancienne.

ceci ne dtruit pas la table, mais la reconstruit en dehors du cluster.

Supprimer un cluster
Un cluster ne contenant aucune table peut tre supprim par la commande :
41

sql.doc
DROP CLUSTER nom_cluster ;

Remarque : Les performances du cluster ne sont valables que si on n'a pas de blocs chans (ex de
grande table).

42

sql.doc

Contrle des accs la base et scurit des


donnes

43

sql.doc
place du nom d'utilisateur.
GRANT SELECT, UPDATE ON emp TO PUBLIC;

Un utilisateur ayant accord un privilge peut le reprendre l'aide de l'ordre REVOKE.


REVOKE PRIVILEGE ON {nom_table | nom_vue} FROM nom_utilisateur;

Droits d'accs aux vues


Le propritaire d'une table peut donner des droits de lecture non pas sur la table entire, mais sur
une vue base sur la table. Ainsi, seules les informations faisant partie de la vue seront accessibles.
CREATE VIEW emp1 AS
SELECT nom, fonction, embauche
FROM scott.emp
WHERE n_dept != 10 ;
GRANT SELECT ON emp1 TO PUBLIC;

Tous les utilisateurs pourront slectionner les employs travers la vue emp1 : ils ne verront que les
colonnes nom, fonction, embauche de la table emp et n'auront pas accs aux employs du
dpartement 10. Avec l'option de contrle (CHECK OPTION), les vues peuvent servir raliser les
contrles lors des mises jour.
Exemple : La vue suivante ne permettrait pas d'insrer dans la table des employs emp un employ
dont le numro de dpartement ne figurerait pas dans la table des dpartements dept :
CREATE VIEW majemp AS
SELECT *
FROM emp
WHERE n_dept IN (SELECT n_dept
FROM dept)
WITH CHECK OPTION ;

Comme il est impossible de faire une mise jour sur une vue comportant une jointure il faut
transformer le critre de jointure en une sous-interrogation.
Pour oracle , le nom complet d'une table ou d'une vue est le nom donn par le crateur, prfix par
le nom du crateur. Par exemple scott.emp est le nom complet de la table emp cre par
l'utilisateur scott . Ceci permet plusieurs utilisateurs de crer des objets de mme nom sans qu'il
y ait confusion. En revanche, pour accder un objet dont on n'est pas le crateur, il faut le dsigner
par son nom complet incluant le nom du crateur.

44

sql.doc

Gestion des transactions


Dfinition
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 Systmes de Gestion de Bases de Donnes permettent aux utilisateurs de grer leurs
transactions. Ils peuvent tout moment :

Valider la transaction en cours par la commande COMMIT. Les modifications deviennent


dfinitives et visibles tous les utilisateurs.

Annuler la transaction en cours par la commande ROLLBACK. Toutes les modifications depuis
le dbut de la transaction sont alors dfaites.

En cours de transaction, seul l'utilisateur ayant effectu les modifications les voit.
Ce mcanisme est utilis par les systmes de gestion de bases de donnes pour assurer l'intgrit de
la base en cas de fin anormale d'une tche utilisateur : il y a automatiquement ROLLBACK des
transactions non termines.
ORACLE est un systme transactionnel qui assure la cohrence des donnes en cas de mise jour
de la base, mme si plusieurs utilisateurs lisent ou modifient les mmes donnes simultanment.
ORACLE utilise un mcanisme de verrouillage pour empcher deux utilisateurs d'effectuer des
transactions incompatibles et rgler les problmes pouvant survenir.
ORACLE permet le verrouillage de certaines units (table ou ligne) automatiquement ou sur
demande de l'utilisateur.
Les verrous sont librs en fin de transaction.

Cohrence d'une interrogation


Un utilisateur qui interroge une table (mme trs grande) est garanti de voir toutes les donnes telles
qu'elles taient au moment du dbut de l'interrogation, mme si d'autres utilisateurs modifient la
table et valident leurs modifications pendant ce temps.
Les sgbd dont oracle utilisent alors le fichier image avant pour assurer cette cohrence. Le COMMIT
des utilisateurs modifiant la table n'est pas diffr la fin de l'interrogation.
Remarque : Ds que l'on interroge une table, un verrou est plac sur la dfinition de la table, c'est
dire qu'un autre utilisateur ne peut pas dtruire la table, l'indexer, la mettre en cluster ou modifier sa
dfinition, jusqu' ce que l'interrogation soit termine.

Cohrence de plusieurs interrogations successives


Si l'utilisateur dsire que l'on ne modifie pas une table pendant une session de travail, celui-ci peut
vrouiller la table en mode partag au moyen de l'ordre sql suivant :
LOCK TABLE nom_table IN SHARE MODE NOWAIT;

o l'option NOWAIT, qui peut s'adjoindre toutes les commandes de verrouillage, spcifie que le
process qui demande le verrou n'est pas mis en attente si celui-ci n'est pas disponible.

45

sql.doc
La table n'est alors accessible aux autres utilisateurs qu'en lecture jusqu' la fin de la transaction de
celui qui l'a verrouille (les autres utilisateurs peuvent aussi verrouiller la table en share mode).
Les modifications des autres utilisateurs seront suspendues.

Mise jour
Pour s'assurer l'accs exclusif en modification une table, l'on peut verrouiller cette table en mode
exclusif par la commande :
LOCK TABLE nom_table IN EXCLUSIVE MODE NOWAIT;

La table n'est alors accessible aux autres utilisateurs qu'en lecture et ils ne peuvent plus la
verrouiller en mode exclusif, ni en mode mise jour partage, ni en mode partag jusqu' la fin de
la transaction. Ce verrou est galement obtenu automatiquement ds que l'on effectue un UPDATE,
INSERT ou DELETE sur une table. C'est le mode par dfaut de mise jour d'une table.

46

sql.doc

SQL : Dictionnaire de donnes


Tous les systmes de gestion de bases de donnes relationnels contiennent un dictionnaire de
donnes intgr. C'est un ensemble de tables et de vues dans lesquelles sont stockes les
descriptions des objets de la base, et qui sont tenues jour automatiquement par le systme de
gestion de bases de donnes.
Ces tables ou vues, comme toutes les tables ou vues, peuvent tre consultes au moyen du langage
SQL.

Description
du dictionnaire des donnes
La vue DICTIONARY contient la description des tables et vues du dictionnaire de donnes, le
contenu de cette vue varie en fonction du type d'utilisateur qui l'interroge (dba ou non). Les tables et
vues du dictionnaire de donnes ont chacune un nom prfix par :
User pour les vues contenant la description des objets appartenant l'utilisateur qui interroge le
dictionnaire.
DBA pour les vues accessibles uniquement aux utilisateurs ayant le privilge dba.
ALL pour les vues contenant la description de tous les objets auxquels a accs l'utilisateur qui
interroge le dictionnaire. Ces vues contiennent non seulement les objets crs par l'utilisateur mais
aussi ceux pour lesquels on lui a explicitement donn des droits d'accs ainsi que ceux qui sont
accessibles a tout le monde (accs PUBLIC).
Ce chapitre contient la description d'un sous-ensemble des vues du dictionnaire de donnes.

47

sql.doc

Vues dcrivant les objets de l'utilisateur


USER_CATALOG
Liste des objets appartenant l'utilisateur.
USER_CLUSTERS
Description des clusters crs par l'utilisateur.
USER_COL_COMMENTS
Commentaires sur les colonnes des tables et des vues cres par l'utilisateur.
USER_INDEXES
Description des index crs par l'utilisateur.
USER_IND_COLUMNS
Liste des colonnes indexes par l'utilisateur courant ou indexant les tables de l'utilisateur
courant.
USER_OBJECTS
Description des objets appartenant l'utilisateur.
USER_SYNONYMS
Liste de synonymes crs par l'utilisateur.
USER_TABLES
Description des tables cres par l'utilisateur.
USER_TAB_COLUMNS
Description des colonnes de chaque table ou vue cre par l'utilisateur courant. Chaque ligne de
la vue col dcrit une colonne.
USER_TAB_COMMENTS
Commentaires sur les tables et les vues cres par l'utilisateur.
USER_TAB_GRANTS
Droits sur les objets donns par l'utilisateur ou dont l'utilisateur est le bnficiaire.
USER_TAB_GRANTS_MADE
Droits sur ses objets, tables ou vues, donns par l'utilisateur.
USER_TAB_GRANTS_RECD
Droits sur des objets donns l'utilisateur.
USER_USERS
Informations sur l'utilisateur courant.
USER_VIEWS
Texte des vues cres par l'utilisateur.

48

sql.doc

Vues dcrivant les objets auxquels l'utilisateur


a accs
ALL_CATALOG
Liste de tous les objets accessibles par l'utilisateur.
ALL_COL_COMMENTS
Commentaires sur les colonnes des tables et des vues accessibles par l'utilisateur.
ALL_INDEXES
Description des index accessibles par l'utilisateur.
ALL_IND_COLUMNS
Liste des colonnes indexes appartenant aux tables accessibles par l'utilisateur.
ALL_OBJECTS
Description des objets accessibles par l'utilisateur.
ALL_SYNONYMS
Liste de tous les synonymes accessibles par l'utilisateur.
ALL_TABLES
Description des tables accessibles par l'utilisateur.
ALL_TAB_COLUMNS
Description de toutes les colonnes des tables ou vues accessibles par l'utilisateur.
ALL_TAB_COMMENTS
Commentaires sur les tables et les vues accessibles par l'utilisateur.
ALL_TAB_GRANTS
Droits sur les objets donns par l'utilisateur ou dont l'utilisateur est le bnficiaire.
ALL_TAB_GRANTS_MADE
Droits sur ses objets, tables ou vues, donns par l'utilisateur.
ALL_TAB_GRANTS_RECD
Droits sur des objets donns l'utilisateur.
ALL_USERS
Informations sur tous les utilisateurs.
ALL_VIEWS

49

sql.doc

Synonymes
Les noms des vues tant assez longs, les synonymes suivants ont ts dfinis :
CAT

Synonyme pour USER_CATALOG

CLU

Synonyme pour USER_CLUSTERS

COLS

Synonyme pour USER_TAB_COLUMNS

DICT

Synonyme pour DICTIONARY

IND

Synonyme pour USER_INDEXES

MYPRIV

Synonyme pour USER_USERS

OBJ

Synonyme pour USER_OBJECTS

SEQ

Synonyme pour USER_SEQUENCES

SYN

Synonyme pour USER_SYNONYMS

TABS

Synonyme pour USER_TABLES

50

sql.doc

Rfrences
Alfred V. Aho and Jeffrey D. Ullman. Foundations of Computer science. Computer Science
Press, 1982.
M. Bouzeghoub, M. Jouve, and P. Pucheral. Systmes de Bases de Donnes : des techniques
d'implantation la conception de schmas. Eyrolles, 1990.
G. Gardarin and P. Valduriez. Bases de Donnes relationnelles : analyse et comparaison des
systmes. Eyrolles, 1985.
Georges Gardarin. Bases de Donnes : Les systmes et leurs langages. Eyrolles, 1982.
P. C. Kanellakis. Elements of relational database theory. In J. Van Leeuwen, editor, Handbook
of Theoretical Computer Science Volume B : Formal model and semantics. Elsevier, the MIT
press, 1990.

51

Vous aimerez peut-être aussi