Vous êtes sur la page 1sur 19

Complément de tp

Création de Bases de données relationnelles avec oracle 11g xe en


utilisant le langage SQL

Sommaire

Table des matières


Objectif du tutoriel .................................................................................................................................. 3
1. Présentation de SQL(rappelle de cours).......................................................................................... 3
2. Connexion et déconnexion .............................................................................................................. 3
2.1 Lancement de l’éditeur de commandes SQL ............................................................................ 3
2.2 Se déconnecter de l’utilisateur system ....................................................................................... 4
2.3 Comment se connecter comme utilisateur secondaire ? ........................................................... 4
2.4 Quitter l’éditeur SQL ................................................................................................................... 5
3. Création d’un nouvel utilisateur...................................................................................................... 5
3.1 Commande CREATE USER....................................................................................................... 5
3.2 Attribution des droits .............................................................................................................. 6
4. Objets manipulés par SQL ............................................................................................................... 7
4.1 Identificateurs ......................................................................................................................... 7
4.2 Tables....................................................................................................................................... 7
4.3 Colonnes .................................................................................................................................. 8
5. Création d'une table et contraintes d'intégrité ............................................................................... 8
5.1 Création d'une table ................................................................................................................ 8
5.2 Contraintes d'intégrité .......................................................................................................... 10
5.3 Types de contraintes ............................................................................................................. 11
6. Ajouter, supprimer ou renommer une contrainte ........................................................................ 14
7. Langage de manipulation des données LMD ................................................................................ 15
7.1 Insertion ................................................................................................................................ 15
7.2 Modification .......................................................................................................................... 15
7.3 Suppression ........................................................................................................................... 16
8. Ajout d'une colonne - ADD ............................................................................................................ 17
9. Modification du type d'une colonne – MODIFY ............................................................................ 18
10. Renommer une colonne RENAME COLUMN ............................................................................. 18

1
11. Suppression d'une colonne - DROP COLUMN ........................................................................... 18
12. Renommer une table - RENAME TO .......................................................................................... 19
13. Supprimer une table - DROP TABLE .......................................................................................... 19

2
Objectif du tutoriel
On va ici s’intéresser à la création d'une base de données en utilisant un SGBD (oracle 11g ex).
Cela nous permettra en particulier d’expérimenter la création d’une base de données relationnelle
en utilisant le langage SQL.
Pour taper et faire exécuter des commandes SQL, nous utiliseront l ‘utilitaire SQL*PLUS, fourni
par Oracle.
Les commandes du langage SQL peuvent être tapées directement au clavier par l'utilisateur
ou peuvent être incluses dans un programme écrit dans un langage de troisième génération
(Java, Langage C, Lazarus, Fortran, Cobol, Ada, ...) grâce à un pré- compilateur ou une librairie
d'accès au SGBD.

1. Présentation de SQL(rappelle de cours)


SQL signifie Structured Query Language, c'est-à-dire Langage d'interrogation structuré.
En fait SQL est un langage complet de gestion de bases de données relationnelles.
Il a été conçu par IBM dans les années 70. Il est devenu le langage standard des systèmes de
gestion de bases de données (SGBD) relationnelles (SGBDR).
C'est à la fois :
✓ un langage d'interrogation de la base (ordre SELECT)
✓ un langage de manipulation des données (LMD; ordres UPDATE, INSERT, DELETE).
✓ un langage de définition des données (LDD ; ordres CREATE, ALTER, DROP).
✓ un langage de contrôle de l'accès aux données (LCD ; ordres GRANT, REVOKE).

Dans ce tp de bases de données nous allons apprendre ensemble à utiliser ce langage.


2. Connexion et déconnexion
2.1 Lancement de l’éditeur de commandes SQL
Nous allons nous connecter comme étant administrateur : cela est possible en utilisant le login
(nom utilisateur) system et le mot de passe que vous avez donné lors de l’installation. Par exemple
ici le mot de passe de mon utilisateur system est ‘system’

On entre dans SQL*PLUS par la commande :

SQLPLUS nom /mot-de-passe

3
Comme ceci :

RESULTAT :

NB : Les deux paramètres, nom et mot-de-passe, sont facultatifs. Si on les omet sur la ligne de
commande, SQL*PLUS les demandera.

2.2 Se déconnecter de l’utilisateur system


1. disc ;

2.3 Comment se connecter comme utilisateur secondaire ?


Exemple de connexion avec le nom utilisateur MOHAMMED que nous avons créé dans l’autre
séance (sachant que le mot de passe que moi j’ai donné c’était bien ‘123’) :

Remarque : Vous pouvez lancer l’éditeur SQL d’oracle de manière directe comme ceci :

4
2.4 Quitter l’éditeur SQL
Si je veux quitter l’éditeur SQL c’est la commande : ‘quit’

3. Création d’un nouvel utilisateur


3.1 Commande CREATE USER
Pour pouvoir créer un utilisateur vous devez vous connecter tout d’abord comme administrateur
(voir section 2.1)

Ensuite exécuter la commande suivante :

CREATE USER user_name IDENTIFIED BY password;


Où:

User_name: nom de l’utilisateur

Password : mot de passe de l’utilisateur.

5
Mon utilisateur s’appelle kamel et son mot de passe est 123.

3.2 Attribution des droits


Essayer de vous connecter comme étant l’utilisateur que vous venez de créer. Voilà ce qui se passe
chez moi :

‘Lacks’ est un mot anglais qui veut dire ‘manque’

Ce message veut particulièrement dire que kamel n’a pas le privilège de se connecter à sa
session.

Si vous voulez que l’utilisateur « kamel » soit capable de travailler sur la base de données il
faudra lui attribuer les permissions (droits) nécessaires, pour ce faire, tout d’abord cet
utilisateur doit être capable de se connecter à la base, cela est possible en lui attribuant la
permission «connect» si vous voulez que cet utilisateur puisse créer des tables dans cette
base de données il faudra lui attribuer le droit : « resource »

L’exemple suivant montre comment on peut attribuer les droits : connect et resource à
l’utilisateur kamel ;

GRANT connect, resource TO kamel ;

6
Voyons maintenant si kamel arrive à se connecter :

C’est bon ça marche !!!!

4. Objets manipulés par SQL


4.1 Identificateurs
SQL utilise des identificateurs pour désigner les objets qu'il manipule :
utilisateurs, tables, colonnes, index, fonctions, etc.
Un identificateur est un mot formé d'au plus 30 caractères, commençant obligatoirement par
une lettre de l'alphabet. Les caractères suivants peuvent être une lettre, un chiffre, ou l'un des
symboles # $ et _. SQL ne fait pas la différence entre les lettres minuscules et majuscules. Les
voyelles accentuées ne sont pas acceptées.
Un identificateur ne doit pas figurer dans la liste des mots clés réservés (voir manuel de
référence Oracle). Voici quelques mots clés que l'on risque d'utiliser comme identificateurs :
ASSERT, ASSIGN, AUDIT, COMMENT, DATE, DECIMAL, DEFINITION, FILE,
FORMAT, INDEX, LIST, MODE, OPTION, PARTITION, PRIVILEGES, PUBLIC, REF,
REFERENCES, SELECT, SEQUENCE, SESSION, SET, TABLE, TYPE.

4.2 Tables
Les relations (d'un schéma relationnel) sont stockées sous forme de tables composées de lignes
et de colonnes.

7
Si on veut utiliser la table créée par un autre utilisateur, il faut spécifier le nom de cet utilisateur
devant le nom de la table : ismail.DEPT
Remarques :
1. Selon la norme SQL-2, le nom d'une table devrait être précédé d'un nom de schéma.
2. Il est d'usage (mais non obligatoire évidemment) de mettre les noms de tables au
singulier : plutôt ETUDIANT que ETUDIANTS pour une table d’étudiants.

Exemple : Table DEPARTEMENT des départements :

CODEDEPT NOMD LIEU


10 INFORMATIQUE TLEMCEN
A INFORMATIQUE SIDI BELABES
30 INFORMATIQUE NAAMA
40 MATH TLEMCEN

4.3 Colonnes
Les données contenues dans une colonne doivent être toutes d'un même type de données. Ce
type est indiqué au moment de la création de la table qui contient la colonne (voir 2.1).
Chaque colonne est repérée par un identificateur unique à l'intérieur de chaque table.
Deux colonnes de deux tables différentes peuvent porter le même nom. Il est ainsi fréquent de
donner le même nom à deux colonnes de deux tables différentes lorsqu'elles correspondent à
une clé étrangère à la clé primaire référencée. Par exemple, la colonne « CODEDEPT » des
tables DEPARTEMENT et ETUDIANT.
Une colonne peut porter le même nom que sa table. Le nom complet d'une colonne est en fait
celui de sa table, suivi d'un point et du nom de la colonne. Par exemple, la colonne
DEPARTEMENT.LIEU
Le nom de la table peut être omis quand il n'y a pas d'ambiguïté sur la table à laquelle elle (la
colonne) appartient, ce qui est généralement le cas.
5. Création d'une table et contraintes d'intégrité
5.1 Création d'une table
Une table est créée en SQL par l’instruction CREATE TABLE, modifiée au niveau de sa structure
par l’instruction ALTER TABLE et supprimée par la commande DROP TABLE.
L'ordre CREATE TABLE permet de créer une table en définissant le nom et le type, de
chacune des colonnes de la table. Nous ne verrons ici que trois des types de données utilisés
dans SQL : numérique, chaîne de caractères et date. Nous nous limiterons dans cette section à
une syntaxe simplifiée de cet ordre.
Syntaxe :

On peut ajouter après la description d'une colonne l'option NOT NULL qui interdira que cette
colonne contienne la valeur NULL. On peut aussi ajouter des contraintes d'intégrité portant sur
une ou plusieurs colonnes de la table

Exemple :

8
CREATE TABLE ETUDIANT (
codeEtudiant VARCHAR (10) PRIMERY KEY,
nom VARCHAR (30) NOT NULL,
prenom VARCHAR (30) NOT NULL,
age INTEGER,
dateNaiss DATE ,
ville VARCHAR (20)
) ;

Ou bien
CREATE TABLE ETUDIANT (
codeEtudiant VARCHAR(10)CONSTRAINT pk_article
PRIMERY KEY,
nom VARCHAR (30) NOT NULL,
prenom VARCHAR (30) NOT NULL,
age INTEGER,
dateNaiss DATE ,
ville VARCHAR (20)
) ;
Ou encore :

9
CREATE TABLE ETUDIANT (
codeEtudiant VARCHAR (10),
nom VARCHAR (30) NOT NULL,
prenom VARCHAR (30) NOT NULL,
age INTEGER,
dateNaiss DATE ,
ville VARCHAR (20),
CONSTRAINT pk_article PRIMERY KEY
) ;
NB : pk_article : nom de la contrainte de clé primaire.

Dans le premier cas nous n’avons pas donné de nom à


la contrainte.

Voici ce que ça donne :

Vous venez de créer une table avec une contrainte de clé primaire ! Regarder la suite pour mieux
comprendre.

5.2 Contraintes d'intégrité


Dans la définition d'une table, on peut indiquer des contraintes d'intégrité portant sur une
ou plusieurs colonnes. Les contraintes possibles sont :
PRIMARY KEY, UNIQUE, FOREIGN KEY...REFERENCES, CHECK
Toute définition de table doit comporter au moins une contrainte de type PRIMARY
KEY.
Chaque contrainte doit être nommée (ce qui permettra de la désigner par un ordre ALTER
TABLE, et ce qui est requis par les nouvelles normes SQL) :

CONSTRAINT nom-contrainte définition-contrainte

10
Le nom d'une contrainte doit être unique parmi toutes les contraintes de toutes les tables de
la base de données.
Il existe des contraintes :
sur une colonne : la contrainte porte sur une seule colonne. Elle suit la définition de la colonne
dans un ordre CREATE TABLE (pas possible dans un ordre ALTER TABLE).
sur une table : la contrainte porte sur une ou plusieurs colonnes. Elle se place au même niveau
que les définitions des colonnes dans un ordre CREATE TABLE ou ALTER TABLE.

5.3 Types de contraintes


a. Contrainte de clé primaire : définit la clé primaire de la table. Aucune des colonnes
qui forment cette clé ne doit avoir une valeur NULL.

Pour une contrainte sur une table :


PRIMARY KEY (colonne1, colonne2,...)
Pour une contrainte sur une colonne :
PRIMARY KEY
b. Contrainte d'unicité :
Pour une contrainte sur une table :
UNIQUE (colonne1, colonne2,...)
Pour une contrainte sur une colonne :
UNIQUE
Interdit qu'une colonne (ou la concaténation de plusieurs colonnes) contienne deux valeurs
identiques.
Remarque :
Cette contrainte UNIQUE convient à des clés candidates. Cependant une colonne UNIQUE
peut avoir des valeurs NULL et une contrainte UNIQUE ne correspond donc pas toujours à un
identificateur.
c. Contrainte de clé étrangère
Pour une contrainte sur une table :
FOREIGN KEY (colonne1, colonne2,...)

REFERENCES tableref [(col1, col2,...)]

[ON DELETE CASCADE]


Pour une contrainte sur une colonne :
REFERENCES tableref [(col1 )]

[ON DELETE CASCADE]

11
Indique que la concaténation de colonne1, colonne2,... (ou la colonne que l'on définit pour une
contrainte sur une colonne) est une clé étrangère qui fait référence à la concaténation des
colonnes col1, col2,... de la table tableref (contrainte d'intégrité référentielle). Si aucune colonne
de tableref n'est indiquée, c'est la clé primaire de tableref qui est prise par défaut.
Cette contrainte ne permettra pas d'insérer une ligne de la table si la table tableref ne contient
aucune ligne dont la concaténation des valeurs de col1, col2,... est égale à la concaténation des
valeurs de colonne1, colonne2,...
col1, col2,... doivent avoir la contrainte PRIMARY KEY ou UNIQUE.
Ceci implique qu'une valeur de colonne1, colonne2,... va référencer une et une seule ligne de
tableref.

L'option _ON DELETE CASCADE_ indique que la suppression d'une ligne de tableref va
entraîner automatiquement la suppression des lignes qui la référencent dans la table. Si cette
option n'est pas indiquée, il est impossible de supprimer des lignes de tableref qui sont
référencées par des lignes de la table.

A la place de _ON DELETE CASCADE_ on peut donner l'option _ON DELETE SET NULL_.
Dans ce cas, la clé étrangère sera mise à NULL si la ligne qu'elle référence dans tableref est
supprimée.
d. Contrainte « CHECK »
CHECK (condition)
Donne une condition que les colonnes de chaque ligne devront vérifier (exemples dans la
section suivante). On peut ainsi indiquer des contraintes d'intégrité de domaines. Cette
contrainte peut être une contrainte de colonne ou de table. Si c'est une contrainte de colonne,
elle ne doit porter que sur la colonne en question.

Exemples de contraintes
Créons ensemble les tables suivantes :
Table FILIERE
FILIERE (CODE_FILIERE, DESIGNATION, DESCRIPTION)

CODE_FILIERE DESINATION DESCPRIPTION


INFRSD Réseaux et systèmes distribués Réseaux
INFMID Modèles intelligents de décision Intelligence artificielle
INFSIC Systèmes d’information et de
connaissances
INFGL Génie logiciel

Table ETUDIANT
ETUDIANT (CODE_ETUDIANT, NOM, PRENOM, AGE, DATE_NAISSANCE, VILLE,
#REF_FILIERE)

CODE_ETUDIANT NOM PRENOM AGE DATE_NAISSANCE VILLE REF_FILIERE

E0001INF Moulay Ahmed 23 21/01/1994 Tlemcen INFRSD


E0002INF Bentoumi Reda 22 02/08/1995 Remchi INFMID
E0003INF Zitouni Leila 22 20/09/1995 Henaya INFSIC
E0004INF Bouzid Nourhane 24 14/14/1993 Tlemcen INFGL

12
Table DEPARTEMET :
DEPARTEMENT (CODEDEPT, NOMD, NUMETAGE)

CODEDEPT NOMD NUMETAGE


10 INFORMATIQUE 2
20 MATH 1
30 CHIMIE 3
40 PHYSIQUE 4
Table DEPT_FILIERE
DEPT_FILIERE (REF_DEPT, REF_FILIERE, NBRE_PLACES, DESCRIPTION)
REF_DEPT REF_FILIERE NBRE_PLACES DESCRIPTION
10 INFRSD 32
10 INFMID 40
10 INFSIC 30
10 INFGL 25

1. Requêtes SQL de la création de chaque table :


FILIERE (CODE_FILIERE, DESIGNATION, DESCRIPTION)

CREATE TABLE FILIERE(


CODE_FILIERE VARCHAR(20)CONSTRAINT PK_FILIERE PRIMARY KEY,
DESIGNATION VARCHAR(20) NOT NULL,
DESCRIPTION VARCHAR(45)
);

ETUDIANT (CODE_ETUDIANT, NOM, RENOM, AGE, DATE_NAISS, VILLE,


REF_FILIERE)

CREATE TABLE ETUDIANT (


CODE_ETUDIANT VARCHAR2(20) CONSTRAINT ETUDIANT_PK PRIMARY kEY,
NOM VARCHAR(20) NOT NULL,
PRENOM VARCHAR(20),
AGE INTEGER,
DATE_NAISS DATE,
VILLE VARCHAR(20),
REF_FILIERE VARCHAR(20),
CONSTRAINT FK_FILIERE REFERENCES FILIERE(CODE_FILIERE)
);

o CODE_ETUDIANT identifie chaque ligne dans la table. C’est la clé primaire de la


table.
o REF_FILIERE associe chaque étudiant à une filière, cette colonne est une référence à
la colonne CODE_FILIERE de la table FILIERE. REF_FILIERE est bien une clé
étrangère (foreign key) car elle fait référence à une colonne dans une autre table. La

13
table qui contient la clé étrangère est une table fils, et la table qui est référencée est la
table ‘père’ (rappelez-vous que la clé du père migre dans le fils).

DEPARTEMENT (CODEDEPT, NOMDEPT, NUMETAGE)


CREATE TABLE DEPARTEMENT (
CODEDEPT VARCHAR (20) CONSTRAINT DEPARTEMENT_PK PRIMARY KEY,
NOMDEPT VARCHAR (20),
NUMETAGE INTEGER
);

DEPT_FILIERE (REFDEPT, REFFILIERE, NBRE_PLACES, DESCRIPTION)


CREATE TABLE DEPT_FILIERE (
REFDEPT VARCHAR (20) CONSTRAINT DEPTFILIERE_FK REFERENCES
DEPARTEMENT(CODEDEPT),
REFFILIERE VARCHAR (20) CONSTRAINT DEPTFILIERE_FK REFERENCES
FILIERE(CODE_FILIERE),
DESCRIPTION VARCHAR (45),
CONSTRAINT DEPTFILIERE_PK PRIMARY KEY (REFDEPT, REFFILIERE)
);

o ‘refdept’ contient le code du département, c’est une clé étrangère


qui fait référence au ‘codedept’ de la table departement.
o Reffiliere est une clé étrangère qui fait référence au champ
codefiliere de la table filiere.
o La dernière ligne permet de définir la clé primaire de cette table
qui est la concaténation de ces deux clés étrangères.

6. Ajouter, supprimer ou renommer une contrainte


Des contraintes d'intégrité peuvent être ajoutées ou supprimées par la commande ALTER
TABLE. On peut aussi modifier l'état de contraintes (voir la section suivante) par MODIFY
CONSTRAINT. On ne peut ajouter que des contraintes de table. Si on veut ajouter (ou
modifier) une contrainte de colonne, il faut modifier la colonne

ALTER TABLE DEPARTEMENT


ADD CONSTRAINT NUMAGEDEPT CHECK (NUMETAGE IN (1, 2, 3, 4))
;
Nous allons nous contenter de tester cette requête car nous reverrons cette partie dans un
autre tutoriel.

ALTER TABLE DEPARTEMENT


Drop CONSTRAINT NUMAGEDEPT ;

14
7. Langage de manipulation des données LMD
Le langage de manipulation de données (LMD) est le langage permettant de modifier les
informations contenues dans la base.
Il existe trois commandes SQL permettant d'effectuer les trois types de modification des
données :

INSERT ajout de lignes


UPDATE mise à jour de lignes
DELETE suppression de lignes

7.1 Insertion
INSERT INTO table (col1,..., coln )
VALUES (val1,...,valn )
ou
INSERT INTO table (col1,..., coln )
SELECT ...
table est le nom de la table sur laquelle porte l'insertion. col1,..., coln est la liste des noms des
colonnes pour lesquelles on donne une valeur. Cette liste est optionnelle. Si elle est omise,
ORACLE prendra par défaut l'ensemble des colonnes de la table dans l'ordre où elles ont été
données lors de la création de la table. Si une liste de colonnes est spécifiée, les colonnes ne
figurant pas dans la liste auront la valeur NULL.

Exemples
Ajouter la ligne (‘20’,'MATH',1) à la table departement.
INSERT INTO department (codedept,nomd,numetage)
VALUES (‘20’,'MATH',1);

7.2 Modification
La commande UPDATE permet de modifier les valeurs d'un ou plusieurs champs, dans une ou
plusieurs lignes existantes d'une table.
UPDATE table
SET col1 = exp1, col2 = exp2, ...
WHERE prédicat

table est le nom de la table mise à jour ; col1, col2, ... sont les noms des colonnes qui seront
modi_ées ; exp1, exp2,... sont des expressions.

15
Les valeurs de col1, col2... sont mises à jour dans toutes les lignes satisfaisant le prédicat. La
clause WHERE est facultative. Si elle est absente, toutes les lignes sont mises à jour.

Exemple : changer le code du département des MATH à la valeur 40.

UPDATE departement
Set codedept=’40’
Where nomd=’MATH’

Pour vérifier vous pouvez taper la requête SELECT suivante :

7.3 Suppression
L'ordre DELETE permet de supprimer des lignes d'une table.

DELETE FROM table


WHERE prédicat

La clause WHERE indique quelles lignes doivent être supprimées.


ATTENTION: cette clause est facultative ; si elle n'est pas précisée, TOUTES LES LIGNES
DE LA TABLE SONT SUPPRIMEES (heureusement qu'il existe ROLLBACK!).

Le prédicat peut contenir des sous-interrogations


Exemple
DELETE FROM deptartement
WHERE nomd = ‘MATH’

16
Vérifions ensemble :

8. Ajout d'une colonne - ADD


ALTER TABLE table
ADD (col1 type1, col2 type2, ...)

permet d'ajouter une ou plusieurs colonnes à une table existante. Les types possibles sont les
mêmes que ceux décrits avec la commande CREATE TABLE.
Les parenthèses ne sont pas nécessaires si on n'ajoute qu'une seule colonne.
L'attribut 'NOT NULL' peut être spécifié seulement si la table est vide (si la table contient déjà
des lignes, la nouvelle colonne sera nulle dans ces lignes existantes et donc la condition 'NOT
NULL' ne pourra être satisfaite).
Il est possible de définir des contraintes de colonne.

Donner la valeur faculte= « sciences» au champ que vous venez d’ajouter pour le département dont le
code est égale = 10 ;

17
9. Modification du type d'une colonne – MODIFY

ALTER TABLE table


MODIFY (col1 type1, col2 type2, ...)

col1, col2... sont les noms des colonnes que l'on veut modifier.

10. Renommer une colonne RENAME COLUMN

ALTER TABLE table

RENAME COLUMN ancien_nom TO nouveau_nom

11. Suppression d'une colonne - DROP COLUMN

ALTER TABLE table

18
DROP COLUMN col

12. Renommer une table - RENAME TO

ALTER TABLE ancien_nom


RENAME TO nouveau_nom

permet de renommer une table.

13. Supprimer une table - DROP TABLE

DROP TABLE table

permet de supprimer une table : les lignes de la table et la définition elle-même de la table
sont détruites. L'espace occupé par la table est libéré.
Il est impossible de supprimer une table si la table est référencée par une contrainte
d'intégrité référentielle.

19

Vous aimerez peut-être aussi