Vous êtes sur la page 1sur 15

R.

MGHIRBI

Plan

 1. Introduction ◼ 4.2. Expression des sélections


 2. Définition & Evolution des ◼ 4.3. Expression des jointures
schémas ◼ 4.4. Sous–requêtes
◼ 2.1. Création de tables ◼ 4.5. Requêtes quantifiées
◼ 2.2. Expression des contraintes ◼ 4.6 Requêtes composées
d’intégrité ◼ 4.7. Fonctions de calculs et agrégats
◼ 2.3. Modification des tables
◼ 2.4. Suppression des tables
 3. Les mises à jour
◼ 3.1. Insertion de tuples
◼ 3.2. Modification de tuples
◼ 3.3. Suppression de tuples
 4. La recherche de données
◼ 4.1. Expression des projections

2
1. Introduction

 SQL est devenu le langage standard pour décrire et manipuler les BDR.

1. LDD (DDL : “ Data Definition Language ”) : permet de créer des bases de données,
des tables, des index, des contraintes. Exp : CREATE, ALTER, DROP…
2. LMD (DML : “ Data Manipulation Language ”) permet de manipuler les données.
Exp : INSERT, UPDATE, DELETE…
3. LID (DQL : “ Data Query Language ”) : permet d’extraire et interroger des données.
Exp: SELECT…
4. LCD (DCL : “ Data Control Language ”) : permet de gérer les droits d'accès aux
tables. Exp : GRANT, REVOKE..
5. LCT (TCL : “ Transaction Control Language ”) : permet de contrôler la bonne
exécution des transactions. Exp : COMMIT, ROLLBACK…
6. SQL intégré : “ Embedded SQL ” : éléments procéduraux que l'on a intégré à un
langage hôte. Exp : SET, DECLARE CURSOR, OPEN, FETCH...

2-DÉFINITION DE SCHÉMAS

Création d’un schéma


Syntaxe:
CREATE SCHEMA
AUTHORIZATION<nomschema>

4
2.1 Création de Tables

Syntaxe
CREATE TABLE <nomtable>
(<colonne1> type1 [NOT NULL|NULL],[CONTRAINTE DE COLONNE1],
<colonne2> type2 [NOT NULL|NULL], DEFAULT,
<colonne3> type3 [NOT NULL|NULL],[CONTRAINTE DE COLONNE3] ,
…..

NB: on peut créer une table à partir d’une requête SQL:


CREATE TABLE AS requête-SQL
➔ Effets: Permet de créer et peupler une table à partir d’une requête SQL
➔ Exp: CREATE TABLE vol1 AS Select numPil, NumAv from pilotes, Avion

2.1 Création de Tables

Exemples de Contraintes de colonnes


Syntaxe
CREATE TABLE <nomtable>
(<colonne1> type1 [NOT NULL|NULL],[CONTRAINTE DE COLONNE1],
<colonne2> type2 [NOT NULL|NULL], DEFAULT,
<colonne3> type3 [NOT NULL|NULL],[CONTRAINTE DE COLONNE3] ,
…..

[Contraintes de Relation (table)]


[ PRIMARY KEY (liste de colonnes) ], [ UNIQUE (liste de colonnes) ] ... , ,
[ FOREIGN KEY (liste de colonnes) REFERENCES table [(liste de colonnes)
[ CHECK condition ])];

6
2.1 Création de Tables

Syntaxe

schéma :
• S’il est omis, il sera assimilé au nom de l’utilisateur connecté.
• S’il est précisé, il désigne soit l’utilisateur courant soit un autre utilisateur de
la base
• Dans ce cas, il faut que l’utilisateur courant ait le droit de créer une table dans un
autre schéma.

Une contrainte peut être nommée: Précédée par le mot réservé "CONSTRAINT"
CONSTRAINT PK_table PRIMARY KEY(attribut)
CONSTRAINT CHK_xxx CHECK [attr] [in values]
CONSTRAINT FK_tab1_tab2 FOREIGN KEY…..
7

2.2 Expressions de contraintes d’intégrité


--Contraintes de relations(1/2)--
 Les contraintes de relations peuvent porter sur plusieurs attributs.

➔la condition est une condition pouvant spécifier des plages ou des listes
de valeurs possibles.

(<colonne référençante>+)] <table référencée> [(<colonne référencée>+)] [action]


◼ Action: permet de spécifier une action à exécuter
⚫ Condition:
 ON DELETE : permet de spécifier l'action à réaliser en cas d'effacement
 ON UPDATE : permet de spécifier l'action à réaliser en cas de modification
⚫ Action:
 SET NULL: remplace les valeurs par NULL
 SET DEFAULT: remplace par la valeur par défaut si défini, sinon NULL
 CASCADE : la mise à jour / déstruction est répercutée
 RESTRICT : indique une erreur (ne permet pas l’action) 8
1. Pilote (numpil, nompil, adr, sal)
2. Avion (numav, nomav, cap, loc)
Exemples: 3. Vol (numvol, #numpil, #numav, villedep, date-dep, date-arr,
villearr, hdep, harr)

CREATE TABLE pilote (numpil INT NOT NULL, nompil CHAR(20) NOT NULL, adr
CHAR(50) NOT NULL, sal DEC (8,3) DEFAULT 0,
PRIMARY KEY (numpil));

1. Pilote (numpil, nompil, adr, sal)


2. Avion (numav, nomav, cap, loc)
Exemples: 3. Vol (numvol, #numpil, #numav, villedep, date-dep, date-arr,
villearr, hdep, harr)

CREATE TABLE pilote (numpil INT NOT NULL, nompil CHAR(20) NOT NULL, adr
CHAR(50) NOT NULL, sal DEC (8,3) DEFAULT 0,
PRIMARY KEY (numpil));

CREATE TABLE Avion (numav INT NOT NULL,nomav CHAR(20) NOT NULL, cap INT NOT
NULL, loc CHAR(20),
CONSTRAINT PK_avion PRIMARY KEY (numav));

10
1. Pilote (numpil, nompil, adr, sal)
2. Avion (numav, nomav, cap, loc)
Exemples: 3. Vol (numvol, #numpil, #numav, villedep, date-dep, date-arr,
villearr, hdep, harr)

CREATE TABLE pilote (numpil INT NOT NULL, nompil CHAR(20) NOT NULL, adr
CHAR(50) NOT NULL, sal DEC (8,3) DEFAULT 0,
PRIMARY KEY (numpil));

CREATE TABLE Avion (numav INT NOT NULL,nomav CHAR(20) NOT NULL, cap INT NOT
NULL, loc CHAR(20),
CONSTRAINT PK_avion PRIMARY KEY (numav));

CREATE TABLE Vol (numvol INT NOT NULL, Numpil INT NOT NULL, numav INT NOT
NULL, villedep CHAR(30) NOT NULL, villearr CHAR(20) NOT NULL, hdep DEC(2,2), harr
DEC (2,2),
CONSTRAINT PK_vol PRIMARY KEY (numvol),
CONSTRAINT FK_vol_Pilote FOREIGN KEY numpil REFERENCES Pilote,
CONSTRAINT FK_vol_Avion FOREIGN KEY numav REFERENCES Avion,
CONSTRAINT chK_hd CHECK (hdep BETWEEN 1 AND 24),
CONSTRAINT chK_ha CHECK (harr BETWEEN 1 AND 24));
11

--TYPES DE DONNÉES SQL--

 Les données de type texte


Nom Description
Peut contenir une chaine de caractère qui possède une taille fixe. Elle peut contenir jusqu'à 255 caractères (lettres,
CHAR(size)
nombres ou caractères spéciaux). L'utilisateur peut aussi définir une taille entre parenthèses.
Peut contenir une chaine de caractère qui possède une taille variable. Elle peut contenir jusqu'à 255 caractères
VARCHAR(size)
(lettres, nombres ou caractères spéciaux). L'utilisateur peut aussi définir une taille entre parenthèses.
TEXT Peut contenir une chaine de caractère de moins de 65 535 caractères (lettres, nombres ou caractères spéciaux)
TINYTEXT Peut contenir une chaine de caractère de moins de 255 caractères (lettres, nombres ou caractères spéciaux)
MEDIUMTEXT Peut contenir une chaine de caractère de moins de 16 777 215 caractères (lettres, nombres ou caractères spéciaux)
Peut contenir une chaine de caractère de moins de 4 294 967 295 caractères (lettres, nombres ou caractères
LONGTEXT
spéciaux)
BLOB Peut contenir un Binary Large OBjects (image, son ou vidéo). Peut contenir jusqu'à 65 535 bytes de données
MEDIUMBLOB Peut contenir un Binary Large OBjects (image, son ou vidéo). Peut contenir jusqu'à 16 777 215 bytes de données
Peut contenir un Binary Large OBjects (image, son ou vidéo). Peut contenir jusqu'à 4 294 967 295 bytes de
LONGBLOB
données

ENUM Peut contenir une liste de données possible. La liste peut contenir jusqu'à 65 535 données.

VARCHAR2 (taille) Chaîne de caractères de longueur variable 1 car. 2000 car. 'A'
NVARCHAR2 Chaîne de caractères de longueur variable utilisant le jeu de 'Bonjour DD'
(taille) car. national 13
--TYPES DE DONNÉES SQL--

 Les types de données numériques


Nom Description
Peut contenir un nombre entre -2 147 483 648 et 2 147 483 647. L'utilisateur peut aussi définir une
INT(size)
taille entre parenthèses.
TINYINT(size) Peut contenir un nombre entre -128 et 127. L'utilisateur peut aussi définir une taille entre parenthèses.
Peut contenir un nombre entre -32 768 et 32 767. L'utilisateur peut aussi définir une taille entre
SMALLINT(size)
parenthèses.
Peut contenir un nombre entre -8 388 608 et 8 388 607. L'utilisateur peut aussi définir une taille entre
MEDIUMINT(size)
parenthèses.
Peut contenir un nombre entre -9 223 372 036 854 775 808 et 9 223 372 036 854 775 807. L'utilisateur
BIGINT(size)
peut aussi définir une taille entre parenthèses.
Peut contenir un petit nombre à virgule flotante. L'utilisateur doit définir le nombre maximal que la
FLOAT(size,d)
donnée peut avoir avec le paramètre size et le nombre de chiffre arpès la virgule avec le paramètre d.

Peut contenir un grand nombre à virgule flotante. L'utilisateur doit définir le nombre maximal que la
DOUBLE(size,d)
donnée peut avoir avec le paramètre size et le nombre de chiffre arpès la virgule avec le paramètre d.
Rq: NUMERIC (ou DECIMAL ou DEC) : nombre décimal à représentation exacte à échelle et
DECIMAL(size,d) précision facultatives
BIT : chaîne de bit de longueur fixe
BIT VARYING : chaîne de bit de longueur maximale 14

--TYPES DE DONNÉES SQL--

 Les types de données date


Nom Description
Peut contenir une date au format AAAA-MM-JJ (Exemple 2017-10-25). Les
DATE
dates peuvent aller de 1000-01-01 au 9999-12-31.
Peut contenir une date et une heure au format AAA-MM-JJ HH:MI:SS
DATETIME (Exemple 2017-10-25 14:52:31). Les dates peuvent aller de 1000-01-01
00:00:00 au 9999-12-31 23:59:59.
Le TIMESTAMP est un compteur numérique qui représente le temps écoulé depuis un
instant de référence, ici l'Heure Unix qui a commencé le 1er janvier 1970 à minuit. Pourtant,
pour stocker cette date dans un TIMESTAMP SQL, ce n'est pas un nombre de seconde ou
TIMESTAMP sa fraction que l'on utilisera, mais undate time sous forme numerique exp 20191119090551.
C'est-à-dire l'équivalent, au format numérique, du DATETIME ‘2019-11-19 09:05:51'.
Le TIMESTAMP SQL n'a donc de timestamp que le nom. Il ne sert pas à stocker un nombre
de secondes, mais bien une date sous format numérique AAAAMMJJHHMMSS
TIME Peut contenir une heure au format HH:MI:SS.
YEAR Peut contenir une année allant de l'an 1901 à l'an 2155.

https://www.w3schools.com/sql/sql_datatypes.asp 15
3. EVOLUTION D’UN SCHÉMA

16

3.1. Renommage de tables

Ordre Remane:

 Exemple 1:

Ou

ALTER: ALTER TABLE ancienNom RENAME TO nouveauNom;

 Exemple 2:

17
3.2. Modification structurelle

Syntaxe ALTER TABLE Nom de Table <Altération>

Différents types d’altérations sont possibles :


◼ Ajout d’une colonne
ADD nomCOLUMN (définition_col)
◼ Modification du nom /définition d’une colonne
RENAME COLUMN ….. TO (NOM)
MODIFY (Définition)
◼ Suppression d’une colonne
DROP COLUMN
◼ Suppression de plusieurs colonnes DROP
18

Exemples

 Soit la table pilote (brevet, nom)

 Exemple 3: ajout de colonnes:

 Exemple 4: renommer une colonne

19
Exemples
 Modifier la définition d’une colonne
◼ Type, taille ou contraintes

 Supprimer des colonnes:


20

3.2. Modification structurelle

 RQ: Il n’est pas possible de supprimer avec DROP


COLUMN:
◼ Des clés primaires (ou candidates par UNIQUE)
référencées par des clés étrangères ;
◼ Des colonnes à partir desquelles un index a été construit ;
◼ Des pseudo-colonnes (ROWID et LEVEL) ou des
colonnes de tables objets ;
◼ Toutes les colonnes d’une table.

21
3.3. Modification comportementale

ALTER TABLE Nom_de_Table <Altération>


◼ Ajout d’une contrainte (ADD CONSTRAINT)

◼ Suppression d’une contrainte (DROP CONSTRAINT).

◼ Désactiver/réactiver une contrainte:

23

3.3. Modification comportementale

Ajout d’une contrainte:

 Les types de contraintes étant comme pour la création

 Exemple 3 : 24
3.3. Modification comportementale

Suppression de contraintes

Exemple 5:

 Cette commande supprime à la fois la clé primaire de la table Avion


mais aussi les contraintes clés étrangères des tables dépendantes
(pas les attributs).

 Si l’option CASCADE n’avait pas été spécifiée, Oracle aurait renvoyé une
erreur: cette clé unique/primaire est référencée par des clés étrangères ».

25

3.3. Modification comportementale

Désactivation de contraintes

 CASCADE répercute la désactivation des clés étrangères des tables « fils » dépendantes.
message d’Oracle renvoyé est : « ORA-02297: impossible désactiSi vous voulez désactiver
une clé primaire référencée par une clé étrangère sans cette option, le ver contrainte… -
les dépendences existent ».
 Les options KEEP INDEX et DROP INDEX permettent de préserver ou de détruire l’index
dans le cas de la désactivation d’une clé primaire.
 Exemple 6:

 La désactivation de cette contrainte par CASCADE désactive aussi une des clés
étrangères de la table référençant la première. 26
3.3. Modification comportementale

Réactivation de contraintes

 VALIDATE vérifie que les données courantes de la table respectent la


contrainte ;
 La clause d’index permet, dans le cas des clés primaires ou candidates
(UNIQUE), de pouvoir recréer l’index associé.
 La clause d’exceptions permet de retrouver les enregistrements ne
vérifiant pas la nouvelle contrainte.
 RQ: Il n’est pas possible de réactiver une clé étrangère tant que la
contrainte de clé primaire référencée n’est pas active.

Exemple 7 27

4. Destruction d’un schéma:

 Application sur les tables:

 CASCADE CONSTRAINTS permet de s’affranchir des clés étrangères


actives contenues dans d’autres tables et qui référencent la table à
supprimer.
◼ Cette option détruit les contraintes des tables « fils » associées sans rien modifier
aux données qui y sont stockées.
 RQ: Les éléments qui utilisaient la table (vues, synonymes, fonctions ou
procédures) ne sont pas supprimés mais sont temporairement inopérants.
 Attention, une suppression ne peut pas être par la suite annulée.

28
[3.4 Exploration des contraintes
dans le DD oracle]
OWNER Proporiétaire de la contrainte
CONSTRAINT_NAME Nom de la contrainte
CONSTRAINT_TYPE Type de la contrainte
• C (check constraint on a table)
• P (primary key)
• U (unique key)
• R (referential integrity)
• V (with check option, on a view)
• O (with read only, on a view)

TABLE_NAME Nom de la table ou la contrainte a été définie


SEARCH_CONDITION Texte de la condition de recherche pour une contrainte check
R_OWNER Propriétaire de la table référencée par la contrainte
R_CONSTRAINT_NAME Nom de la contrainte unique ou primaire référencée par la contrainte (s’il s’agit d’une clé
étrangère
STATUS Statut d’une contraint (ENABLED or DISABLED)
LAST_CHANGE La dernière fois quand la contrainte a été désactivée ou réactivée
INDEX_OWNER Nom de l’utilisateur propriétaire de l’index
INDEX_NAME Nom de l’index (seulement pour les contraintes unique et primary-key) 29

[3.4 Exploration des contraintes


dans le DD oracle]
 On peut visionner les contraintes grâce aux tables du dictionnaire de
données.
 Ces tables sont:
◼ [DBA/USER/ALL]_CONSTRAINTS et
◼ [DBA/USER/ALL] _CONS_COLUMNS.
 Exemple 8 :
◼ Afficher les noms des contraintes (seulement 10 caractères), leurs types, et leurs
contenus pour l’utilisateur courant relativement à la table EMP
◼ Select substr(constraint_name, 1, 10), constraint_type, search_condition From
USER_CONSTRAINTS
Where upper(table_name) = ‘EMP’;
 Exemple 9 :
◼ Afficher les contraintes (leurs noms et colonnes concernées) de l’utilisateur connecté
pour la table DEPT
◼ Select constraint_name, column_name From USER_CONS_COLUMNS Where
upper(table_name) =’DEPT’; 30
[Exemple]

SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE,


SEARCH_CONDITION, INDEX_NAME
FROM DBA_CONSTRAINTS
WHERE upper(TABLE_NAME) = UPPER('Nom_TABLE') ;

31

Bibliographie

 Livres:
◼ C.Soutou, SQL pour Oracle, editions 3 et 7
 Supports de cours
◼ J.Y. Antoine, Administration des bases de données

32