Vous êtes sur la page 1sur 21

Mme Grissa.

A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

Chap5 SQL : UN LANGAGE DE BASE DE


DONNEES RELATIONNELLE
SQL est une évolution de SQUARE initialement développé à IBM san-jose pour le SGBD R.
SQUARE[Boyce75]  SEQUEL[CHAMBERLIN76]  Structured Query Language.

Avertissement: Ce qui suit ne constitue qu’une présentation incomplète de SQL. Pour plus de
précision, se référer à la documentation technique du SGBD utilisé.

1. Définition des Données en SQL (LDD)


CREATE TABLE, ALTER TABLE, DROP TABLE

1.1 Création : La commande CREATE TABLE


Syntaxe

CREATE TABLE <nom de relation> (<att1><type> [Not Null],…);

Sous le SGBD Oracle: les types de données suivants sont utilisables lors de la définition des
attributs d'une relation:
- CHAR (< longueur>) : Chaîne de caractères de longueur fixe (255 caractères)
- VARCHAR(< longueur>) : Chaîne de caractères de longueur variable (255 caractères)
- NUMBER['(' <lgr1> ',' <lgr2> ')' ] : virgule fixe ou flottante.
- DATE: format standard jour-mois-an
- LONG: Chaîne d'au plus 65535 caractères
- RAW et LONGRAW : similaire à CHAR et à LONG respectivement, pour des chaînes
hexadécimales.

Une définition plus générale:

CREATE TABLE <nom de relation>


'(' <définition d'attribut> [<contrainte>] [ ',' <définition d'attribut> [<contrainte>] ',' …] ')'
[AS <requête> ]

<définition d'attribut> : consiste essentiellement à spécifier le nom, le type et les contraintes.


< nom d'attribut> <type> [DEFAULT <expression> ] [contrainte]

- La valeur de l'expression qui suit le mot clé DEFAULT est assignée à l'attribut si celui-ci n'a pas
de valeur associée lors d'une insertion de n-uplet dans la relation.
- [<contrainte>] : permet de spécifier des contraintes d'intégrité associées à l'attribut. Pour le
moment nous nous contentons de la contrainte de la valeur obligatoirement présente dans la
définition d'une table (NOT NULL)

1.2 Suppression : La commande DROP TABLE


Syntaxe

DROP TABLE <nom de relation> ;

1
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

1.3 Modification : La commande ALTER TABLE


Syntaxe

ALTER TABLE <nom de relation>


[ADD <att> <type>, … ]
[MODIFY <att> <type>,…]

2. L’interrogation

2.1 Syntaxe générale d’une requête SQL


Syntaxe

SELECT [DISTINCT] < liste de sélection > PARTIE


FROM <liste de relations > OBLIGATOIRE
------------------------------------------------------------------------------------------
[WHERE <condition>] PARTIE
[GROUP BY <Attributs de Regroupement>] OPTIONNELLE
[HAVING <condition de groupe>]
[ORDER BY < critère de tri >]

1) < liste de sélection > : définit les attributs de la relation résultat, un élément de la liste de
sélection peut être une constante, un attribut, une expression arithmétique ou une fonction de
groupe.
2) < liste de relations > : définis les relations qui seront utilisés pour la requête.
3) La clause DISTINCT : permet d'éliminer les doubles du résultat.
( Pas d’élimination des tuples en doubles sauf mention explicite ( DISTINCT ) )
4) La clause WHERE est une qualification des n-uplets de R1 x R2 x … x Rn .
Ces n-uplets qui satisfont le WHERE seront utilisés pour construire le résultat.
Elle est formée en utilisant
a) les opérateurs de comparaisons = , != , < , > , < = , > =
b) les connecteurs Logiques AND, OR et NOT avec les parenthèses si c'est nécessaire.
AND est prioritaire par rapport au OR .
c) prédicat d'appartenance à un ensemble IN , NOT IN .
d) prédicat de comparaison entre ensembles CONTAINS, NOT CONTAINS .
e) prédicat de comparaison de texte LIKE (permettant de tester si un terme de type chaîne
de caractères contient une ou plusieurs sous-chaînes) .
f) prédicat de test d'un terme comparaison avec IS NULL, IS NOT NULL .
C'est un prédicat de test de nullité qui permet de tester si un terme a une valeur convenue
'NULL' signifiant que sa valeur est inconnue.
g) prédicat EXISTS, NOT EXISTS, prédicat BETWEEN (BETWEEN: permettant de
tester si la valeur d'un terme est comprise entre la valeur de deux constantes).
h) prédicat de comparaison avec une S/requête (imbrication de requête) ANY , ALL .

NB: Une condition de recherche élémentaire est appelée prédicat en SQL.

5) La clause GROUP BY : permet de partitionner le résultat en groupes ou partitions.


6) La clause ORDER BY : permet de trier le résultat selon un ou plusieurs critères (ascendant ou
descendant).

2
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

Noms d'attributs Ambigus


On peut avoir la possibilité d'avoir des attributs portant le même nom à condition qu'ils soient
associés à des relations différentes.
Problème: si une requête fait référence à deux tables où deux attributs portent le même nom.
 Solution: préfixer le nom de chaque attribut par le nom de la relation à laquelle, il
est associé.

2.2 Expression de L’union , de l’Intersection et de la Différence

<clause SELECT> ‘UNION’  ‘INTERSECT’  ‘MINUS’ ‘(‘<clause SELECT>’)’

2.3 Les Fonctions d'Agrégation ( ou de Groupe)


Ces fonctions ne peuvent apparaître dans une requête que dans la clause SELECT ou la
clause HAVING. Ces fonctions sont:

- COUNT(<expression> *)  COUNT([DISTINCT  ALL] <expression>) : Cardinal


- SUM ( [DISTINCT  ALL ] <expression>) : Somme
- AVG( [DISTINCT  ALL ] <expression>) : Moyenne
- MAX( [DISTINCT  ALL ] <expression>) : Maximum
- MIN( [DISTINCT  ALL ] <expression>) : Minimum
- VARIANCE( [DISTINCT  ALL ] <expression>) : Variance

2.4 Les Expressions


Une expression est une combinaison de valeurs, d'opérateurs et de fonctions rendant une
valeur comme résultat. Les expressions s'utilisent partout où une valeur est utilisable, à savoir :
- dans la liste de projection de SELECT,
- dans les conditions des clauses WHERE et HAVING
- dans la clause ORDER BY
- dans la clause VALUES de l'instruction INSERT,
- dans la clause SET de l'instruction UPDATE.

2.4.1 Les Opérateurs


La forme générale d'une expression d'opérateur est :
<opérande1> <opérateur> <opérande2>

Parmi les principaux opérateurs, nous citons:


- Les opérateurs Arithmétiques unaires : + , -
- Les opérateurs Arithmétiques binaires: + , - , *, /
- Les opérateurs chaînes de caractères : %
- Les opérateurs de comparaison: = , != , < , >, < = , > = , ANY , ALL , [NOT]EXISTS
[NOT] BETWEEN <valeur1> AND <valeur2>,
[NOT] LIKE , IS [NOT] NULL
- Les opérateurs Logiques: NOT , AND , OR
- Les opérateurs ensemblistes: UNION , INTERSECT , MINUS , [NOT] IN

2.4.2 Les Fonctions


La forme générale d'utilisation des fonctions est :

<Symbole de Fonction> (<liste d'arguments>)

où les arguments peuvent être des variables, des constantes ou des expressions.

3
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

Nous avons déjà présenté les fonctions d'agrégation au paragraphe 2.3 ( COUNT, SUM,AVG,
MAX, MIN, VARIANCE).

On dispose également:
- de fonctions de manipulation de chaîne de caractères
REPLACE pour la substitution d'une sous-chaîne à une autre,
SUBSTR pour l'extraction de sous-chaîne,
LENGTH pour déterminer la longueur d'une chaîne, … etc.

- de fonctions numériques
ABS(n) : la valeur absolue de n ,
CEIL(n): le plus petit entier supérieur ou égale à n,
FLOOR(n) : la partie entière de n ,
MOD(n,m) : le reste de la division entière de m par n ,
POWER(m,n) : m à la puissance n ,
SQRT(n): la racine carrée de n , … etc.

- de fonctions sur le type DATE


ADD-MONTHS(d,n): ajouter n mois à la date d,
LAST-DAY,
NEXT-DAY ,
MONTH-BETWEEN(d1,d2) : nombre de mois entre les dates d1 et d2 … etc.

- de fonctions de conversions
TO-DATE: convertit une chaîne de caractères représentant une date en une date,
TO-CHAR : convertit une date ou une valeur numérique en chaîne de caractères,
TO-NUMBER: convertit une chaîne de caractères représentant un nombre en un
nombre,… etc.

- de diverses autres fonctions : comme la fonction


NVL (<expression1> , <expression2> ) qui rend comme résultat
<expression2> : si la valeur de <expression1> est inconnue (NULL),
<expression1> : sinon

3. Instruction de Mise à Jour (UPDATE, INSERT, DELETE)

3.1 L'Instruction INSERT


Cette instruction permet d'ajouter un ou plusieurs tuples dans une Relation.
a) Syntaxe : ajout d'un seul tuple

INSERT INTO <nom de relation >[(att1 [, att2]…)]


VALUES (<n-uplet>)

Syntaxe : ajout d'un ou de plusieurs tuples

INSERT INTO <nom de relation > [(att1 [, att2]…)]


SELECT … FROM … WHERE

4
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

3.2 L'Instruction UPDATE


Cette instruction permet de modifier certaines valeurs d'attributs dans un ou plusieurs tuples.

Syntaxe : modifier un n-uplet

UPDATE <nom de relation>


SET att1 = expression
[, att2 = expression ] …
[WHERE <condition>]

3.3 L'Instruction DELETE


Cette instruction permet de supprimer un ou plusieurs tuples d'une relation.

Syntaxe : supprimer un n-uplet

DELETE FROM <nom de relation >


[WHERE <condition>]

4. LES VUES EN SQL

4.1 Création d'une Vue


Syntaxe

CREATE VIEW <nom-vue> AS <requête>

4.2 Suppression d'une Vue


Syntaxe
DROP VIEW <nom-vue>

5
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

SQL : Liste de Requêtes


Requête1 :
"Donner la liste de tous les employés qui ont un salaire > 300 Dinars. "
Requête2 :
"Lister le NAS de tous les employés."
Requête3 :
"Lister toutes les informations de tous les employés."
Requête4 :
"Lister le salaire de tous les employés."
Requête5 :
" La liste de tous les employés (Nom, Prénom) qui travaillent dans le département numéro 5 et dont
le salaire est  300 Dinars. "
Requête6 :
" La liste de tous les employés qui sont des directeurs de département. "
Requête7 :
" Lister le Nom et le Salaire de tous les employés qui travaillent dans le département Recherche."
Requête8 :
" Lister le Nom de tous les départements qui sont localisés à 'Tunis' . "
Requête9 :
"Lister tous les Projets (Nom) qui impliquent un employé dont le nom est ‘Ben Ahmed’ comme
travaillant sur le projet ou comme directeur du département responsable du projet ."
Requête10 :
" Lister le Nom de tous les employés qui travaillent sur au moins un projet."
Requête11 :
" Lister le Nom de tous les employés qui travaillent sur les projets 1 ou 2 ou 3"
Requête12 :
" Lister le Nom de tous les employés qui travaillent sur un des projets contrôlés par le département
numéro 5. "
Requête13 :
" Lister le Nom de tous les employés qui travaillent dans tous les projets contrôlés par le
département numéro 5. "
Requête14 :
" Lister le Nom et le Prénom de tous les employés qui travaillent dans le département numéro 5,
triés par ordre croissant des noms. "
Requête15 :
" Lister le Nom et le Prénom de tous les employés qui travaillent dans le département numéro 5,
triés par ordre décroissant de leurs noms. "
Requête16 :
a)
" Lister le Nom, le Prénom et le Salaire de tous les employés triés par ordre décroissant de leurs
salaires et ordre croissant de leurs noms."

b)
" Lister le Nom, le Prénom et le Salaire de tous les employés triés par ordre croissant de leurs noms
et par ordre décroissant de leurs salaires."
Requête17 :
" Liste de tous les employés (No-Dept, Nom du Dept, Nom, prénom, Salaire) triés par ordre
croissant du numéro de département, ordre décroissant de leurs salaires et ordre croissants de leurs
noms."

6
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

Requête18 :
"Donner la somme, le maximum, le minimum et la moyenne des salaires des employés de
département 'Recherche' . "
Requête19 :
"Donner le nombre des employés qui travaillent dans le département 'Recherche'."
Requête20 :
" Donner le nombre de salaires différents dans la relation EMPLOYE."
Requête21 :
" Lister le nom des employés ayant 2 personnes à charge ou plus."
Requête22 :
"Pour chaque département, retrouver le numéro de département, le nombre d'employés et leur
salaire moyen."
Requête23 :
"Rechercher pour chaque projet, son numéro, son nom ainsi que le nombre d'employés
qui y travaillent."
Requête24 :
"La liste de tous les projets (numéro, nom, nombre d'employés) tels que le nombre d'employés
travaillant dans ce projet est supérieur à 2."
Requête25 :
"Lister le nom et le prénom des employés n'ayant aucune personne à charge"
Requête26 :
"Lister le nom et le prénom de tous les directeurs de département ayant au moins une
personne à charge"
Requête27 :
"Recherche de tous les employés (Nas) travaillant sur le projet 1,2 ou 3 "
Requête28 :
Liste de tous les employés (Nom, Prenom) n'ayant pas (ou pas encore) de superviseur "
Requête29 :
"Lister tous les noms et les prénoms des employés résidants à Tunis "
Requête30 :
"Lister tous les employés dont le nom possède 9 caractères et commence par les 3 lettres 'BEN' "
Requête31 :
" Lister le nom et le salaire de tous les employés si on augmente leurs salaires de 10% . "
Requête32 :
"Lister tous les noms et les prénoms des employés dont le salaire est entre 300 et 400 D."
Requête33 :
"Afficher le montant de la vente de 23 articles au prix de 45.00"
Requête34 :
"Afficher la date du jour"
Requête35 :
"Donner pour chaque employé son nom et son prénom ainsi que le nom et le prénom de son
superviseur hiérarchique direct."

7
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

3. Instruction de Mise à Jour (UPDATE, INSERT, DELETE)

3.1 L'Instruction INSERT


Cette instruction permet d'ajouter un ou plusieurs tuples dans une Relation.
a) Syntaxe : ajout d'un seul tuple

INSERT INTO <nom de relation >[(att1 [, att2]…)]


VALUES (<n-uplet>)

Syntaxe : ajout d'un ou de plusieurs tuples

INSERT INTO <nom de relation > [(att1 [, att2]…)]


SELECT … FROM … WHERE

Exemple
1) Ajout d'un seul tuple
a)
INSERT INTO EMPLOYE
VALUES ('TOUZI','Ali', 273381485,'12-jun,-57','14 rue Bellevue, Tunis','M',400, 465381273,4)
b)
INSERT INTO EMPLOYE (Nom, NAS)
VALUES ('TOUZI', 273381485)
Les autres attributs sont supposés avoir des valeurs non connues. Elles prennent la valeur NULL
par défaut.
c)
INSERT INTO EMPLOYE (Nom, NAS, No_Dept)
VALUES ('TOUZI', 273381485,2)
On doit vérifier avant l'insertion la Contraintes d’intégrité Référentielle: le département Numéro 2
existe ou non.
d)
INSERT INTO EMPLOYE (Nom, No_Dept)
VALUES ('TLILI', 2)
Vérification des valeurs Nulles  rejet :Nas est une clé mais sa valeur n'est pas spécifiée dans ce
cas.

2) Ajout d'un ou de plusieurs tuples simultanément

a) On peut créer une table intermédiaire crée physiquement sur le disque :


Create table Dept_Info
( Dept_Nom char(20) ,
Nb_Emp Number ,
Sal_Tot Number )

b) On remplie la table
INSERT INTO Dept_Info( Dept_Nom, Nb_Emp ,Sal_Tot )
SELECT Nom_D, Count(*), Sum(Salaire)
FROM DEPARTEMENT, EMPLOYE
WHERE No_Dep = No_Dept
GROUP BY Nom_D

8
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

3.2 L'Instruction UPDATE


Cette instruction permet de modifier certaines valeurs d'attributs dans un ou plusieurs tuples.
Syntaxe : modifier un n-uplet

UPDATE <nom de relation>


SET att1 = expression
[, att2 = expression ] …
[WHERE <condition> ]

Exemple
a) Modification d'un seul tuple
UPDATE PROJET
SET Loc_p = 'Sousse', Dept_No = 5
WHERE No_p = 10

b) Modification de plusieurs tuples


UPDATE EMPLOYE
SET Salaire = Salaire * 1.1
WHERE No_Dept IN ( SELECT No_Dep
FROM DEPARTEMENT
WHERE NOM_D = 'Recherche' )

3.3 L'Instruction DELETE


Cette instruction permet de supprimer un ou plusieurs tuples d'une relation.
Syntaxe : supprimer un n-uplet

DELETE FROM <nom de relation >


[WHERE <condition> ]

Exemple
a) Suppression d'un seul tuple
DELETE FROM EMPLOYE
WHERE NAS=273381465

b) Suppression de plusieurs tuples


DELETE FROM EMPLOYE
WHERE No_Dept IN ( SELECT No_Dep
FROM DEPARTEMNT
WHERE NOM_D = 'Recherche' )

4. LES VUES EN SQL


Les Vues de SQL ont un sens plus restreint que le concept de "Vue Externe" présenté dans le
chapitre 1.
Une vue SQL est souvent constituée par une table (virtuelle) qui correspond au résultat d'une
requête fréquente.
Une vue est une relation dont la valeur est calculée à chaque invocation. Elle est définie par une
requête qui utilise des relations ou des vues existantes ( et qui ne doit pas comporter de clause
ORDER BY).
Une vue est donc une table virtuelle dérivée d'autres tables ou d'autres vues. Elle correspond à
une table virtuelle dont seule la définition est stockée et non le contenu. Si les attributs d'une vue ne
sont pas le résultat d'une opération arithmétique ou d'une fonction, ils n'ont pas à être spécifiés.

9
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

4.1 Création d'une Vue SQL

Syntaxe
CREATE VIEW <nom-vue> AS <requête>

a) Exemple de requête fréquente (sans spécification d'attribut)

Exemple1 "Liste de tous les employés (Nom) et des projets (Nom, nombre d'Heures) sur lesquels ils
travaillent"
CREATE VIEW TRAVAILLE-SUR1
AS SELECT Nom, Nom-p, Heures ( V1 )
FROM EMPLOYE, PROJET, TRAVAILLE-SUR
WHERE NAS=NAS-Emp AND Projet-No = No-p

b) Exemple de requête avec attributs dérivés


CREATE VIEW DEPT-INFO(Dept-Nom, Nbre-Empls, Sal-Total)
AS SELECT Nom-D, COUNT(*), SUM(Salaire),
FROM DEPARTEMENT, EMPLOYE ( V2 )
WHERE No-Dep=No-Dept
GROUP BY Nom-D

On obtient le résultat suivant:

Travaille-Sur1 DEPT-INFO
Nom Nom-p Heures Dept-Nom Nbre-Empls Sal-Total

4.2 Interrogation d'une Vue SQL


En Interrogation : une vue est utilisée comme toute autre relation. La seule différence
réside dans le fait que ses n-uplets ne sont pas stockés mais ils sont le résultat de l'évaluation de la
requête de définition de vue.

Exemple Requête sur une Vue


SELECT Nom-p , Nom
FROM TRAVAILLE-SUR1
WHERE Nom-p = 'Produit X'

4.3 Modification d'une Vue SQL


En Modification : toute modification des relations ayant servi à la définition de la vue sont
répercutées sur la vue. Par contre, la mise à jour d'une base de données 'à travers' une vue n'a pas
trouvé de solution générale. (Il est, de ce fait, nécessaire de consulter la documentation du système
dont on dispose pour connaître les types de mise à jours autorisées en utilisant une vue).

4.4 Suppression d'une Vue SQL


Syntaxe
DROP VIEW <nom-vue>

Exemple Suppression d'une Vue

V1: DROP VIEW TRAVAILLE-SUR1


V2: DROP VIEW DEPT-INFO

10
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

Exemple en langage SQL

1)
SQL> create table employé
2 (Nom varchar2(15),
3 Prénom varchar2(15),
4 NAS number(10) not null
5 );

Table créée.

SQL> describ employé;


Nom NULL ? Type
----------------------------------------- -------- ----------------------------
NOM VARCHAR2(15)
PRÉNOM VARCHAR2(15)
NAS NOT NULL NUMBER(10)

SQL>

2)
SQL> create table Département
2 (
3 Nom_D varchar2(20),
4 No_Dep number(2),
5 Nas_Resp number(10)not null,
6 Date_Resp date,
7 constraint PK_DEP1 primary key (No_dep)
8 );

Table créée.

SQL>
/*************************************************************/
SQL> describe département
Nom NULL ? Type
----------------------------------------- -------- ----------------------------
NOM_D VARCHAR2(20)
NO_DEP NOT NULL NUMBER(2)
NAS_RESP NOT NULL NUMBER(10)
DATE_RESP DATE

SQL>
/*************************************************************/

3)
SQL> alter table département
2 add nom_r varchar2(10);

Table modifiée.

11
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

SQL> describe département


Nom NULL ? Type
----------------------------------------- -------- -------------------
NOM_D VARCHAR2(20)
NO_DEP NOT NULL NUMBER(2)
NAS_RESP NOT NULL NUMBER(10)
DATE_RESP DATE
NOM_R VARCHAR2(10)

SQL>
/*****************************************************/
4)
SQL> alter table département
2 modify nom_r varchar2(20);

Table modifiée.

SQL> descri département


Nom NULL ? Type
----------------------------------------- -------- ----------------------------
NOM_D VARCHAR2(20)
NO_DEP NOT NULL NUMBER(2)
NAS_RESP NOT NULL NUMBER(10)
DATE_RESP DATE
NOM_R VARCHAR2(20)

SQL>
/*****************************************************/
5)
SQL> drop table départementt;
drop table départementt
*
ERREUR à la ligne 1 :
ORA-00942: Table ou vue inexistante

SQL>
/*****************************************************/
6)
SQL> drop table département;

Table supprimée.

SQL>

12
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

Exemple en Langage SQL

13
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

1. DESCRIPTION DE L’APPLICATION
La base de données Entreprise a pour but de gérer les employés, les départements et les
projets d’une entreprise. On se propose de concevoir une BD pour cette entreprise.
Au terme de cette première phase les concepteurs aboutissent aux spécifications suivantes :
Un département possède un nom, un numéro et un directeur dont la date d’entrée en fonction
est mémorisée. Un département est identifié par son numéro de département. Un département peut
être localisé à différents endroits géographiques.
Un département est responsable d’un certain nombre de projet. Chaque projet est caractérisé par un

nom, un numéro et une localisation unique. Un projet est identifié par son numéro de projet.

Chaque employé est caractérisé par son nom, son prénom, son numéro d’assurance, son

adresse, son salaire, son sexe et sa date de naissance. Un employé est identifié par son numéro

d’assurance.

Un employé est toujours rattaché à un seul département mais peut travailler sur plusieurs projets
non nécessairement rattachés à un seul département.
Le nombre d’heures par semaine passé par un employé sur chaque projet est mémorisé.
A chaque employé correspond un superviseur responsable.
Pour chaque employé, on désire également conserver le prénom, le sexe, la date de naissance et la
relation de filiation de chacune de ses personnes à charges. On suppose que les prénoms des
personnes à charges d’un même employé sont distincts.

2. Schéma de la relation de la BD « Entreprise»


Le schéma de la relation de la BD « Entreprise» est le suivant :
Employé
Nom Prénom NAS D_Nais Adresse Sexe Salaire Nas_Sup No_Dept

Département Dep-Loc
Nom_D No-Dep Nas_Resp Date_Resp No-Dep Loc-Dep

Travaille-Sur Projet
NAS-Emp Projet-No Heures Nom_p No-p Loc_p Dept_No

Dependant
NAS-Emp Prénom-Dependant Sexe Naiss_D Filiation

+ C.I.Ref

Figure : Schéma de la B.D Relationnelle Entreprise

14
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

Employé
Nom Prénom NAS D_Nais Adresse Sexe Salaire Nas_S No_Dept
up
Ben ahmed Ali 123456789 09/01/55 34 rue de la sambre, M 300 333445555 5
tunis
Ben ALI Mohamed 333445555 08/12/45 4 rue banafsej , M 400 888665555 5
rades
Ben Ali Fethi 999887777 19/07/58 10 rue 2566 , M 250 987654321 4
ezzahra
Ben Salah Alia 987654321 20/06/47 22 rue 65989, F 430 888665555 4
hamma- lif
Hergli Faten 666884444 15/12/52 15 rue 10245, F 380 333445555 5
el menzeh
Sayadi Iméne 453453453 31/07/62 22 rue el assmine F 250 333445555 5
el manar2
Sayadi Leila 987987987 29/03/59 10 rue 10254 , F 250 987654321 4
montfleury
Tlili Salah 888665555 10/11/57 7 rue 14587 , M 550 1
tunis
Département Dep-Loc
Nom_D No_Dep Nas_Resp Date_Resp No_Dep Loc_Dep
Recherche 5 333445555 22/5/78 1 Tunis
Administration 4 987654321 01/01/85 4 Monastir
Direction 1 888665555 19/06/71 5 Sfax
5 Sousse
5 Tunis
Travaille-Sur Projet
NAS_Emp Projet_No Heures Nom_p No_p Loc_p Dept_No
123456789 1 32.5 Produit X 1 Sfax 5
123456789 2 7.5 Produit Y 2 Sousse 5
666884444 3 40.0 Produit Z 3 Tunis 5
453453453 1 20.0 Produit X1 10 Monastir 4
453453453 2 20.0 Produit Y1 20 Tunis 1
333445555 2 10.0 Produit Z1 30 Monastir 4
333445555 3 10.0
333445555 10 10.0

333445555 20 10.0
999887777 30 30.0
999887777 10 10.0
987987987 10 35.0
987987987 30 5.0
987654321 30 20.0
987654321 20 15.0
888665555 20

Dependant
NAS_Emp Sexe Naiss_D Filiation
Prénom-Dependant
333445555 Ali M 05/02/86 Fils
333445555 Zeineb F 05/10/88 Fille
333445555 Ridha M 03/05/90 Fils
987654321 Sami M 20/02/89 Fils
123456789 Saloua F 15/03/86 Fille
123456789 Taoufik M 10/06/85 Fils
123456789 Sami M 10/06/90 Fils

Figure : Instance de la B.D Relationnelle Entreprise

15
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

/* fichier emp_ldd.sql */

alter table département drop primary key cascade;


alter table employé drop primary key cascade;
alter table projet drop primary key cascade;

drop table Employé;


drop table Département;
drop table Dep_Loc;
drop table Travaille_Sur;
drop table Projet;
drop table Dépendant;

create table Département


(
Nom_D varchar2(20),
No_Dep number(2),
Nas_Resp number(10)not null,
Date_Resp date,
constraint PK_DEP1 primary key (No_dep)
);
create table employé
(Nom varchar2(15),
Prénom varchar2(15),
NAS number(10) not null,
D_Nais date,
Adresse varchar2(50),
Sexe char CHECK (Sexe in ('F','M') ),
Salaire number(6,2),
Nas_Sup number(10),
No_dept number(2),
constraint PK_EMP11 primary key (NAS),
constraint FK1_EMP11 foreign key (no_dept) references département(no_dep)
);

create table Dep_Loc


(
no_dep1 number(2),
Loc_Dep varchar2(10),
constraint PK_DEPL1 primary key (no_dep1,Loc_Dep),
constraint FK_DEPL1 foreign key(no_dep1) references Département(no_dep)
);
create table Projet
(
Nom_p varchar2(10),
No_p number(2),
Loc_p varchar2(10),
Dept_No number(2),
constraint PK_PROJ1 primary key (No_p),
constraint FK_Proj1 foreign key (Dept_No) references Département(no_dep)
);

16
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

create table Travaille_Sur


(
Nas_Emp number(10) not null,
Projet_No number(2),
Heures Number(4,2),
constraint PK_TRS1 primary key (Nas_Emp,Projet_No),
constraint FK1_TRS1 foreign key (Projet_No) references Projet(No_p),
constraint FK2_TRS1 foreign key (Nas_Emp) references Employé(Nas)
);

create table Dépendant


(
Nas_Emp number(10) not null,
Prénom_Dépendant varchar2(15),
Sexe char CHECK (sexe in ('F','M') ),
Naiss_D varchar2(10),
Filiation varchar2(10),
constraint PK_Depd1 primary key (Nas_Emp,Prénom_Dépendant),
constraint FK_Depd1 foreign key (Nas_Emp) references Employé(Nas)
);

Alter table département


add constraint FK1_Dep1 foreign key (Nas_Resp) references Employé(Nas) ;

Alter table employé


add constraint FK2_Emp1 foreign key (Nas_Sup) references Employé(Nas) ;

17
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

/* fichier emp_lmd.sql */

insert into employé values('Ben Ahmed','Ali',123456789,'09/01/55','34 rue de la sambre,


Tunis','M',300,Null,NULL);
insert into employé values ('Ben Ali','Mohamed',333445555,'08/12/45','4 rue Banafsej ,
Rades','M',400,Null,NULL);
insert into employé values ('Ben Ali', 'Fethi',999887777,'19/07/58','10 rue
2566,Ezzahra','M',250,Null,NULL);
insert into employé values ('Ben Salah','Alia',987654321,'20/06/47','22 rue 65989 Hammam
lif','F',430,Null,NULL);
insert into employé values ('Hergli', 'Faten',666884444,'15/12/52','10 rue 10245 El
Menzeh','F',380,Null,NULL);
insert into employé values ('Sayadi', 'Iméne',453453453,'31/07/62','22 rue el yassamine El
manar2','F',250,Null,NULL);
insert into employé values ('Sayadi', 'Leila',987987987,'29/03/59','10 rue 10254,
Montfleury','F',250,Null,NULL);
insert into employé values ('Tlili','Salah',888665555,'10/11/57','7 rue 14587,
Tunis','M',550,Null,NULL);

insert into département values ('Recherche',5,333445555,'22/05/78');


insert into département values ('Administration',4,987654321,'01/01/85');
insert into département values ('Direction',1,888665555,'19/06/71');

insert into dep_loc values (1,'Tunis');


insert into dep_loc values (4,'Monastir');
insert into dep_loc values (5,'sfax');
insert into dep_loc values (5,'sousse');
insert into dep_loc values (5,'Tunis');

insert into Projet values ('ProduitX',1,'Sfax',5);


insert into Projet values ('ProduitY',2,'Sousse',5);
insert into Projet values ('ProduitZ',3,'Tunis',5);
insert into Projet values ('ProduitX1',10,'Monastir',4);
insert into Projet values ('ProduitY1',20,'Tunis',1);
insert into Projet values ('ProduitZ1',30,'Monastir',4);

insert into Travaille_sur values (123456789,1,32.5);


insert into Travaille_sur values (123456789,2,7.5);

insert into Travaille_sur values (666884444,3,40.0);

insert into Travaille_sur values (453453453,1,20.0);


insert into Travaille_sur values (453453453,2,10.0);

insert into Travaille_sur values (333445555,2,10.0);


insert into Travaille_sur values (333445555,3,10.0);
insert into Travaille_sur values (333445555,10,10.0);
insert into Travaille_sur values (333445555,20,10.0);

insert into Travaille_sur values (999887777,30,30.0);


insert into Travaille_sur values (999887777,10,10.0);

18
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

insert into Travaille_sur values (987987987,10,35.0);


insert into Travaille_sur values (987987987,30,5.0);

insert into Travaille_sur values (987654321,30,20.0);


insert into Travaille_sur values (987654321,20,15.0);

insert into Travaille_sur values (888665555,20,Null);

insert into Dépendant values (333445555,'Ali','M','05/02/86','Fils');


insert into Dépendant values (333445555,'Zeineb','F','05/10/88','Fille');
insert into Dépendant values (333445555,'Ridha','M','03/05/90','Fils');
insert into Dépendant values (987654321,'Sami','M','20/02/89','Fils');
insert into Dépendant values (123456789,'Saloua','F','15/03/86','Fille');
insert into Dépendant values (123456789,'Taoufik','M','10/06/85','Fils');
insert into Dépendant values (123456789,'Sami','M','10/06/90','Fils');

update employé set Nas_sup= 333445555,no_dept= 5 where nas=123456789;


update employé set Nas_sup= 888665555,no_dept= 5 where nas=333445555;
update employé set Nas_sup= 987654321,no_dept= 4 where nas=999887777;
update employé set Nas_sup= 888665555,no_dept= 4 where nas=987654321;
update employé set Nas_sup= 333445555,no_dept= 5 where nas=666884444;

update employé set Nas_sup= 333445555,no_dept= 5 where nas=453453453;


update employé set Nas_sup= 987654321,no_dept= 4 where nas=987987987;
update employé set no_dept= 1 where nas=888665555;

19
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

/* fichier emp_req.sql */

select * from employé;


select * from département;
select * from dep_loc;
select * from travaille_sur;
select * from projet;
select * from dépendant;

20
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE

Le schéma global de la Base de Données Relationnelle Entreprise est le suivant :

Employé (Nom, Prénom, NAS, D_Nais,Adresse, Sexe, Salaire, Nas_Sup, No_Dept)

Département (Nom_D,No_Dep,Nas_Resp,Date_Resp)

Dep-Loc (No_Dep,Loc_Dep)

Travaille-Sur (NAS_Emp,Projet_No,Heures)

Projet (Nom_p,No_p,Loc_p,Dept_No)

Dependant (NAS_Emp,Prénom-Dependant,Sexe,Naiss_D,Filiation)

+ C. I

Le schéma global de la Base de Données Relationnelle Entreprise est le suivant :

Employé ( NAS, Nom, Prénom, D_Nais, Adresse, Sexe, Salaire, #NAS, #No-Dep)

Département (No-Dep, Nom_D, #NAS, Date_Resp)

Dep-Loc ( #No-Dep, Loc-Dep)

Travaille-Sur (#NAS, #No-p, Heures)

Projet (No-p, Nom_p, Loc_p, #No-Dep)

Dependant (#NAS, Prénom-Dependant, Sexe, Naiss_D, Filiation)

21

Vous aimerez peut-être aussi