Académique Documents
Professionnel Documents
Culture Documents
Spécialité : ///////////
ii
Liste des tableaux
Tableau III. 1. Valeur Old et New dans les différents événements ....................................... 47
iii
Liste des figures
iv
Chapitre I :
1. Introduction
Le système d’information est conçu autour d’une masse très importante de données.
Cette masse de données fournis un ensemble d’informations décrivant les objets du monde
réel. Les données doivent être bien structurées et stockées sur un support physique pour servir
de support à une application informatique. On parle, ici, des Bases de Données(BD).Les BD
se caractérisent par le faite qu’elles contiennent des données bien structurées destinées à un
stockage permanant. Ainsi, un utilisateur doit pouvoir accéder, manipuler et interroger une
BD. Cependant, la gestion d’une masse très importante de diverses données n’est pas une
tache ci-simple. D’où le recours à un système capable de prendre en charge les fonctionnalités
d’accès, de modification et de protection des données. Ces systèmes, appelés Systèmes de
Gestion de Bases de Données (SGBD) permettent de fournir les différents types d’interface
nécessaires à l’accès aux données tout en masquant à l’utilisateur les détails complexes liés à
cette gestion. Au cours des quarante dernières années, des concepts, méthodes et algorithmes
ont été développés pour gérer les BD, d'où proviens leur importance pour la gestion des
entreprises.
Après avoir bien étudier les deux premières étapes 1, à savoir : spécification des
besoins et conceptualisation des données, l'objectif de ce cours sera de bien détailler les deux
dernières étapes, à savoir: le modèle relationnel et le codage des données avec le langage SQL
sous le SGBD Oracle
1
En 2eme année préparatoire
Dr. A Djellal 6
Chapitre I : Système de Gestion de Bases de Données
1. Relation : C’est une table à deux dimensions qui modélise une entité du modèle
conceptuel. Chaque colonne de la table correspond à un attribut de l’entité. Chaque ligne
représente une occurrence, appelée aussi : un enregistrement ou encore un tuple.
Exemple. CLIENT, ENSEIGNANT-CHERCHEUR, ETUDIANT, COURS…
2. Attribut : Un attribut est caractérisé par un nom, souvent porteur de sens, et représente une
caractéristique ou une propriété de la relation. Il prend ses valeurs dans un domaine de
données.
Exemple. nom et âge représentent deux attributs de la relation ETUDIANT.
Définition 1. Le schéma (Cf. Figure I.1) d’une relation (une table) se compose du nom de la
relation suivi de la liste de ses attributs avec leurs domaines. Le nombre d’attributs dans un
schéma représente le degré de la relation.
2
E.F. CODD, A Relational Model QfDaia for Large Shared Data Banks, Communications of the ACM, Volume 13, Number
6, June 1970, pp. 317-387.
Dr. A Djellal 7
Chapitre I : Système de Gestion de Bases de Données
CLIENT
CodCli Nom Prénom Ville Email
100 Ben said Ahmed Constantine BenSaidAhmed@gmail.com
101 Hammad Imene Alger HammadImene@ gmail.com Tuples de la relation
102 Salhi Ali Constantine salhiAli@hotmail.com
... …. .. ……
Dans la suite de ces notes de cours, nous allons utiliser la BD relationnelle Cours pour les
illustrations des différents chapitres. Le schéma relationnel de cette base est le suivant :
CLIENT (CodCli, Nom, Prénom, Ville Email)
PRODUIT (CodPrd, Désignation, Prix)
COMMANDE (Num, CodCli, CodPrd, Qte)
C’est une combinaison d’attributs dont la valeur peut identifier, de manière unique, un
enregistrement dans une relation. Dans une relation donnée, il n’existe pas deux
enregistrements ayant la même clé primaire. Ainsi, la clé primaire préserve l’unicité des
enregistrements dans une table
Les clés primaires permettent l'unicité des enregistrements. De plus, ils servent à
établir des relations entre les tables garantissant, ainsi, la cohérence de la base. Il s'agit de la
clé étrangère : c’est une combinaison d’attributs qui représentent la clé primaire dans une
autre table.
Dr. A Djellal 8
Chapitre I : Système de Gestion de Bases de Données
Les premiers SGBD sont apparus dans les années 60. Les systèmes IDS.I et IMS.I ont
été développés respectivement à Honeywell et à IBM pour le programme APOLLO, qui a
permis d’envoyer l'homme sur la lune. Ce sont les précurseurs des SGBD modernes. Depuis,
l’évolution des SGBD à passé par quatre générations :
3. La première génération, marquée par la séparation de la description des données et de leur
manipulation par les programmes. Elle a été dominée par les SGBD TOTAL, IDMS, IDS 2
et IMS 2.
4. La deuxième génération, marquée par le nouveau Modèle Logique de Données proposé
dans les années 70, à savoir, le modèle relationnel. L’objectif de cette génération été
d’enrichir mais surtout de simplifier le SGBD externe afin de faciliter l’accès aux données.
Ceci est fait par la représentation des données sous forme de relations (table) entre
domaines de valeurs.
La manipulation des tables est effectuées à l’aide d’un langage non procédural standardisé
appelé SQL (Structured Query Language). Celui-ci permet d’exprimer des requêtes
traduisant directement des phrases simples du langage naturel et de spécifier les données
que l’on souhaite obtenir sans dire comment les accéder. Les principaux systèmes de cette
génération sont Oracle, Ingres, Sybase, Informix, DB2 et SQL Server. Ils ont été
commercialisés depuis 1980 et représentent aujourd’hui l’essentiel du marché des SGBD.
Ils supportent en général une architecture Client / Serveur.
5. La troisième génération, née depuis le début des années 80 influencée par l’apparition du
nouvel aspect de programmation, à savoir, la programmation orienté objet. Les systèmes
de cette génération supportent des modèles de données extensibles intégrant le relationnel
3
En anglais : Data Base Management System (DBMS)
4
Pouvant atteindre quelques milliards d’octets
Dr. A Djellal 9
Chapitre I : Système de Gestion de Bases de Données
et l’objet, ainsi que des architectures réparties (distribuées), permettant une meilleure
collaboration entre des utilisateurs concurrents.
Les systèmes objet relationnels tels Oracle 8, DB2 Universal Database ou Informix sont les
premiers représentants de la troisième génération. Tous ces systèmes tentent de répondre
aux besoins des nouvelles applications multimédia, Web, télécommunications, etc.
6. La quatrième génération envisage à mieux supporter les applications Web, les
informations mal structurées, les objets multimédias, l’aide à la prise de décisions et
l’extraction de connaissances à partir des données. La révolution conduite par l’objet a, en
quelque sorte, échouée du faite qu’elle n’a pas réussi à renverser le modèle relationnel.
Certes, ce modèle a été bousculé et adapté à l’objet, mais surtout pas remplacé.
C'est le niveau consulté par les utilisateurs. Il serait important que chaque groupe de travail
perçoive sa propre description des données (son schéma externe). Cette description est
effectuée selon la manière dont le groupe voit la BD dans ses programmes d’application.
Donc, ce niveau décrit la partie des données présentant un intérêt pour un groupe
d’utilisateurs sous forme de vue externe. L’utilisation des vues externes permet d’assurer un
certain niveau de sécurité : un groupe de travail ne peut accéder qu’aux données décrites dans
sa vue externe, les autres données sont protégées contre les accès non autorisés.
5
Standard Planning And Requirement Comitte
6
American National Standards Institute
Dr. A Djellal 10
Chapitre I : Système de Gestion de Bases de Données
C’est le niveau central, il correspond à la structure sémantique des données sans souci
d’implémentation. Ce niveau regroupe la vue intégrée de tous les utilisateurs, à savoir, le
dictionnaire de données. Ce dictionnaire comporte la description des données et des
contraintes :
- Les types de données élémentaires pour définir les domaines des attributs,
- Les types de données composés pour décrire les tables : une personne, un malade, une
maladie…
- Les règles (contraintes) à appliquer sur les données au cours de leur vie dans l’entreprise :
l’âge d’un employé est compris entre 0 et 65, son salaire est compris entre 46 000.00 DA
et 180 000.00 DA, le stock des produits doit être positif...
4.2.3. Niveau interne
1. Niveau externe :
Les enregistrements sont décrits en vues :
- Vue # 1 : tous les clients habitant à la ville X.
- Vue # 2 : tous les clients ayant le même nom de famille.
- Vue # 3 : tous les clients majeurs.
2. Niveau conceptuel :
Le concept est décrit avec ses attributs et ses relations avec les autres concepts (Cf. Figure
I.3). Chaque attribut est défini par un domaine avec possibilité d'ajouter des contraintes sur ce
domaine, l'âge > 18 par exemple.
Dr. A Djellal 11
Chapitre I : Système de Gestion de Bases de Données
Client
Nom : chaine de caractères
Prénom : chaine de caractères
Age : entier
Ville : chaine de caractères
Ville : VarChar (20)) ;
3. Niveau interne :
Les enregistrements du concept sont décrits comme une suite d’emplacements mémoires.
Nom Prénom Age Ville Pointeur
BenSaid Ahmed 35 Constantine
Dans la vie d’une entreprise, on a toujours besoin d’un SGBD pour gérer une BD
partagée entre plusieurs utilisateurs. Ceci est le principal objectif qui résume, intuitivement,
plusieurs autres objectifs assurés par les fonctionnalités suivantes:
Dr. A Djellal 12
Chapitre I : Système de Gestion de Bases de Données
conceptuel. Dans le cas contraire, pour permettre de conserver les possibilités d’optimisation
de performances, tout changement informatique apparaîtra directement sur le monde réel et
impliquera une reconstruction des applications.
4.3.3. Indépendance logique des données
En plus des schémas interne et conceptuel des données, le schéma externe de la BD offre une
vue particulière des données pour chaque groupe de travail. Ainsi, il serait préférable de
permettre une indépendance, d’une part entre les différents schémas externes, et d’autre part
entre le schéma conceptuel et les schémas externes. L’indépendance logique des données
assure pour chaque groupe de travail:
- De faire évoluer sa vue externe sans remettre en cause les autres vues.
- De faire évoluer sa vue externe sans remettre en cause (dans une certaine mesure) le
modèle conceptuel.
4.3.4. Manipulation des données
Les SGBD offrent des capacités d’exécution des opérations d’ajout, de suppression et de
modification des données. Ils permettent également la recherche et l’interrogation des
données. Ceci est assuré par le biais d’un Langage de Manipulation des Données (DML). De
plus, l’interrogation et la mise à jour des données est faite sans préciser les algorithmes
d'accès (Dire QUOI sans dire COMMENT). En outre, ce langage permet d’exprimer et de
répondre à des requêtes en langage naturel.
4.3.5. Contrôle des données
Les SGBD doivent assurer le maintien de la cohérence des données par rapport aux schémas
décrits. Ceci est fait en respectant les contraints d’intégrité de la BD. Par exemple, si un client
n’existe pas, on ne peut pas lui associer une commande. Le SGBD vérifie que les mises à jour
effectuées sur les données respectent les contraintes, une fois décrites. Ainsi, il ne crée la
commande que si le client a été créé.
En plus du contrôle d’intégrité, les SGBD assure un contrôle de confidentialité. Ainsi, ils
permettent de définir des utilisateurs avec des droits d’accès précis (Qui peut faire Quoi).
Plusieurs droits peuvent être décrits : droit de lecture, de modification, d’ajout, de suppression
et également droit à la description des données. Il existe toujours un utilisateur particulier qui
possède tous les droits : le Data Base Administrator (DBA), celui-ci possède le droit de
définir et de modifier les droits des autres utilisateurs. Assurer les contrôles d’intégrité et de
confidentialité nécessite l’utilisation d’un Langage de Contrôle des Données (DCL)
4.3.6. Partage des données
Rappelons qu’une BD est toujours partagée aussi bien en interrogation qu’en mise à jour.
Ainsi, une application doit pouvoir mettre à jour les données comme si elle était seule à les
utiliser. Une telle mise à jours correspond, par exemple, à une réservation de place sur un
avion ou à un transfère bancaire à partir d’un compte à un autre. Il est impératif que deux
mises à jour concurrentes ne s’emmêlent pas dans leurs accès (risque de réserver le même
siège pour deux passagers différents). De la sorte, et pour gérer les accès concurrents, les
SGBD utilisent les transactions pour assurer qu’un groupe de mises à jour est totalement
exécuté ou pas du tout. Une transaction est vue comme un bloc d’instructions délimités par
Dr. A Djellal 13
Chapitre I : Système de Gestion de Bases de Données
Plusieurs SGBD ont été développés pour exploiter différents types de BD. Nous
pouvons trouver sur le marché des SGBD relationnel, objet, NoSQL, temporel... Nous
trouvons aussi des SGBD commerciaux et d’autres libres… Parmi les SGBD les plus
populaires, nous pouvons citer :
- Oracle, un SGBD relationnel et relationnel-objet très utilisé pour les applications
professionnelles.
- PostgreSQL, un SGBD relationnel puissant qui offre une alternative libre (licence
BSD) aux solutions commerciales.
- Access, un SGBD relationnel de Microsoft, qui offre une interface graphique permettant
de concevoir rapidement des prototypes.
- MongoDb, un SGBD non-relationnel libre (licence Apache) orienté document.
- MySQL, un SGBD relationnel libre (licence GPL et commerciale), très utilisé pour la
réalisation des sites web dynamiques.
SGBD
Relationnel Propriétaire 4D, DB2, dBase, Informix, InterBase, MaxDB,
Oracle Database, SQL Server, Sybase
Libre Derby, Firebird, HSQLDB, Ingres, MariaDB,
MySQL, PostgreSQL
Objet ZODB, db4o
Embarqué Berkeley DB, SQLite
NoSQL BigTable, Hypertable, CouchDB, Cassandra, HBase, LevelDB, MongoDB,
Redis, RethinkDB, SimpleDB, Riak
Intégré Access, FileMaker, HFSQL, OpenOffice.org Base, Paradox, Neo4j, SAS, 4D
Temporel OpenTSDB, KairosDB
L'étude du marché montre que Oracle, DB2 et SQL Server figurent parmi les tops des
SGBD relationnel depuis longtemps. Le choix d’un SGBDR n’est pas une tache facile. En
effet, plusieurs facteurs entrent en jeu : s’il sera installé sur un mainframe (serveur) d’une
grande entreprise, le choix logique sera DB2. Dans les installations Unix et Linux, les choix
se porteront sur Oracle et DB2. Pour ces deux plateformes, Oracle arrive en tête même si la
présence de DB2 est forte. Cependant, sur dans une installation Windows, Microsoft avec son
SGBD SQL Server, qui possédant son propre système d’exploitation, est le maître
incontestable.
Dr. A Djellal 14
Chapitre I : Système de Gestion de Bases de Données
fonctions, mais ils ont aussi leurs différences. Le tableau suivant représente une comparaison
entre ces trois SGBD7.
7
Les données de la comparaison datent d'Octobre 2022
8
Classement des SGBD selon un score calculé en fonction de leur popularité sur les moteurs de
recherche, mis à jour mensuelle.
9
Mesure de la popularité des SGBD, mis à jour mensuelle.
10
Système d'exploitation
Dr. A Djellal 15
Chapitre II :
Important. Les scripts figurants dans la suite de ces notes de cours ont été codés avec SQL3
(quelques exemples en PL/SQL) sous le SGBD ORACLE dans sa version 12c (valide aussi
pour Oracle 11g) via l'outil SQL developer dans sa version 17.3.1
Chapitre II : Structured Query Language (SQL)
1. Introduction
Une BD est conçu pour servir de support à une application informatique. Ainsi,
l’interrogation de telles sources de données avec un langage de données constitue l’objectif de
sa construction. Un langage de données est un langage informatique permettant de décrire et
de manipuler les schémas et les données d'une base. SQL (Structured Query Language) est le
langage de données le plus utilisé pour l’exploitation des BD, ce langage normalisé (ISO89)11,
(ISO92)12 constitue le standard d’accès aux BD relationnelles. Ainsi, il représente le point
d’entrée obligatoire des SGBD relationnels. Il permet de définir, interroger, manipuler,
contrôler et communiquer avec une BD. Pour cela, il utilise des critères de recherche
(qualifications) construits à partir du langage algébrique.
SQL fournit plusieurs niveaux de normalisation
- SQL1 : représente la norme de base
- SQL2 : extension de SQL1 qui offre :
o Un meilleur support des règles du langage algébrique
o Un ensemble plus variés des types de données
- SQL3 : extension de SQL2 qui offre :
o Une prise en charge du modèle objet,
o Utilisation des trigger pour la gestion des événements,
o Utilisation des rôles pour la gestion de la sécurité
o ...
- PL/SQL : un langage fondé sur l'intégration du paradigmes de programmation
procédurale avec la gestion des données.
2. Oracle
En 1977, Larry Ellison, Bob Miner et Ed Oates fondent la société Software
Development Laboratories (SDL). Les associés de SDL avec le mathématicien Edgar Frank
Codd 13 se lancent dans le développement de leur logiciel Oracle. En 1979, SDL devient
Relational Software Inc. (RSI) qui donnera naissance à la société Oracle Corp. En 1983 la
première version du SGBD s’appelle RSI-1 et utilise SQL comme langage de données. Le
tableau suivant résume la chronologie des différentes versions du SGBD Oracle.
Tableau II. 1. Différentes versions du SGBD Oracle
Année Version Description
1979 Oracle 2 - Première version commerciale
- Ecrite en C/assembleur pour Digital
1983 Oracle 3 - Réécrite en C – verrous.
1984 Oracle 4 - Portage sur IBM/VM, MVS, PC
- Intégration du mode transactionnel.
1985 Oracle 5 - Architecture client-serveur avec SQL*Net
- Portage sur Apple.
11
[ISO89] International Organization for Standardization, « Information Processing Systems – Database
Language SQL with Integrity Enhancement », International Standard ISO/IEC JTC1 9075 : 1989(E), 2e
édition, avril 1989.
12
[ISO92] International Organization for Standardization, « Database Language SQL », International Standard
ISO/IEC JTC1/SC21 Doc. 9075 N5739, 1992.
13
Apres avoir proposé le Modèle Relationnel.
Dr. Djellal. A 17
Chapitre II : Structured Query Language (SQL)
À partir de 2018, la société Oracle a proposé un rythme annuel pour ces nouvelles
versions. Avec ce nouveau rythme, le numéro de version rappellera l'année de son lancement,
comme le montre la figure suivante. Ainsi, en juillet 2018 la version Oracle 18c a vu le jour.
Elle ajoute quelques nouvelles fonctionnalités et améliore d’autres précédemment introduites
dans Oracle 12c. La dernière version consiste en Oracle 21c lancée en 2021.
Dr. Djellal. A 18
Chapitre II : Structured Query Language (SQL)
14
Source : https://www.claremont.co.uk/insights/upgrade-oracle-database-19c
15
www.oracle.com/technetwork/developer-tools/sql-developer
16
Oracle Forms and Reports
Dr. Djellal. A 19
Chapitre II : Structured Query Language (SQL)
iii. Langage de Contrôle des Données (LCD) : les commandes de cette famille contiennent
les primitives de gestion des utilisateurs et des privilèges d'accès aux données.
iv. Langage de Contrôle de Transaction (LCT) : les commandes de cette famille permettent
la gestion des transactions (validation/annulation des m à j des données de la base)
Dans ce qui suit, nous allons présenter en détails les commandes des deux premières familles,
à savoir : LDD et LMD
SQL
LDD LMD LCD LCT
CREATE SELECT GRANT COMMIT
DROP INSERT REVOKE ROLLBACK
ALTER DELETE
RENAME UPDATE
La description des données (Tables ou autres objets SQL) se fait à l'aide des
commandes suivantes : CREATE, ALTER, RENAME et DROP.
A retenir !! Une table est créée en SQL avec la commande CREATE TABLE,
renommée avec RENAME, sa structure est modifiée avec ALTER TABLE et
elle sera supprimée avec DROP TABLE.
Avec la commande Create, on peut créer un objet SQL (BD, table, type, utilisateur…). La
commande CREAETE TABLE permet de créer des relations sous forme de tables. Ceci est
fait en définissant la liste de ses colonnes avec leurs types selon la syntaxe suivante :
Dr. Djellal. A 20
Chapitre II : Structured Query Language (SQL)
La commande RENAME permet de renommer une table déjà crée. Pour cela, il faut respecter
la syntaxe suivante :
RENAME nom_table TO nouv_nom_table;
Pour supprimer un objet SQL, il faut utiliser la commande DROP. Cette commande est à
utiliser avec beaucoup d’attention car l’objet en question sera détruit définitivement
(suppression physique). Pour supprimer une Table avec ses enregistrements, il faut utiliser la
commande DROP TABLE, selon la syntaxe suivante :
DROP TABLE <nom_Table> ;
Dr. Djellal. A 21
Chapitre II : Structured Query Language (SQL)
Exemple 4. On peut ajouter la colonne Email à la table CLIENT, via la requête suivante :
Dr. Djellal. A 22
Chapitre II : Structured Query Language (SQL)
Activité. Utiliser la connexion Cour BDA avec l'utilisateur myUser (crées durant la séance
de TP) et exécuter le script SQL suivant. Examiner le script output pour voir le résultat.
Comme tout langage informatique, le nommage des objets SQL (tables, colonnes...)
est soumis à un certain nombre de règles. Ainsi, le nom d’un objet SQL:
- Se compose des lettres {A…Z, a…z}, des chiffres {0…9} et le symbole {_}.
- Commence obligatoirement par une lettre.
- Sa taille ne dépasse pas 128 caractères.
- Différent des mots réservés de SQL (table, int, date...).
- Insensible à la casse.
- Unique au sein de l’objet qui le contient (exemple : le nom d’une table au sein de la
base ou bien le nom d’une colonne au sein d’une table).
Pour décrire les colonnes d’une table, la norme SQL fournit un ensemble très important de
types de données prédéfinis. Dans ce qui suit, une présentation des types de données les plus
utilisés, à savoir : les types caractères, numériques et temporels.
Les deux principaux types caractères, disponibles dans la plupart des SGBD relationnels, sont
CHAR(M) et VARCHAR(M). Ils permettent de stocker des chaînes de caractères d’une taille
maximale fixée par un paramètre M. VARCHAR2(M) est un type de données utilisé depuis
Oracle 9. Il permet de stocker des chaines de caractères de tailles variables. La différence
essentielle entre celui-ci et les deux premiers types est qu’une valeur CHAR/VARCHAR a
une taille fixée, et se trouve donc complétée avec des blancs (nul) si sa taille est inférieure au
paramètre M. En revanche, une valeur VARCHAR2 a une taille variable et est donc tronquée
après le dernier caractère non blanc.
Ces trois types de données ne sont pas suffisants en cas de stockage des chaînes de caractères
très longues (des livres par exemple). Par conséquent, la norme SQL propose d’autres types
qui correspondent à de très longues chaînes de caractères, par exemple le type CLOB.
Dr. Djellal. A 23
Chapitre II : Structured Query Language (SQL)
Les principaux types numériques proposés par la norme SQL tournent autours les nombres
entiers et décimaux. Les types qui acceptent des nombres entiers comme valeur sont désignés
par le mot-clé INT (TINYINT, SMALLINT, MEDIUMINT, BIGINT). La différence entre
eux revient à la taille mémoire réservées au champ. Le type NUMBER (t, d) sert à stocker des
nombres décimaux. Les deux paramètres précisent la taille (t) du nombre et le nombre de
décimales (d). Dans un champ NUMBER (5,3), on peut stocker des nombres de 5 chiffres
significatifs maximum, dont 3 chiffres sont après la virgule. Par exemple : 22.435, -14.861.
NUMBER (4) équivaut à écrire NUMBER (4, 0). Ce type est surtout utile pour manipuler des
valeurs dont la précision est connue, comme les valeurs monétaires.
Tableau II. 4. Les types de données Numériques
La norme SQL fournis un ensemble de types temporel pour stocker des valeurs représentants
des moments. Le type DATE permet de stocker des moments avec une précision de siècle,
année, mois, jour, heure, minutes et secondes. Le type TIMESTAMP est plus précis dans la
définition d’un moment (fraction de seconde). Le type INTERVAL YEAR TO MONTH
permet d’acquérir une différence entre deux valeurs temporelles avec une précision
mois/année. Le type INTERVAL DAY TO SECOND permet d’acquérir cette différence avec
plus de précision (de l’ordre de la fraction de seconde)
Dr. Djellal. A 24
Chapitre II : Structured Query Language (SQL)
La création d’une table, telle qu’on l’a vue précédemment dans la section 5.1 sous
forme d'un ensemble de colonnes, décrit le contenu de la BD. Cependant, ce contenu doit
respecter quelques règles de gestion. Pour cela, il faut inclure des contraintes dans le schéma
de la table pour assurer l’intégrité et la cohérence de la BD. Par exemple, on peut demander
au SGBD de garantir que :
- Une colonne doit toujours avoir une valeur concrète (différente de nulle).
- Une ou plusieurs colonnes constituent la clé primaire de la table.
- Une colonne dans une table peut référencer la clé primaire d’une autre table.
- La valeur d’une colonne doit être unique au sein de la table.
- La valeur d'une colonne doit être supérieure à 18, par exemple
Pour garantir ce genre de contrôle, des règles de gestion doivent être définies au sein des
schémas des tables de la BD, il s'agit des contraintes. L’intégration de ces contraintes peut
alléger les applications du côté client. En effet, si on définie que la valeur du stock des
produits doit obligatoirement être un nombre strictement positif (stock > 0), les applications
de saisie n’ont plus à tester les valeurs en entrée, ça sera le rôle des contraintes portant sur les
colonnes en question.
Deux types de contraintes peuvent être utilisés: des contraintes de domaines et des contraintes
d'intégrité. Les deux types peuvent être définis selon deux manières :
i. En ligne (Inline constraints) : avec cette première manière, la déclaration des contraintes
est faite au sein de la commande create (en même temps que la description de la
colonne ou bien après mais toujours dans Create), comme suit:
Dr. Djellal. A 25
Chapitre II : Structured Query Language (SQL)
ii. Hors ligne (Out-of-line constraints): avec cette deuxième manière, la définition des
contraintes est faite après la création de la table. Ceci est fait via la commande de
modification ALTER, selon la syntaxe suivante:
Il s’agit d’un ensemble de règles appliquées sur quelques colonnes à fin de restreindre leurs
domaines de définition. Les contraintes de domaine les plus utilisées sont:
- NOT NULL : Cette contrainte précise que pour toute occurrence, la colonne
correspondante doit avoir une valeur concrète. Ainsi, la saisie de ce champ est obligatoire.
- DEFAULT : Cette contrainte précise que la saisie de la colonne correspondante n’est pas
obligatoire, le SGBD s'en charge de la remplir par une valeur par défaut. Il est à noter que,
la valeur par défaut doit avoir le même type que la colonne en question.
- UNIQUE : Cette contrainte précise que les valeurs de la colonne correspondante sont
distinctes, à l’exception de la valeur NULL. Donc, une valeur ne doit pas être dupliquée
dans deux (ou plus) occurrences (pas de doublon).
- CHECK (condition): Cette contrainte spécifie une condition (simple ou composée)
portant sur une colonne. Cette condition est vérifiée au moment de l’insertion / la
modification d’une valeur de la colonne en question par le SGBD. Un message d'erreur est
généré en cas de condition non vérifiée.
La figure II.2 représente la requête SQL permettant la création de la table Client. La requête
spécifie cinq contraintes de domaine définies en mode en ligne :
Il est possible de définir toutes ces contraintes après la création de la table (le mode hors
ligne) via la commande ALTER (Cf. Figure II.6)
Dr. Djellal. A 26
Chapitre II : Structured Query Language (SQL)
Dr. Djellal. A 27
Chapitre II : Structured Query Language (SQL)
Avec la commande ALTER, il est possible de modifier le schéma d'une table en lui :
- Ajoutant une contrainte via la clause ADD Constraint (Cf. Figure II.6),
- Activant une contrainte via la clause DISABLE constraint (Cf. Figure II.7),
Dr. Djellal. A 28
Chapitre II : Structured Query Language (SQL)
- Réactivant une contrainte via la clause ENABLE constraint (Cf. Figure II.7) et
- Supprimant une contrainte via la clause DROP constraint (Cf. Figure II.6, II.7).
- Première forme : Avec cette première forme, il faut indiquer explicitement les noms des
colonnes à remplir et fournir les valeurs dans le même ordre, selon la syntaxe suivante:
INSERT INTO <nom_Table> (colonne1, colnne2…)
Avec cette forme d’insertion, il est possible de ne pas indiquer toutes les colonnes. Comme
conséquence, les colonnes manquantes prendront la valeur NULL (cf. les colonnes ville et
email, dans la figure II.8) ou bien la valeur par défaut (en cas de présence de la contrainte
Default) (cf. la colonne TypeCli).
Exemple 1. La requête suivante est une insertion du client num 512, le résultat est représenté
dans la figure II.817
17
Le contenu de chaque table est accessible depuis l'onglet Données de la table correspondante
Dr. Djellal. A 29
Chapitre II : Structured Query Language (SQL)
Il est à noter qu'avec cette première forme, l’ordre de colonnes à remplir n’est pas important,
mais il est à respecter avec les valeurs à indiquer.
Exemple 2. La requête suivante est une insertion dont l'ordre de création n'est pas respecté:
- Deuxième forme : Avec cette deuxième forme, il ne faut pas indiquer les noms des
colonnes à remplir. Cependant, il faut, absolument, respecter l’ordre de la création des
colonnes, selon la syntaxe suivante:
INSERT INTO <nom_Table> VALUES (valeur1, valeur2…);
Exemple 3. La requête suivante est une insertion dont les valeurs sont toutes connues, le
résultat est représenté sur la figure II.9 –A-
Avec cette deuxième forme, il faut donner une valeur pour chacune des colonnes de la table.
Ainsi, en cas de manque d’information, il faut fournir la valeur nulle pour la colonne
correspondante
Exemple 4. La requête suivante est une insertion avec des valeurs manquantes, le résultat est
représenté sur la figure II.10 -B-
Dr. Djellal. A 30
Chapitre II : Structured Query Language (SQL)
Dr. Djellal. A 31
Chapitre II : Structured Query Language (SQL)
insert into Commande Cannot insert NULL into La clé primaire de la table
values (null, 512, 1, ("sys"."commande"."num) ne peut pas être nulle
20);
insert into Commande check constraint violated La colonne Qte est définie
values (3, 512, 1, 0); comme > 0 avec une
contrainte CHECK
WHERE condition;
Pour mettre à jour les valeurs d’une colonne pour toutes les lignes, il suffit de ne pas indiquer
une condition.
Comme pour les insertions, il faut respecter les contraintes définies au niveau des colonnes.
Dans le cas contraire, une erreur est renvoyée en signalant le nom de la contrainte violée ainsi
la mise à jour ne sera pas effectuée. Par exemple, la modification de la quantité commandée
avec une valeur épuisant le stock.
La condition sélectionne les lignes à supprimer. Si aucune condition n’est précisée, toutes les
lignes de la table seront supprimées. Si l’expression ne sélectionne aucune ligne, rien ne sera
supprimé et aucune erreur n’est renvoyée.
Dr. Djellal. A 32
Chapitre II : Structured Query Language (SQL)
Exemple 1. La requête suivante supprime tout employé dont le nom est Salhi Ahmed
La suppression d’un enregistrement peut provoquer une violation d'une contrainte d'intégrité.
En effet, la suppression d'une ligne dont la clé primaire est utilisée dans une autre table en tant
que clé étrangère engendre une incohérence dans la BD.
Exemple 2. Dans cet exemple, une requête de suppression du client num 512 sachant qu’il a
effectué au moins une commande (il figure dans la table commande)
Le résultat sera une erreur renvoyée par le SGBD (CF. Figure II.12) indiquant la violation de
la contrainte et le client ne sera pas supprimé tant qu’il est utilisé (comme référent) dans une
autre table.
7. Interrogation d’une BD
Cette section représente une partie très importante du LMD de SQL. En effet,
interroger une BD est un des grands objectifs de sa création. Interroger une BD revient à
chercher et retrouver des données stockées. Cette opération se résume dans la commande
SELECT. En effet, avec cette commande on peut exécuter plusieurs types de sélection:
Exemple 1. La requête suivante retourne la liste des "nom et prénom" des clients. Le output
de la requête est représenté dans la figure II.13
Dr. Djellal. A 33
Chapitre II : Structured Query Language (SQL)
La clause DISTINCT ajoutée après SELECT permet d’éliminer les dupliquant dans le résultat
de la requête :
Select distinct typeCli from Client;
La clause Where ajoutée à la commande Select permet de spécifier quelles sont les
lignes à sélectionner. Cette clause est suivie d'une condition qui sera testée pour chaque ligne.
La syntaxe est la suivante:
SELECT columns FROM <nom_table> WHERE condition;
La condition peut être simple (Cf. exemple 1) ou bien composée (Cf. exemple 2). Les lignes
pour lesquelles la condition est vérifiée seront sélectionnées.
Exemple 1. La requête suivante retourne la liste (toutes les colonnes) des clients habitant à la
ville de Constantine
SELECT * FROM Client WHERE Ville =’Constantine’;
Exemple 2. La requête suivante retourne la liste des produits dont le prix est compris entre
1000 et 5000 DA
SELECT * FROM produit WHERE prix <= 5000 and prix >= 1000;
Dans la plus part des cas, les données à rechercher sont le résultat d'une jointure de
deux ou plusieurs tables. Avec une opération de jointure (requête SELECT avancée), on peut
combiner plusieurs tables puis sélectionner les données demandées. Afin d’éviter l’ambigüité,
Dr. Djellal. A 34
Chapitre II : Structured Query Language (SQL)
il faut préciser le nom de la table avec le nom de la colonne, comme le montre la syntaxe
suivante :
Select <tab1.col1>, <tab1.col2>, <tab2.col1> …
from table1, table2 … Where condition;
Exemple 1. La requête suivante retourne la liste des clients (nom, prénom) qui ont
commandés plus de 50 unités de nos produits pendant les mois de janvier et février.
Select Client.nom, client.Prénom from client, commande
Where commande.codcli = client.codcli
And Commande.qte >50
And commande.datecomm BETWEEN '01/02/2018' and '31/03/2018';
Une requête en cascade consiste à effectuer une requête à l'intérieur d'une autre (sous
requêtes). La sous requête doit être placée à la suite d'une clause WHERE. Comme le montre
la syntaxe suivante:
Select columns from tables
where <column> op (select columns from tables
where <column> op (select ... ));
La condition de la requête est exprimée à l'aide d'un opérateur "op" qui peut être un opérateur
booléen (<, >, =..) ou bien un opérateur ensembliste (in, not in...). Selon le type de l'opérateur
de la condition, deux cas sont envisagés:
i. La sous requête renvoie obligatoirement une constante (une et une seule valeur). Cette
dernière sera comparée avec la valeur d'une colonne via un opérateur booléen (Cf.
exemple 1)
ii. La sous requête renvoie une table (une ou plusieurs lignes). Ainsi, la valeur de la colonne
utilisée dans la condition sera comparée avec l'ensemble de lignes retourné à l'aide d'un
opérateur ensembliste (Cf. exemple 2)
Dr. Djellal. A 35
Chapitre II : Structured Query Language (SQL)
Exemple 1. La requête suivante retourne la liste des produits (désignation) dont le prix est
supérieur à celui du produit numéro 2. Pour cela, une sous requête, retournant le prix du
produit num 2, à été utilisée.
Select désignation from produit
Where prix > (select prix from produit
Where CodPro =2);
Exemple 2. La requête suivante retourne la liste des clients (nom, prénom) qui ont effectués
au moins une commande. Pour cela, une sous requête, retournant la liste des clients figurant
dans la table commande, à été utilisée.
8. Fonctions d'agrégation
Les fonctions d’agrégation utilisées dans les requêtes SQL permettent d’effectuer des
opérations statistiques sur une table ou bien une sélection d’enregistrements et retournent
toujours une seule valeur. On peut, par exemple, demander de retourner le nombre de ligne
dans une table ou bien le max/min/moyenne des valeurs d'une certaine colonne. La syntaxe
générale des requêtes utilisant ces fonctions est la suivante:
Select function (colonne) from table;
COUNT ( ) est une fonction qui sert à compter le nombre de lignes d’une table ou d'une
sélection. Pour compter le nombre total de ligne d’une table, il convient d’utiliser le symbole
étoile "*" selon la syntaxe serait alors la suivante :
SELECT COUNT(*) FROM table
Le résultat de cette requête sera un entier indiquant le nombre des enregistrements de la table
(0, si la table est vide)
Exemple 1. La requête suivante retourne le nombre de produits insérés dans la table Produit:
Nous pouvons aussi utiliser la fonction COUNT pour compter le nombre d’enregistrement
non vide dans une colonne. Pour cela, il faut appliquer la fonction Count sur une colonne.
Exemple 2. La requête suivante retourne le nombre total des produits ainsi que le nombre de
produits dont le prix a été renseigné dans la table Produit. Le résultat de la requête s'affiche
dans la partie Query Result comme le montre la figure suivante:
Dr. Djellal. A 36
Chapitre II : Structured Query Language (SQL)
Les fonctions Min ( )/MAX ( ) retournent la valeur la plus grande / la valeur la plus petite
d’une colonne d’une table ou d’une sélection
A retenir!! Les colonnes nulles sont ignorées dans ces fonctions. De plus, si
elles sont appliquées sur une colonne dont toutes les valeurs sont nulles alors
le résultat sera aussi nul
Cette fonction Retourne la somme des valeurs d’une colonne d’une table ou d’une sélection.
Exemple 4. La requête suivante retourne la somme des quantités commandées par le client
numéro 512.
Select sum (Qte) from Commande
Where CodCli=512;
Exemple 5. La requête suivante retourne la moyenne des prix des différents produits:
Select AVG (prix) from Produit;
Dr. Djellal. A 37
Chapitre II : Structured Query Language (SQL)
Utiliser une fonction statistique résulte à une colonne dont le nom peut-être un peu complexe
(Cf. Figure II.14). SQL offre la possibilité d'utiliser un Alias pour renommer temporairement
la colonne sur laquelle il y a une fonction SQL ce qui facilite la lecture du résultat. Les Alias
de SQL peuvent être utilisés comme le montre la syntaxe suivante:
SELECT fonction (column) AS nom_colonne FROM table
Exemple 1. La requête suivante retourne le nombre de produits ayant un prix qui dépasse
10000 DA, le résultat a été renommé en "Procduits_chers"
Dans une requête de sélection, la clause GROUP BY est utilisée pour regrouper plusieurs
lignes ayant une colonne identique à l'aide d'une fonction statistique. C'est-à-dire si une
colonne particulière a les mêmes valeurs dans différentes lignes, la clause Group by
organisera ces lignes dans un seul groupe. Cette clause peut être utilisée selon la syntaxe
suivante:
SELECT column1, column2,...
Function (column i)
FROM tables
[WHERE conditions]
GROUP BY column i;
A retenir!! Group by c'écrit toujours après la clause Where (si elle existe)
Exemple1. La requête suivante retourne, pour chaque client, la somme des quantités
commandées.
Dr. Djellal. A 38
Chapitre II : Structured Query Language (SQL)
Exemple 1. La requête suivante retourne la liste des clients ordonnés selon l'Age
Figure II. 18. La clause Ordre by appliquée sur une seule colonne
Dr. Djellal. A 39
Chapitre II : Structured Query Language (SQL)
Exemple 2. La requête suivante retourne la liste des clients ordonnés selon l'Age et le Nom
Dr. Djellal. A 40
Chapitre III :
1. Déclencheurs ou Triggers
Différents type de triggers peuvent être crées: la différence réside dans (i) le type de
l'événement déclenché, (ii) le mode du trigger ou (iii) le moment de son exécution par rapport
à l'évènement. En considérant ces trois cas, 12 types de trigger peuvent être définis selon :
- L'évènement : pour une certaine table de la BD, trois types d'évènements peuvent surgir:
o Insertion d'un nouvel enregistrement (INSERT);
o Mise à jour des données d'un ou plusieurs enregistrements (UPDATE);
o Suppression d'un ou plusieurs enregistrements (DELETE);
- Le mode : il existe deux modes de trigger
o Trigger de table: qui s'exécute une seul fois suite à un événement déclenché sur une
table;
o Trigger de linge: qui s'exécute sur chaque ligne de la table (FOR EACH ROW). Il est
possible de préciser quelques lignes avec une condition (WHEN);
- Le moment : le trigger s'exécute selon deux moments
o Avant l'exécution de l'action de l'événement (BEFORE) ;
o Apres l'exécution de l'action de l'événement (AFTER).
Avec l'option BEFOR, un trigger de table effectue un traitement avant l'exécution de l'action
de l'évènement. Ceci signifie que le trigger sert à soumettre l’action de l'évènement à une
condition. On peut, par exemple, vérifier certaines conditions avant la m à j d'une table avec
émission d’un message d’erreur si les conditions ne sont pas vérifiées
1.2. Triggers After
Avec l'option AFTER, un trigger de table effectue un traitement après l'exécution d'e l'action
de l'évènement. Ainsi, il peut servir à faire des validations a posteriori afin de vérifier que les
modifications se sont bien déroulées. Il peut aussi permettre de propager les m à j dans
d'autres tables
1.3. Priorités des triggers
Il est possible d’associer plusieurs triggers à une même table. Dans ce cas, l’ordre de leurs
exécutions est le suivant :
Dr. Djellal. A 42
Chapitre III : Gestion des événements
A retenir !! Un et un seul trigger de chaque type peut être associé à une table.
A retenir!! Pour chaque trigger, on peut associer une et une seule table.
Seulement les instructions LMD sont autorisées. Les instructions LDD et LCT
ne sont pas autorisées.
Un trigger de table est déclenché une seule fois si l’événement se produit. La syntaxe suivante
permet de créer un trigger de table:
CREATE [OR REPLACE] TRIGGER <nom-déclencheur>
before | after Evénement [OR événement] [OR événement]
ON <nom-table>
Begin
Commandes SQL;
End;
Dr. Djellal. A 43
Chapitre III : Gestion des événements
Remarque. Pour des besoins d'archivage, une nouvelle table à été ajouté à notre BD Cours. Il
s'agit de la table Archive. Cette table sera utilisée pour garder la trace des différentes
opérations (insertion, m à j, suppression) effectuées sur les tables Client, Produit et
Commande. Ainsi, chaque opération (événement) provoque l'insertion d'une nouvelle ligne
dans la table Archive indiquant le type de l'opération, la table affectée et la date de l'opération.
Le schéma de la table Archive est le suivant:
Archive (tab varchar (10),
typeOperation varchar2 (20),
dateOp date)
Exemple 1. Le script suivant représente la création d'un trigger de table d'ordre insert, il sera
déclenché après (After) chaque insertion (insert) sur la table Client (on Client)
L'exécution de ce script engendre la création du trigger Archivage, sur l'onglet script output le
message "Trigger ARCHIVAGE compiled" sera affiché. La création du trigger
n'implique pas son exécution, il se déclenchera automatiquement suite à une nouvelle
insertion sur la table Client (l'événement déclencheur). Ainsi, l'insertion dans la table Client
(sur l'onglet script output le message "1 row inserted." Sera affiché) va, automatiquement,
engendrée une insertion dans la table Archive, on peut afficher le contenu de la table via une
sélection, le résultat sera affiché sur l'onglet Query Result, comme le montre la figure
suivante:
Dr. Djellal. A 44
Chapitre III : Gestion des événements
Avec un trigger d'ordre update, il est possible de préciser il s'agit de quelle m à j (préciser la
colonne(s) concernée(s) par la m à j). Ainsi, le trigger ne sera pas déclenché sauf si les
colonnes précisées ont été touchées par la m à j. Ceci est fait en ajoutant la clause Update
Of comme le montre la syntaxe suivante:
CREATE [OR REPLACE] TRIGGER <nom-déclencheur>
Before | after update of <nom_colonnes>
ON <nom-table>
Begin
Commandes SQL;
End;
Exemple 3. Archivage3 (Cf. Figure III.4) est un trigger de table d'ordre update sur la colonne
Qte de la table Commande. Il ne sera déclenché qu'après m à j de la colonne Qte.
La m à j de n'importe quelle colonne de la table Produit (Cf. Figure III.5) lance le trigger
Archivage2. Cependant, Archivvage3 est lancé seulement si la m à j de la table Commande
touche la colonne Qte
Dr. Djellal. A 45
Chapitre III : Gestion des événements
Un trigger de ligne se défini avec l'option FOR EACH ROW comme le montre la syntaxe ci de
sous. Il se déclenche pour chaque ligne affectée par l'événement déclencheur du trigger. Ce
genre de trigger peut être utilisé, par exemple, pour consulter les valeurs des attributs touchés
par une m à j.
CREATE [OR REPLACE] TRIGGER <nom-trigger>
Before | after Evénement [OR événement] [OR événement]
ON <nom-table>
For each row [when (condition)]
Begin
Commandes SQL;
End;
Exemple 4. Archivage2 (Cf. Exemple 2) a été supprimé et remplacé par Archivage4 (Cf.
Figure III.6), c'est un trigger de ligne d'ordre update, il s'exécute suite à une m à j sur la table
Produit
Dr. Djellal. A 46
Chapitre III : Gestion des événements
Une m à j qui touche 4 lignes de la table Produit déclenche 4 fois l'exécution de Archivage4
comme le montre la sélection sur la table Archive (Cf. Figure III.7)
Dr. Djellal. A 47
Chapitre III : Gestion des événements
Exemple 5. Pour mieux archiver les opérations effectuées sur la BD, deux colonnes ont été
ajoutées au schéma de la table Archive. Il s'agit de Ancienne_Qte et Nouvelle_Qte. De plus,
Archivage3 (Cf. Exemple 3) a été supprimé et remplacé par Archivage5 (Cf. Figure III.8).
C'est un trigger de ligne d'ordre update, il s'exécute suite à une m à j sur la table Commande
pour inclure l'ancienne et la nouvelle valeur de la colonne Qte affectée par la m à j. Ainsi, une
m à j de la Qte de la commande num 4 engendre l'insertion d'une nouvelle linge dans la table
Archive indiquant l'ancienne et la nouvelle valeur de la colonne Qte (115/125) comme le
montre la dernière ligne de la table Archive (Cf. Figure III.8).
Figure III. 8. Usage de Old et New dans un trigger de ligne d'ordre update
A retenir !! New et old ne sont accessible que via un trigger de ligne (For
each row).
Dr. Djellal. A 48
Chapitre III : Gestion des événements
Dr. Djellal. A 49
Chapitre III : Gestion des événements
Il est aussi possible de désactiver / réactiver tout les triggers associés à une table avec la
commande ALTER comme suit:
Alter table <nom_table> DISABLE|ENABLE all triggers;
Exemple 8. La commande suivante permet de désactiver tout les triggers associés à la table
Produit:
Alter table Produit DISABLE all triggers;
Dans le cas où nous ne voulons plus utiliser le trigger, il faut le supprimer avec la commande
Drop selon la syntaxe suivante:
Drop trigger <nom_trigger>;
Pour connaître la liste des triggers créés, il est possible de consulter la table Oracle
USER_TRIGGERS. Cette table (Cf. Figure III.10) contient toutes les informations des triggers
crées par les utilisateurs de la BD : nom, type, événement déclencheur, état ....
Dr. Djellal. A 50
Liste des Références
CROZAT, S. Conception des bases de données IV Bases de données non-relationnelles.
Gardarin, G. (2003). Bases de données. Editions Eyrolles.
Gruau, C. (2005). Rudiments SQL pour Oracle.
Rigaux, P. (2001). Cours de bases de données.. CNAM/Médias.
Soutou, C. (2013). SQL pour Oracle. Editions Eyrolles.
Soutou, C. (2013). SQL pour Oracle. Editions Eyrolles.
https://db-engines.com
https://db-engines.com
https://www.developpez.com
https://www.statista.com
Dr. Djellal. A
Table des matières
Sommaire ........................................................................................................................................... ii
Liste des tableaux .............................................................................................................................. iii
Liste des figures ................................................................................................................................. iv
Chapitre I : Systèmes de Gestion des Bases de Données ......................................................................5
1. Introduction ................................................................................................................................6
2. Processus de développent de Bases de Données .........................................................................6
3. Modèle Relationnel de Données..................................................................................................6
3.1. Eléments du modèle relationnel ..............................................................................................7
3.2. Clé primaire ............................................................................................................................8
3.3. Clé étrangère ...........................................................................................................................8
4. Système de Gestion de Bases de Données ...................................................................................9
4.1. SGBD : historique ....................................................................................................................9
4.2. Architecture ANSI/SPARC ...................................................................................................... 10
4.2.1. Niveau externe ........................................................................................................... 10
4.2.2. Niveau conceptuel ...................................................................................................... 11
4.2.3. Niveau interne ........................................................................................................... 11
4.3. Fonctionnalités des SGBD ...................................................................................................... 12
4.3.1. Description des données ............................................................................................ 12
4.3.2. Indépendance physique des données........................................................................... 12
4.3.3. Indépendance logique des données ............................................................................. 13
4.3.4. Manipulation des données .......................................................................................... 13
4.3.5. Contrôle des données ................................................................................................. 13
4.3.6. Partage des données .................................................................................................. 13
4.4. SGBD leaders......................................................................................................................... 14
Chapitre II : Structured Query Language ........................................................................................... 16
1. Introduction .............................................................................................................................. 17
2. Oracle ....................................................................................................................................... 17
3. Oracle SQL Developer................................................................................................................ 19
4. Différentes familles du langage SQL .......................................................................................... 19
5. Langage de Définition de Données ............................................................................................ 20
5.1. Description des données ....................................................................................................... 20
5.1.1. Création de tables ...................................................................................................... 20
5.1.2. Renommer une table .................................................................................................. 21
Dr. Djellal. A
5.1.3. Destruction d'une table .............................................................................................. 21
5.1.4. Modification du schéma d'une table ........................................................................... 21
5.2. Nommage et types de données SQL ...................................................................................... 23
5.2.1. Types de données Caractères ..................................................................................... 23
5.2.2. Types de données numériques.................................................................................... 24
5.2.3. Types de données temporels ..................................................................................... 24
5.3. Description des contraintes ................................................................................................... 25
5.3.1. Contraintes de domaine ............................................................................................. 26
5.3.2. Contraintes d’intégrité ............................................................................................... 27
6. Langage de Manipulation de Données ....................................................................................... 29
6.1. Insertion d’enregistrements .................................................................................................. 29
6.2. Mise à jour d’enregistrements ............................................................................................... 32
6.3. Destruction d’enregistrements .............................................................................................. 32
7. Interrogation d’une BD .............................................................................................................. 33
7.1. Sélection de colonnes ............................................................................................................ 33
7.2. Sélection de lignes................................................................................................................. 34
7.3. Requêtes avancées ................................................................................................................ 34
7.4. Requêtes en cascade ............................................................................................................. 35
8. Fonctions d'agrégation .............................................................................................................. 36
8.1. La fonction COUNT ( ) ............................................................................................................ 36
8.2. Les fonctions Min ( )/Max ( ) .................................................................................................. 37
8.3. La fonction SUM ( ) ................................................................................................................ 37
8.4. La fonction AVG ( ) ................................................................................................................ 37
8.5. Les Alias ................................................................................................................................ 38
9. Organisation du résultat d'une requête ..................................................................................... 38
9.1. La clause group by ................................................................................................................. 38
9.2. La clause ordre by ................................................................................................................. 39
Chapitre III : Gestion des évenements .............................................................................................. 41
1. Déclencheurs ou Triggers .......................................................................................................... 42
1.1. Triggers Before ..................................................................................................................... 42
1.2. Triggers After........................................................................................................................ 42
1.3. Priorités des triggers .............................................................................................................. 42
3. Création d’un trigger ................................................................................................................. 43
3.1. Trigger de table ..................................................................................................................... 43
3.2. Trigger de ligne ..................................................................................................................... 46
3.2.1. Usage de OLD et NEW .............................................................................................. 47
Dr. Djellal. A
3.2.2. Usage de la clause When ........................................................................................... 48
4. Manipulation des Triggers ......................................................................................................... 49
4.1. Modification d'un trigger ....................................................................................................... 49
4.2. Activation / Désactivation d'un trigger................................................................................... 49
4.3. Destruction d'un trigger ........................................................................................................ 50
4.4. Informations sur les triggers .................................................................................................. 50
Liste des Références ......................................................................................................................... 51
Table des matières............................................................................................................................ 52
Annexes ............................................................................................................................................ 55
Série de TP n° 01: instalation et découverte ........................................................................................ I
Série de TP n° 02: SQL: Langage de Définition des Données ..............................................................II
TP 01. La BD Formation .......................................................................................................................II
TP 02. La BD Projet ..............................................................................................................................II
TP 03. La BD Vente .............................................................................................................................III
Série de TP n° 03: LDD et LMD ....................................................................................................... IV
TP 01. La BD Formation ..................................................................................................................... IV
TP 02. La BD Projet ............................................................................................................................. V
Série de TP n° 04 : LMD ................................................................................................................. VI
TP 01. La BD Projet ............................................................................................................................ VI
TP 02. La BD Vente ............................................................................................................................ VI
Série de TP n° 05 : Les Triggers ..................................................................................................... VIII
TP 01. La BD Cours .......................................................................................................................... VIII
Dr. Djellal. A
Annexes
Annexes
Série de TP n° 01
Installation & découverte
I. Installation
1. Vérifier le type du système d'exploitation installé sur vos machines
o Clic droit sur Ordinateur / Propriétés
o Dans la partie Système cherchez l'information Type du système.
2. Accéder au répertoire D:/ Oracle/outils
Pour chacun des outils à installer, choisissez la version adéquate à votre système (32/64 bits)
3. Installez la plateforme Java (JDK)
o Gardez soigneusement le path (chemin) de l'installation
4. Installez Oracle Database 12c Release2 V12.2.0.1.0
o Gardez soigneusement les informations introduites durant l'installation (mot de
passe, nom de la BD ...)
5. Lancez l’interface Client SQL Developer
o Introduisez le path du JDK (action requise seulement au premier lancement de
SQL Developer)
II. Préparation de la connexion
1. Créez l'utilisateur myUser
Vous pouvez maintenant commencer à créer des tables et à insérer des données...
Dr. Djellal. A I
Annexes
Série de TP n° 02
SQL: Langage de Définition de Données (LDD)
TP 01. La BD Formation
Ecrivez le script SQL qui permet de créer cette BD. En se référant au schéma relationnel,
choisissez les types de données qui vous semblent logique et appliquez les contraintes
nécessaires en utilisant le mode on ligne, sachiez que :
1. Créez la base Projet en se référant au schéma ci-dessus, choisissez les types de données
qui vous semblent logique et appliquez les contraintes nécessaires, sachiez que :
- Les fonctions possibles pour la réalisation d’un projet sont : Développeur, Testeur et
Chef.
- L'intitulé de chaque projet ne doit pas être nul
- Le cout d'un projet doit être strictement positif.
- Les projets sont par défaut finalisés (date de réalisation) une année après leur
lancement.
o Indication: l'expression 24/01/2022 + interval '1' year est égale à 24/01/2023
2. Ecrivez le script SQL qui permet d’ajouter à la table Employer la colonne Ville qui
indique la ville de résidence des employés. Cette dernière aura la valeur ‘Constantine’ par
défaut.
3. Les salaires des employés sont compris entre 65000.00 et 100000.00. Ecrivez la requête
SQL pour appliquer cette règle.
4. Ecrivez le scripte SQL qui permet de supprimer les tables de cette BD.
Dr. Djellal. A II
Annexes
TP 03. La BD Vente
1. Ecrivez le script SQL qui permet de créer cette BD. En se référant au schéma relationnel,
choisissez les types de données qui vous semblent logique et appliquez les contraintes
nécessaires en utilisant le mode on ligne, sachiez que :
- Les Prix, stock et quantité commandée sont strictement positives.
- Les dates de commande et de livraison ne doivent pas être nulles.
- Indication : pour définir la clé étrangère (Noliv, NoCom) de la table
detailLivraison, utilisez la contrainte en ligne:
FOREIGN KEY(noCommande,noArticle)REFERENCES LigneCommande
2. La quantité livrée doit être strictement positive. Ecrivez la requête SQL pour appliquer
cette règle.
4. Le stock de chaque produit est initialement par défaut égal à zéro. Ecrivez la requête SQL
pour appliquer cette règle.
Série de TP n° 03
SQL: LDD & LMD
TP 01. La BD Formation
ETUDIANT RELEVE
IdEtudiant Nom Adresse IdCours IdEtudiant Note
100 Salhi Constantine Excel 100 18
200 Ben Ali Constantine Excel 300 18
300 Moussa Annaba ERP 100 16
ERP 200 18
ERP 300 16
BDA 100 13
BDA 200 18
Dr. Djellal. A IV
Annexes
TP 02. La BD Projet
Département Projet
IdD Nom IdP Intitulé Cout DateRéalisation
01 Informatique 01 SIG Constantine 200000.00 15/02/2024
02 Ressources Humaines 02 SI Vente 170000.00 30/06/2023
03 Vente 03 Supervision ERP 230000.00 10/09/2023
04 Gestion RH 150000.00 31/03/2024
Employés
IdE Nom Prénom Salaire Fonction IdD
01 Ben Saleh Ahmed 70000.00 Assistant 02
02 Saidi Ali 70000.00 Assistant 03
03 Hacini Rima 80000.00 Ingénieur 01
04 Ben abid Wafa 90000.00 Chef de département 01
Participation
IdE IdP Fonction
04 01 Développeur
03 01 Développeur
02 03 Chef
02 02 Testeur
04 02 Développeur
03 03 Testeur
Dr. Djellal. A V
Annexes
Série de TP n° 04
SQL: LMD
TP 01. La BD Projet
TP 02. La BD Vente
1. Afficher les numéros et les dates des Commandes du Client num10 dont le numéro est
supérieur à 5
2. Afficher les numéros et les descriptions des Articles dont le prix unitaire est compris entre
1000 DA et 2500 DA.
Indication: Utiliser la clause Between
3. Afficher les numéros et les noms des clients ainsi que leurs numéros des commandes
faites le 4/04/2022.
4. Afficher l'article dont le prix unitaire est le minimum
Dr. Djellal. A VI
Annexes
5. Afficher les numéros des articles commandés au moins une fois par le Client numéro 10
après le 01/04/2022.
6. Afficher les numéros des livraisons correspondants aux Commandes faites par le Client
numéro 10
7. Afficher les numéros des Commandes qui ont été placées à la même date que la
Commande numéro 2
8. Afficher les numéros et les noms des Clients qui n'ont pas effectués de commandes au
mois de mars de l'année 2022.
9. Afficher les numéros des Commandes qui ne contiennent pas l'Article numéro 10.
10. Afficher les numéros des articles qui apparaissent dans toutes les Commandes.
11. Afficher les numéros des Articles qui apparaissent dans toutes les Commandes du Client
numéro 10.
12. Afficher les numéros les Articles dont la description débute par la lettre « C ».
Indication : Utilisez la clause like 'C%'
13. Afficher les numéros des Clients dont le numéro de Téléphone n'est pas NULL.
14. Afficher le montant total de la Commande numéro 1 avant et après la taxe de 15%.
Utilisez les alias AS pour renommer les colonnes avant et âpres
Série de TP n° 05
Les Triggers
TP 01. La BD Cours
Gestion de la suppression
1- Créer un trigger (Suppression) qui archive les clients qui ont été supprimés de la BD.
Créer une table archive avec les colonnes nécessaires
Créer le trigger avec l'événement, le moment et la table correspondantes
2- Nous voulons supprimer de la table client, les clients n'ayant pas effectué des
commandes. Ecrire et exécuter la requête SQL équivalente
3- Vérifier les résultats obtenus dans les tables Client et Archive
4- Modifier le trigger Suppression pour archiver seulement les clients habitants à
Constantine.
5- Nous voulons supprimer de la table client, les clients habitant dans une ville dont le
nom commence par "C". Ecrire et exécuter la requête SQL équivalente
6- Vérifier les résultats obtenus dans les tables Client et Archive
7- Effectuer un Rollback
8- Désactiver le trigger Suppression
9- Supprimer les clients habitant à Constantine et vérifier l'archive.
Gestion de la m à j
1- Créer un trigger (màj) qui calcule et insert dans une table archive la nouvelle moyenne
des âges après chaque changement de l'âge d'un employé. Pour cela :
Créer une table archiveMoy avec les colonnes nécessaires
Créer le trigger avec les événements, le moment et la table correspondantes
Ecrire la requête SQL qui retourne les âges des clients
Utiliser cette moyenne comme valeur à inclure dans la table archiveMoy
Utiliser la commande adéquate à ce traitement dans le corps du trigger à crée