Escolar Documentos
Profissional Documentos
Cultura Documentos
Akoka-Wattiau
SQL
Akoka-Wattiau
Page 1
Akoka-Wattiau
SQL ORACLE
Dfinition des Donnes
Akoka-Wattiau
Page 2
Akoka-Wattiau
Logique SQL
Environnement SQL
Catalogue C1
Schma
Table
Akoka-Wattiau
Page 3
SQL ORACLE
Dfinition des Donnes
permet de
- crer,
- modifier,
- supprimer,
- renommer,
les lments du schma d'une base de donnes :
- les tables,
- les vues,
- les index.
Akoka-Wattiau
1. Les tables
1.1. Cration :
CREATE TABLE nomtable
( nomcol1 typecol1 [contraintecol1],
nomcol2 typecol2 [contraintecol2],
...,
contraintetable1,
contraintetable2,...);
8
Akoka-Wattiau
Page 4
Types de donnes
caractres :
CHAR ou VARCHAR
au maximum 255
Page 5
10
hors norme
format standard : DD-MON-YY
stocke : sicle, anne, mois, jour, heure, minutes et secondes
fonctions de conversion de format avec masques
Akoka-Wattiau
Akoka-Wattiau
Page 6
Contraintes
1) Colonnes obligatoires : nomcol type NOT NULL
exemple : CREATE TABLE FOURNISSEUR(... ,
F# NOT NULL CONSTRAINT NN_CNT);
* "CONSTRAINT nom" permet de nommer la contrainte
2) Unicit d'une colonne : nomcol type UNIQUE
exemple : F# NOT NULL UNIQUE
* Il faut que la colonne soit NOT NULL
* Il faut que la colonne ne soit pas une cl primaire
13
Akoka-Wattiau
Contraintes (suite)
3) Unicit de plusieurs colonnes :
UNIQUE (nomcol1,nomcol2,...)
exemple : UNIQUE (FNOM,VILLE)
4) Cl primaire : nomcol type PRIMARY KEY
ou
PRIMARY KEY (nomcol1,nomcol2,..)
* 1 seule par table, il faut que la colonne soit NOT NULL
* sera compare la cl trangre par la contrainte rfrentielle
14
Akoka-Wattiau
Page 7
Contraintes (suite)
5) Contrainte rfrentielle :
nomcol REFERENCES nomtable (nomcol)
ou FOREIGN KEY (listecolonnes) REFERENCES
table(listecolonnes)
* la (ou les) colonne rfrence doit tre cl primaire ou
colonne unique dans l'autre table.
6) Contrainte smantique : CHECK condition
* compare les colonnes d'une mme table
exemple : CHECK (AGE BETWEEN 7 AND 77)
15
Akoka-Wattiau
1.2. Modification :
ALTER TABLE nomtable modification;
* permet de modifier la structure d'une table
Modifications autorises :
a)
Page 8
16
c)
Akoka-Wattiau
1.2.
Modification :
18
Akoka-Wattiau
Page 9
1.3.
Suppression :
Akoka-Wattiau
1.4. Renommage :
RENAME anciennom TO nouveaunom;
exemple : RENAME FOURNISSEUR TO F;
20
Akoka-Wattiau
Page 10
2. Les vues
Akoka-Wattiau
2. Les vues
2.1. Cration :
CREATE VIEW nomvue [alias1,alias2,...] AS question;
Akoka-Wattiau
Page 11
23
Akoka-Wattiau
Performances !
Akoka-Wattiau
Page 12
3. Les index
*
*
*
*
*
*
*
*
*
hors norme
pour acclrer l'accs aux donnes
pour garantir l'unicit de certaines donnes
peuvent tre crs sur une ou plusieurs colonnes
les index sont crs par l'utilisateur (ou plutt le DBA) mais ils n'ont pas
tre rfrencs lors de la manipulation, c'est l'optimiseur qui se charge de les
utiliser, le cas chant
index cl : index = physique / cl = logique
un index peut tre unique ou non unique
un index permet d'acclrer les interrogations, mais peut pnaliser les mises
jour
structure interne : principalement B-trees
25
Akoka-Wattiau
Akoka-Wattiau
Page 13
Akoka-Wattiau
Akoka-Wattiau
Page 14
SQL ORACLE
Manipulation des Donnes
29
Akoka-Wattiau
SQL ORACLE
Manipulation des Donnes
INTERROGATION :
SELECT
MISE A JOUR :
INSERT
UPDATE
DELETE
Akoka-Wattiau
Page 15
ajout
modification
suppression
30
Akoka-Wattiau
Akoka-Wattiau
Page 16
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
a)
b)
c)
d)
Akoka-Wattiau
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
e)
f)
g)
Akoka-Wattiau
Page 17
Akoka-Wattiau
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
h) Numros des fournisseurs qui ne sont pas de Londres
SELECT FNO
FROM F
WHERE NOT(VILLE='Londres');
ou
SELECT FNO
FROM F
WHERE VILLE != 'Londres';
i)
(!= ou ^= ou <>)
Akoka-Wattiau
Page 18
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
j)
Akoka-Wattiau
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
l)
n)
Page 19
38
Table de vrit
X
X and Y
X or Y
not x
Vrai
Vrai
Vrai
Vrai
faux
Vrai
Faux
Faux
Vrai
faux
Faux
Faux
Faux
Faux
Vrai
Vrai
Inconnu
Inconnu
Vrai
Faux
Faux
Inconnu
Faux
Inconnu
vrai
Inconnu
Inconnu
Inconnu
Inconnu
inconnu
39
Akoka-Wattiau
Akoka-Wattiau
Page 20
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
o)
Akoka-Wattiau
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
q) Supposons que pour la pice on a PRIXACHAT et PRIXVENTE,
donner la liste des numros de pices avec les marges unitaires
classes de la plus grande la plus faible
SELECT PNO, PRIXVENTE-PRIXACHAT
FROM P
ORDER BY 2 DESC;
42
Akoka-Wattiau
Page 21
valeur absolue
partie entire + 1
partie entire
modulo n
puissance n
arrondi m dcimales
signe de n : -1, 0 ou 1
racine carre
tronqu m dcimales
43
Akoka-Wattiau
caractre de code n
transforme la chane en 'Titre' (1re lettre de chaque mot en
majuscules)
LENGTH(c)
longueur de c
LOWER(c)
tout en minuscules
REPLACE(c,chane remplacer,chane de remplac.)
SOUNDEX(c)
reprsentation phontique
SUBSTR(c,m,n)
extrait n caractres partir du m-ime caractre
TRANSLATE(c,c1,c2) remplace partout dans c le caractre c1 par le caractre c2
UPPER(c)
tout en majuscules
44
Akoka-Wattiau
Page 22
Akoka-Wattiau
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
r)
s)
Akoka-Wattiau
Page 23
Les lignes ayant les mmes valeurs pour l'ensemble des colonnes du GROUP
BY sont regroupes.
Le SELECT contient une fonction qui porte sur un ensemble de valeurs.
Le HAVING permet de tester une condition contenant une fonction agrgat.
Liste des principales fonctions agrgats :
Akoka-Wattiau
AVG(colonne)
COUNT(DISTINCT colonne) COUNT(*) COUNT(colonne)
MAX(colonne) MIN(colonne)
SUM(colonne)
47
Akoka-Wattiau
Page 24
49
Akoka-Wattiau
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
t)
v)
50
Akoka-Wattiau
Page 25
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
x)
51
Akoka-Wattiau
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
y)
z)
Akoka-Wattiau
Page 26
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
ab) Villes dont les fournisseurs ont tous le mme statut
SELECT VILLE FROM F
GROUP BY VILLE
HAVING COUNT(DISTINCT STATUT)=1;
Akoka-Wattiau
ae) Numros des fournisseurs localiss dans la mme ville que 'F1'
SELECT FNO FROM F
WHERE VILLE = (SELECT VILLE FROM F
WHERE FNO='F1');
54
Akoka-Wattiau
Page 27
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
af) Noms des fournisseurs qui fournissent au moins une pice rouge
SELECT FNOM FROM F WHERE FNO IN
(SELECT FNO FROM FPJ WHERE PNO IN
(SELECT PNO FROM P WHERE COULEUR='rouge'));
55
Akoka-Wattiau
56
Akoka-Wattiau
Page 28
SYNTAXE Oracle :
Dans la clause FROM, on prcise la liste des tables joindre.
Dans la clause WHERE, on prcise, en plus de la restriction,
les critres de jointure.
On peut donner ventuellement un nom d'alias chaque table.
Le nom d'alias est obligatoire pour les auto-jointures (jointures
d'une table avec elle-mme).
57
Akoka-Wattiau
SYNTAXE SQL2 :
SELECT listecolonnes FROM table1 NATURAL JOIN table2;
SELECT listecolonnes FROM table1 JOIN table2 ON
critredejointure;
SELECT listecolonnes FROM table1 CROSS JOIN table2;
58
Akoka-Wattiau
Page 29
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
ah) Noms des fournisseurs qui fournissent la pice 'P2'
SELECT F.FNOM FROM F,FPJ
WHERE F.FNO=FPJ.FNO AND FPJ.PNO='P2';
ai) Numros des fournisseurs localiss dans la mme ville que 'F1'
SELECT FOUR2.FNO FROM F FOUR1, F FOUR2
WHERE FOUR2.VILLE=FOUR1.VILLE
AND FOUR1.FNO='F1';
aj) Noms des fournisseurs qui fournissent au moins une pice rouge
SELECT F.FNOM FROM F,P,FPJ
WHERE F.FNO=FPJ.FNO AND P.PNO=FPJ.PNO
AND P.COULEUR='rouge';
59
Akoka-Wattiau
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
ak) Donner les combinaisons fournisseurs-pices localiss au mme
endroit
SELECT F.*, P.* FROM F,P
WHERE F.VILLE=P.VILLE;
ou
SELECT F.*, P.* FROM F,P,FPJ
WHERE F.FNO=FPJ.FNO AND FPJ.PNO=P.PNO AND F.VILLE=P.VILLE;
60
Akoka-Wattiau
Page 30
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
am) Donner la paire de villes telle que le fournisseur localis dans la
premire ville fournit la pice stocke dans la seconde ville
SELECT DISTINCT F.VILLE,P.VILLE
FROM F,P,FPJ
WHERE F.FNO=FPJ.FNO AND FPJ.PNO=P.PNO;
an) Noms des fournisseurs qui fournissent au moins une pice fournie
par le fournisseur 'F1'
SELECT FOUR1.FNOM
FROM F FOUR1, FPJ C1, FPJ C2
WHERE FOUR1.FNO=C1.FNO AND C1.PNO=C2.PNO
AND C2.FNO='F1';
61
Akoka-Wattiau
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
ao) Triplets FNO,PNO,JNO tels que fournisseur, pice et projet
soient situs dans la mme ville
SELECT DISTINCT F.FNO, P.PNO, J.JNO
FROM F, P, J
WHERE F.VILLE=P.VILLE AND P.VILLE=J.VILLE;
Akoka-Wattiau
Page 31
Jointures externes
Permettent d'ajouter (avec des valeurs nulles) les lignes n'ayant pas de correspondant dans
l'autre table
->
ajouter (+) aprs la colonne conserver (syntaxe Oracle)
aq)
Liste des quantits fournies par pice avec les caractristiques de la pice
SELECT P.*, FNO, JNO
FROM P, FPJ
WHERE P.PNO=FPJ.PNO;
ne donne pas ces quantits si la pice n'est pas dcrite dans la table P
63
Akoka-Wattiau
Akoka-Wattiau
Page 32
SELECT *
FROM P NATURAL RIGHT OUTER JOIN FPJ;
SELECT * FROM P
NATURAL FULL OUTER JOIN FPJ;
les deux
65
Akoka-Wattiau
66
Akoka-Wattiau
Page 33
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
Akoka-Wattiau
68
Akoka-Wattiau
Page 34
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
SELECT PNO
FROM P
WHERE POIDS > 16
OR PNO IN (SELECT PNO
FROM FPJ
WHERE FNO='F2');
69
Akoka-Wattiau
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
SELECT PNO
FROM P
WHERE POIDS > 16
AND PNO IN (SELECT PNO
FROM FPJ
WHERE FNO='F2');
70
Akoka-Wattiau
Page 35
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
avec oprateur
ensembliste
SELECT FNO
FROM F
MINUS
SELECT FNO
FROM FPJ
WHERE PNO='P2';
SELECT FNO
FROM F
WHERE FNO NOT IN
(SELECT FNO FROM FPJ
WHERE PNO=P2);
71
Akoka-Wattiau
Akoka-Wattiau
Page 36
Akoka-Wattiau
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
Akoka-Wattiau
Page 37
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
az) Mettre 0 la quantit de pices achetes pour tous les fournisseurs
de Londres
UPDATE FPJ SET QTE=0 WHERE 'Londres'=(SELECT
VILLE FROM F WHERE F.FNO=FPJ.FNO);
ou bien
UPDATE FPJ SET QTE=0 WHERE FNO IN (SELECT
FNO FROM F WHERE VILLE = 'Londres');
Akoka-Wattiau
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
bb) Supprimer le fournisseur 'F1'
DELETE FROM F
WHERE FNO='F1';
76
Akoka-Wattiau
Page 38
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
be) Supprimer toutes les informations relatives aux fournisseurs de
Londres
DELETE FROM FPJ
WHERE 'Londres'= (SELECT VILLE FROM F
WHERE F.FNO=FPJ.FNO);
puis
DELETE FROM F WHERE VILLE='Londres';
COULEUR="inconnu")
Akoka-Wattiau
On peut aussi insrer dans une table une slection d'autres tables
78
Akoka-Wattiau
Page 39
F(FNO,FNOM,STATUT,VILLE)
P(PNO,PNOM,COULEUR,POIDS,VILLE)
J(JNO,JNOM,VILLE)
FPJ(FNO,PNO,JNO,QTE)
bh) Construire une table contenant la liste des rfrences de pices livres soit
par un fournisseur londonien soit pour un projet se droulant Londres
CREATE TABLE LP (PNO CHAR(6));
INSERT INTO LP (PNO)
SELECT DISTINCT PNO FROM FPJ
WHERE FNO IN (SELECT FNO FROM F
WHERE VILLE='Londres')
OR JNO IN (SELECT JNO FROM J
WHERE VILLE='Londres');
ou bien
INSERT INTO LP (PNO)
SELECT DISTINCT PNO FROM FPJ, F
WHERE FPJ.FNO=F.FNO AND F.VILLE='Londres'
UNION
SELECT DISTINCT PNO FROM FPJ,J
WHERE FPJ.JNO=J.JNO AND J.VILLE='Londres';
Akoka-Wattiau
79
80
Akoka-Wattiau
Page 40
Akoka-Wattiau
6. Autorisations d'accs
* Le crateur d'une table (ou d'une vue) en est le propritaire.
* Par dfaut, les autres utilisateurs n'ont pas accs ces
objets (ni interrogation, ni mise jour).
* Le propritaire d'une table ou d'une vue peut autoriser
d'autres utilisateurs effectuer certaines oprations.
* Seul le droit de suppression (DROP VIEW ou DROP
TABLE) ne peut se cder.
82
Akoka-Wattiau
Page 41
L'autorisation
GRANT liste de droits
ON objet
TO liste d'utilisateurs
[WITH GRANT OPTION];
Les droits
SELECT
UPDATE
INSERT
DELETE
ALTER
INDEX
ALL
Akoka-Wattiau
Akoka-Wattiau
Page 42
Akoka-Wattiau
7. Conclusion
Un langage simple et puissant
La normalisation induit une logique commune
et une volution homogne
Chaque SGBD garde, malgr la norme, des
spcificits qui sont plutt des atouts que des
limites
Difficult dinscrire un langage assertionnel/
dclaratif dans une logique procdurale
86
Akoka-Wattiau
Page 43