Académique Documents
Professionnel Documents
Culture Documents
Faîçal Felhi
felhi_fayssal@yahoo.fr
Définitions de Système de Gestion de
Base de Données
Syntaxe :
CREATE TABLE nom_table
(col1 type [(taille)] [default ValeurParDefaut] [null / not null] [contrainte de
colonne] ,
col2 type [(taille)] [default ValeurParDefaut] [null / not null] [contrainte de
colonne],
coln type [(taille)] [default ValeurParDefaut] [null / not null] [contrainte de
colonne]
[contrainte de tables]);
Définition des colonnes :
La taille indique la valeur maximale de la longueur du
champ.
Les types de données possibles sont :
NUMBER : stocke les nombres en général entiers positifs et négatifs.
NUMBER(n) ou NUMBER(n,m)
n : varie de 1 à 38 et indique le nombre maximum des chiffres à
stocker. C'est la précision.
m : indique le nombre de chiffres situés à droite de la virgule si m est
positive et à gauche si m est négative. Ex. 3,345 ou -123,456
DECIMAL : stocke des nombres à fraction décimale fixe et
permet au système d'être compatible avec d'autres BD
relationnelles (surtout SQL/DS et DB2).
FLOAT : stocke des nombres en virgule flottante.
CHAR : stocke des chaînes comportant au maximum 255
caractères dans une colonne de longueur fixe : CHAR(n). Si on
ne spécifie pas la longueur : CHAR, une colonne de ce type ne
stocke qu'un seul caractère.
VARCHAR / VARCHAR2 : le deuxième type remplace le
premier. Il stocke jusqu'à 4000 caractères dans une seule colonne
pour des chaînes de longueur variable.
LONG : donnée de type caractère variable allant jusqu'à 2 G.
Mais on ne peut pas employer de fonctions intégrées ni
d'opérateurs avec ce type (pour chercher ou modifier le contenu
d'une colonne de ce type). On peut stocker et récupérer ces
données mais pas les manipuler. En plus ce type de données ne
peut être utilisé qu'une seule fois dans une table avec la version 7
d'Oracle.
DATE : permet de stocker des informations concernant les dates
et les heures.
Exemple : Créer la table Produit ayant comme
schéma :
Produit (Numprod, Desprod, Couleur, Poids, Qte_stk,
Qte_seuil, Prix)
Avec
Numprod : de type numérique de taille 6,
Desprod : de type caractère variable de taille 15,
Couleur : de type caractère sur une position,
Poids : de type numérique sur huit positions dont trois
chiffre après la virgule,
Qte_stk : de type numérique sur sept positions dont trois
chiffres après la virgule,
Qte_seuil : de type numérique sur sept positions dont trois
chiffres après la virgule,
Prix : de type numérique sur dix positions dont sept chiffres
avant la virgule.
Solution
CREATE TABLE Produit
(Numprod number(6) not null,
Desprod varchar(15),
Couleur char,
Poids number(8,3),
Qte_stk number(7,3),
Qte_seuil number(7,3),
Prix number(10,3));
Définition des contraintes
Une contrainte d'intégrité est une règle qui définit la cohérence
d'une donnée ou d'un ensemble de données de la base de
données.
Les contraintes définies par SQL sont :
Non nullité des valeurs d'un attribut : L'utilisateur est obligé
de saisir la valeur de l'attribut. La commande est : NOT NULL
Unicité de la valeur d'un attribut ou d'un groupe d'attributs
: la valeur doit être unique. La commande est : UNIQUE
Exemple
On suppose que deux produits différents ne peuvent pas avoir la
même désignation. La commande de création da la table produit
devient :
Exemple
CREATE TABLE Produit
(Numprod number(6) not null,
Desprod varchar(15) unique,
Couleur char,
Poids number(8,3),
Qte_stk number(7,3),
Qte_seuil number(7,3),
Prix number(10,3));
Définition des contraintes
Clé primaire (un attribut ou un groupe) : indique que
l'attribut est une clé primaire. Elle peut être définie comme
contrainte de table ou comme contrainte de colonne.
Clé primaire comme contrainte de table selon la syntaxe :
CONSTRAINT nom_contrainte PRIMARY KEY(att1,
att2,…, attn) ;
Remarque
Dans le cas de clé primaire multiple, la clé primaire doit être créée comme contrainte
de table.
Définition des contraintes
Clé étrangère (intégrité référentielle) : lorsque la clé
primaire figure dans une autre table en tant qu'un attribut
non clé. La clé étrangère peut être définie comme contrainte
de table ou comme contrainte de colonne.
Clé étrangère comme contrainte de table selon la syntaxe :
CONSTRAINT nom_contrainte FOREIGN
KEY(nom_att) references nom_table(nom_att);
Clé étrangère comme contrainte de colonne : en ajoutant
devant la colonne clé étrangère references
nom_table(nom_att),
Remarque :
Il est impossible de créer une clé étrangère si la clé primaire
associée n'existe pas.
Définition des contraintes
Types de CI Oracle :
NULL / NOT NULL : niveau colonne
1. UNIQUE (colonne1 [, colonne2] …)
2. PRIMARY KEY (colonne1 [, colonne2] …)
3. FOREIGN KEY (colonne1 [, colonne2] …)
REFERENCES nomTablePere (colonne1 [,
colonne2] …) [ON DELETE {CASCADE | SET
NULL }]
4. CHECK {condition}
Les 4 dernières CI sont définissables au niveau
colonne ou au niveau table.
Exemple
Si on considère le schéma suivant :
MAGASIN(NumMag, Adresse, Surface)
PRODUIT(NumProd, DesProd, Couleur, Poids, Qte_Stk,
#CodMag)
La commande pour la création de la table Magasin étant :
Create Table Magasin
(NumMag number(6) primary Key,
Adresse varchar(30),
Surface number(7,3));
La commande pour la création de la table Produit peut être
écrite de deux façons:
Solution 1: clé étrangère comme contrainte de
table
CREATE TABLE Produit
(Numprod number(6) primary key,
Desprod varchar(15),
Couleur char,
Poids number(8,3),
Qte_stk number(7,3),
Qte_seuil number(7,3),
Prix number(10,3),
CodMag number(6),
Constraint FK_Produit Foreing Key (CodMag)
references
Magasin(NumMag));
Solution 2: clé étrangère comme contrainte de
colonne
CREATE TABLE Produit
(Numprod number(6) primary key,
Desprod varchar(15),
Couleur char,
Poids number(8,3),
Qte_stk number(7,3),
Qte_seuil number(7,3),
Prix number(10,3),
CodMag number(6) references Magasin(NumMag));
Contrainte de valeur avec la clause check
Permet de limiter les valeurs possibles pour une
colonne en vérifiant une certaine condition. Le
contrôle se fera lors des insertions des données.
Constraint nom_contrainte CHECK (colonne
condition)
La condition sur la colonne peut utiliser :
un opérateur de comparaison
la clause between val1 and val2
la clause in (liste de valeurs)
Exemple
On suppose que le poids d’un produit doit être
positif. La commande de création de la table
Produit devient :
CREATE TABLE Produit
(Numprod number(6) primary key,
Desprod varchar(15),
Couleur char,
Poids number(8,3),
Qte_stk number(7,3),
Qte_seuil number(7,3),
Prix number(10,3),
CodMag number(6) references Magasin(NumMag),
Constraint Ck1_Produit CHECK (Poids >=0));
3- Modification de la structure
d’une table
Les trois possibilités de modification de la structure de table sous ORACLE
permettent soit d'ajouter des colonnes, soit de modifier la structure d'une
colonne, soit de supprimer des colonnes existantes.
1ère forme : Ajout de nouvelles colonnes à une table
Syntaxe :
ALTER TABLE nom_table
ADD (col1 type [(taille)] [null / not null] ,
col2 type [(taille)] [null / not null] ,
...
coln type [(taille)] [null / not null] ) ;
Exemple :
Supposons qu'on veut ajouter une colonne type_clt à la table client :
ALTER TABLE CLIENT
ADD type_clt char(3) ;
2ème forme : Modification de la
structure d'une colonne existante
Syntaxe :
ALTER TABLE nom_table
MODIFY (col1 type [(taille)] [null / not null] ,
col2 type [(taille)] [null / not null] ,
...
coln type [(taille)] [null / not null] ) ;
Remarque :
Pour modifier le nom d'une colonne :
RENAME COLUMN nom_table.ancien_nom TO
nom_table.nouveau_nom ;
Exemple :
Supposons qu'on veut changer le type_clt de char(3) en char(5) :
ALTER TABLE CLIENT
MODIFY type_clt char(5) default ‘Monas’;
3ème forme : Suppression de colonnes
existantes
Syntaxe :
ALTER TABLE nom_table
DROP ( col1 , col2 ,…, coln ) ;
Exemple :
Supposons qu'on veut supprimer le champ ville de la
table Magasin :
ALTER TABLE Magasin
DROP ville ;
4ème forme : Ajout d'une contrainte
Syntaxe :
ALTER TABLE nom_table
ADD Constraint Def_de_contrainte ;
Exemple :
Ajouter à la relation Magasin la contrainte
suivante : la surface doit être comprise entre 10 et
100 m2
ALTER TABLE Magasin
ADD Constraint ck1_magasin check(surface
between 10 and 100) ;
5ème forme : Suppression de contraintes
existantes
80 Disquette
200 Souris G
80 Disquette 20 24 4 125
2- 4-
Select numprod, Select distinct couleur
desprod From produit;
From produit
Where qte_stk >20;
4-1.Notion d’alias
Chaque fois qu'une requête d'interrogation est exécutée, les noms des
colonnes définies dans la structure de la table apparaissent comme
titres de colonnes. On peut modifier ces noms de colonnes, à
l'affichage uniquement, en ajoutant des ALIAS. Si l’alias est
composé de plusieurs mots il faut qu’il apparaisse entre cotes " ".
La commande devient :
SELECT col1 [alias 1], col2 [alias 2], … , coln [alias n]
FROM nom_table
[WHERE condition];
Exemple
Afficher les numéros et désignations de tous les produits. Les titres
des colonnes à afficher seront respectivement Numéro et Nom
Produit
Solution
Select numprod Numéro, desprod "Nom produit" From Produit;
4-2 Spécification d’un critère dans une
requête
La condition est composée généralement de trois termes :
un nom de colonne,
un opérateur de comparaison,
et une constante, une colonne, une liste de valeurs, une expression ou une
requête.
En plus des opérateurs classiques de comparaison ( = , <> , < , > , >= , <= )
ORACLE dispose d'un certain nombre d'opérateurs spécifiques dont
principalement :
IS NULL : permet de tester si le contenu d'une colonne est une valeur nulle
(indéfinie).
IN (liste de valeurs): permet de tester si le contenu d'une colonne coïncide avec
l'une des valeurs de la liste.
BETWEEN V1 and V2 : permet de tester si le contenu d'une colonne est
compris entre les valeurs V1 et V2.
LIKE chaîne générique : permet de tester si le contenu d'une colonne ressemble
à une chaîne de caractères obtenue à partir de la chaîne générique. La chaîne
générique est une chaîne de caractères qui contient l'un des caractères suivants :
% : remplace une autre chaîne de caractères qui peut être même une chaîne vide.
_ : remplace un seul caractère.
Si la condition est composée de sous conditions, on fait recours aux
opérateurs logiques AND, OR et la négation NOT (NOT In, NOT
Like, NOT Between, Is NOT LIKE)
Exemple :
Afficher les numéros de produits dont la couleur n’a pas été saisie,
Afficher les produits de couleur Rouge, Bleu ou Gris,
Afficher les numéros de produits dont le prix est compris entre 100 et
200,
Afficher les produits dont la désignation commence par 'o',
Afficher les numéros et désignations des produits dont les noms
commencent par 'o' ou par 's'.
Afficher les désignations des produits contenant 'r' en deuxième
position de la désignation et existant en stock avec une quantité > 20.
Solution
1) SELECT * FROM produit WHERE couleur is NULL;
10 10 10 10 10 10
20 20
20 30 20 20
30 30
40 30 30
T1 union T2 40
40
T1 intersect T2 T1 minus T2
Nummag
10 Nummag
20 10 Nummag
40 20 40
30 30
Les opérateurs ensemblistes
Syntaxe
SELECT . . . . . .
FROM ..... .
{ UNION | INTERSECT | MINUS }
SELECT . . . . . .
FROM ..... .
{ UNION | INTERSECT | MINUS }
SELECT . . . . . .
FROM ...... ;
Exemple
Afficher les numéros des magasins qui sont à
Monastir ou qui contiennent le produit numéro 100
Select codmag
From produit
Where numprod = 100
UNION
Select nummag
From magasin
Where lower (ltrim(rtrim(adresse)))= ‘monastir';
Exemple
Afficher les numéros des magasins qui sont à Monastir
et qui contiennent le produit numéro 100
Select codmag
From produit
Where numprod = 100
INTERSECT
Select nummag
From magasin
Where lower (ltrim(rtrim(adresse)))= ‘Monastir';
Exemple
Afficher les numéros des magasins qui sont à
Monastir et qui ne contiennent pas le produit
numéro 100
Select nummag
From magasin
Where lower (ltrim(rtrim(adresse)))= ‘Monastir'
MINUS
Select codmag
From produit
Where numprod = 100;
La jointure simple
Elle permet de combiner des enregistrements issues à partir de deux
ou plusieurs tables en vue de retrouver des données associées.
Les colonnes utilisées pour faire la jointure doivent être de même
type et de même taille et sont appelés colonnes de jointure.
Pour effectuer une jointure, il faut spécifier :
Les noms des tables, dans la clause FROM, séparés par des virgules.
La condition de jointure dans la clause WHERE.
Les noms de colonnes doivent être préfixé par les noms de tables pour
éviter toute ambiguïté.
La forme générale d'une requête de jointure est :
SELECT col1 , col2 , …. , coln
FROM table1 ,… . , tablen
WHERE condition ;
Exemple
Magasin (Nummag, adresse, Surface)
Produit (Numprod, Desprod, Couleur, Poids, Qte_stk, Qte_seuil;
Prix, Nummag#)
Afficher les numéros des produits ainsi que leur adresse de stockage
Select numprod, adresse
From produit, magasin
Where produit.nummag=magasin.nummag;
Afficher les adresses des magasins contenant le produit numéro 100
Select adresse
From produit p, magasin m
Where p.nummag = m.nummag
And p.numprod = 100;
Syntaxe Complète de la commande SELECT
SELECT [ALL|DISTINCT] { [table]* |expr [alias], [expr [alias]],..}
FROM table [alias], table [alias],...
[WHERE condition]
[GROUP BY expr, expr,...]
[HAVING condition]
[{UNION | INTERSECT | MINUS } SELECT ...]
[ORDER BY {expr|posn} [ASC | DESC], {expr|posn} [ASC|DESC];