Académique Documents
Professionnel Documents
Culture Documents
2
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
La notion de domaine
Exemples de domaines :
La notion de relation
La notion d'attribut
Un attribut est le nom donné à une colonne d'un tableau représentant une relation.
Exemple : Les attributs de la relation CIEL sont COULEUR et BOOLEEN.
La notion de schéma
Le schéma d'une relation est composé de son nom suivi des noms de ses attributs et de
leurs domaine : R(A1 D1, A2 D2,…, AN DN).
Lorsque le choix des domaines est évident, on simplifie l'écriture de la façon suivante:
R(A1, A2,…, AN). Sous cette forme, on dira que R est écrit en intension.
4
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
5
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
Remarque :
Dans une entité, les propriétés doivent être élémentaires puis doivent dépendre de
l‟identifiant par une dépendance fonctionnelle élémentaire directe.
2.4) Graphe des dépendances fonctionnelles
6
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
+
LibMatiere LibFiliere
NbHeureHebdo
9
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
- les opérateurs algébriques, agissant sur les attributs ou sur les valeurs des attributs
des relations. Ils sont subdivisés eux-mêmes en deux catégories selon qu‟ils portent sur
une seule relation (SELECTION, PROJECTION) ou sur deux relations (JOINTURE,
DIVISION).
- les opérateurs ensemblistes, agissant les relations, considérées comme étant des
ensembles. Ils se subdivisent eux-aussi en deux catégories selon qu‟ils portent sur des
relations de même schéma (UNION, INTERSECTION, DIFFERENCE) ou non (PRODUIT
CARTESIEN).
Pour présenter l‟ensemble de ces opérateurs, nous prendrons comme support le
schéma logique relationnel suivant :
DIRECTION(CodDir, LibDir)
SERVICE(CodSce, LibSce, #CodDir, #NumMatr)
EMPLOYE(NumMatr, NomEmp, PreEmp, DateNais, DateSce, Salaire, #CodSce)
4.1.1) Les opérateurs algébriques
a) La Projection
Opérer une projection d‟une liste d‟attributs sur une relation de départ génère une
relation résultat dont les tuples sont réduits aux attributs projetés. La projection élimine
les doublons éventuels contenus dans le résultat.
Syntaxe : RelationRésultat=PROJECTION Relation(Attribut1, Attribut2, …. , AttributN)
De façon schématique, on a :
RelationRésultat
Attribut1,…AttributN
Relation
Exemple :
Liste (nom, prénoms, date de prise de service) des employés.
R = PROJECTION EMPLOYE(NomEmp, PreEmp, DateSce)
b) La Sélection (ou Restriction)
Opérer une sélection suivant une condition, sur une relation de départ, génère une
relation résultat dont les tuples sont ceux qui satisfont la condition. La condition est
exprimée sous forme d‟un attribut, d‟un opérateur de comparaison (et, ou, non, <, >, , ,
…) et d‟une valeur. La sélection peut porter sur plusieurs conditions.
Syntaxe : RelationRésultat = SELECTION Relation(Condition)
10
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
De façon schématique, on a :
Condition
Relation RelationRésultat
Exemple :
Liste des employés ayant pris service après le 1er Janvier 2000 et gagnant moins
de 200000.
R = SELECTION EMPLOYE((DateSce>#01/01/2000#)et(Salaire<200000))
c) La Jointure
Opérer une jointure de deux relations, selon un critère de comparaison portant sur des
attributs de même domaine de définition, génère une relation résultat dont les tuples
sont ceux qui satisfont au critère de comparaison.
Syntaxe : RelationRésultat = JOINTURE Relation1, Relation2(critère de comparaison)
avec critère de comparaison={attribut opérateur attribut}
De façon schématique, on a :
RelationRésultat
Critère
Relation1 Relation2
Exemple :
Informations sur les Employés et les services auxquels appartiennent ces
employés.
R = JOINTURE EMPLOYE, SERVICE (Employe.CodSce = SERVICE.CodSce)
Il existe différentes formes de jointure dont l‟équijointure (deux différentes relations avec
l‟égalité comme opérateur dans le critère de comparaison) ou l‟autojointure (liaison de la
même relation avec elle-même, en utilisant l‟égalité comme opérateur dans le critère de
comparaison).
d) La Division
Opérer une division d‟une relation « dividende » par une relation « diviseur » dont les
attributs sont un sous-ensemble des attributs du dividende, génère une relation résultat
(« quotient ») dont les attributs sont ceux de la relation « dividende » qui ne sont pas ceux
de la relation « diviseur ». les tuples du quotient sont ceux pour lesquels leur
concaténation avec chaque tuple du diviseur redonne un tuple du dividende.
11
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
RelationDividende RelationDiviseur
Exemple1 :
Soient les relations R, V, V‟ et V‟‟ représentées en extension :
R A B C V B C Rep1=DIVISION(R,V) donne :
1 1 1 1 1 Rep1 A
1 2 0 2 0 1
1 2 1 3
1 3 0
2 1 1 V’ B C Rep2=DIVISION(R,V’) donne :
2 3 3 1 1 Rep2 A
3 1 1 1
3 2 0 V’’ B C 2
3 2 1 3 5 3
Exemple2 :
Soient les relations suivantes :
VIN Cru Millésime Degré TYPE Millésime Degré CRU = DIVISION(VIN,TYPE)
Macon 1977 12 1977 12 donne:
Macon 1979 14 1979 14
Macon 1980 12 CRU Cru
Saumur 1977 12 Macon
Saumur 1979 14 Saumur
Chablis 1979 14
Les opérateurs ensemblistes s‟appliquent sur des relations considérées comme des
ensembles.
L‟union, la différence et l‟intersection ne peuvent se faire que sur des ensembles
compatibles çàd ayant même schéma (mêmes attributs se correspondant deux à deux et
ayant le même domaine de valeurs).
a) L’Union
L‟union de deux relations génère une relation dont les tuples sont ceux appartenant à
l‟une ou à l‟autre des relations ou aux deux. En cas de tuples identiques, les doublons
sont éliminés.
Syntaxe : RelationRésultat = UNION(Relation1, Relation2)
De façon schématique, on a :
RelationRésultat
Relation1 Relation2
Exemple :
Soient les deux relations VIN1 et VIN2 suivantes :
VIN1 Cru Millésime Degré VIN2 Cru Millésime Degré
Macon 1977 12 Mercurey 1978 12
Macon 1980 12 Macon 1980 12
Saumur 1979 14 Sancerre 1979 11
Chablis 1979 14
La relation VIN3 ci-après nous donne les vins appartenant à VIN1 ou à VIN2 (càd VIN3 =
UNION(VIN1,VIN2) :
VIN3 Cru Millésime Degré
Macon 1977 12
Macon 1980 12
Saumur 1979 14
Chablis 1979 14
Mercurey 1978 12
Sancerre 1979 11
b) L’Intersection
L‟intersection de deux relations génère une relation dont les tuples sont ceux
appartenant simultanément aux deux relations.
Syntaxe : RelationRésultat = INTERSECTION(Relation1, Relation2)
13
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
De façon schématique, on a :
RelationRésultat
Relation1 Relation2
Exemple :
Soient les deux relations VIN1 et VIN2 suivantes :
VIN1 Cru Millésime Degré VIN2 Cru Millésime Degré
Macon 1977 12 Mercurey 1978 12
Macon 1980 12 Macon 1980 12
Saumur 1979 14 Sancerre 1979 11
Chablis 1979 14
La relation VIN4 ci-après nous donne les vins appartenant à VIN1 et à VIN2 (càd VIN4 =
INTERSECTION(VIN1,VIN2) :
VIN4 Cru Millésime Degré
Macon 1980 12
c) La Différence
La différence de deux relations génère une relation dont les tuples sont ceux
appartenant à la première relation mais ne se trouvant pas dans la seconde relation.
Syntaxe : RelationRésultat = DIFFERENCE(Relation1, Relation2)
De façon schématique, on a :
RelationRésultat
Relation1 Relation2
Exemple :
Soient les deux relations VIN1 et VIN2 suivantes :
VIN1 Cru Millésime Degré VIN2 Cru Millésime Degré
Macon 1977 12 Mercurey 1978 12
Macon 1980 12 Macon 1980 12
Saumur 1979 14 Sancerre 1979 11
Chablis 1979 14
La relation VIN5 ci-après nous donne les vins appartenant à VIN1 et à VIN2 (càd VIN5 =
DIFFERENCE(VIN1,VIN2) :
14
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
d) Le Produit Cartésien
Le produit cartésien entre deux relations génère une relation dont les attributs sont la
concaténation (avec répétition) des attributs des deux relations et dont les tuples sont
tous ceux qu‟il est possible d‟obtenir par concaténation des tuples des deux relations.
Syntaxe : RelationRésultat = PRODUIT CARTESIENT(Relation1, Relation2)
De façon schématique, on a :
RelationRésultat
Relation1 Relation2
Exemple :
Soient les relations R1 et R2 suivantes :
R1 A B R2 A C
1 1 1 7
2 0 4 5
R3 A B A C
1 1 1 7
1 1 4 5
2 0 1 7
2 0 4 5
b) Le Comptage
Cet opérateur permet de compter les tuples d‟une relation. On peut se passer de
spécifier la rubrique qui sert de critère comptage, auquel cas tous les tuples sont
comptés.
Syntaxe : RelationRésultat = COMPTAGE Relation(Attribut)
ou RelationRésultat = COMPTAGE Relation()
Exemple :
Soit la relation R1 suivante :
c) Le Calcul
Cet opérateur permet de générer un ou plusieurs attributs calculés à partir d‟attribut(s)
pris d‟une relation de départ.
Syntaxe : RelationRésultat = CALCULER Relation(Règle de calcul)
Avec règle de calcul = {attributs calculés / fonctions statistiques, …}
Les fonctions statistiques habituellement utilisées sont les suivantes :
- Somme(Attribut) pour obtenir la somme des valeurs de cette colonne ;
- Minimum(Attribut) pour obtenir la plus petite valeur parmi celles contenues
dans cette colonne ;
- Maximum(Attribut) pour obtenir la plus grande valeur parmi celles contenues
dans cette colonne ;
- Moyenne(Attribut) pour obtenir la moyenne des valeurs contenues dans cette
colonne ;
Exemple :
Soit la relation R1 suivante :
16
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
d) Le Regroupement
Cet opérateur permet de regrouper les tuples en vue généralement d‟agréger les données
devant servir dans une opération de calcul.
Syntaxe : RelationRésultat = REGROUPER Relation(Attribut1, …, AttributN)
Lorsqu‟il s‟agit de regrouper puis de calculer simultanément, on peut écrire :
RelationRésultat = REGROUPER_et_CALCULER Relation(Attribut1, …, AttributN)
e) Le Renommage de rubrique
il est possible de renommer (changer de nom) à un attribut avant l‟affichage ou la
projection de ladite colonne.
Syntaxe : RelationRésultat = PROJECTION Relation(NouvNom :Attribut1, …, AttributN)
Exemple :
Soit la relation R suivante :
17
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
- Create [Unique] Index précise le nom de l‟index à créer et la possibilité ou non d‟avoir
des doublons ;
- NomIndex est le nom de l‟index à créer ;
18
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
Exemple :
En supposant que la table SERVICE est déjà créée sans index, créons un index sur cette
table en utilisant le champs CodSce :
CREATE UNIQUE INDEX IndSce ON SERVICE (CodSce)) ;
c) Modification de la structure d’une table
Trois cas sont possibles :
- suppression d‟un index (cette opération n‟est pas, en principe, une modification de la
structure de la table) :
Syntaxe :
DROP INDEX NomIndex ON NomTable ;
- ajout de nouvelle(s) colonnes :
Syntaxe :
ALTER TABLE NomTable ADD COLUMN Chp1 typeChp1, …, ChpN typeChpN ;
- suppression de colonne(s) :
ALTER TABLE NomTable DROP COLUMN Chp1 , …, ChpN ;
d) Suppression d’une table
Syntaxe :
DROP TABLE NomTable ;
4.2.1.1) Le SQL comme langage de manipulation
des données (Data Manipulation Language = DML)
Ce langage permettra de manipuler les données des tables créées, à travers soit une
mise à jour de ces données ou soit par „interrogation‟ de ces données.
a) Les instructions de modification
* Ajout d‟enregistrement (ou requête Ajout) :
Syntaxe 1 : Ajout d‟un seul enregistrement
INSERT INTO NomTable Champ1, Champ2,..
VALUES Val1, Val2,… ;
Syntaxe 2 : Ajout de plusieurs enregistrements
INSERT INTO NomTable Champ1, Champ2,..
SELECT [source.]Champ1, [source.]Champ2, …
FROM source ;
L‟utilisation de SELECT sera étudiée en détail plus loin.
* Suppression d‟enregistrement(s) :
Syntaxe :
19
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
DELETE [*]
FROM NomTable
[WHERE Condition] ;
La clause WHERE spécifie le critère logique (sous la forme champs opérateur valeur) que
doit respecter les tuples à supprimer. L‟astérisque * permet de supprimer tous les tuples
* Mise à jour des valeurs de champs
Syntaxe :
UPDATE NomTable
SET Champ1=NvelleValeur1, Champ2=NvelleValeur2, … ;
b) Les instructions d’interrogation
Elles se font à l‟aide du mot clé SELECT. Cette instruction permet d‟effectuer,
entre autres, des projections, des jointures, des sélections, etc… La structure (syntaxe)
de base de cette instruction est :
SELECT [DISTINCT]Champ1, Champ2, … (indique le résultat souhaité, une projection)
[FROM Table1, Table2, … ] (donne la ou les tables utiles)
- Le mot clé DISTINCT permet d‟exclure les tuples qui sont en doublons dans le
résultat à afficher ;
- La clause FROM indique la provenance (càd les tables d‟origine) des données à
afficher ;
- ConditionsLogiques pourra mettre en jeu différents sortes d‟opérateurs, selon
les besoins. Exemple : <, >, <=, >=, =, BETWEEN, LIKE, AND, OR, NOT, IN,
NOT IN, EXIST, ALL, ANY.
- Pour faciliter l‟interprétation des resultats d‟un calcul d‟agrégation, il est
recommandé de faire figurer la valeur du champ de regroupement dans le
résultat de la requête ;
- La clause HAVING permet de ne retenir que certains groupes satisfaisant à un
critère déterminé : « GROUP BY nomchamp HAVING condition » provoque le
regroupement des lignes ayant la même valeur pour le champ spécifié et
remplissant la condition. Cette condition doit porter sur un champ de
regroupement ou sur le résultat d‟un calcul d‟agrégat.
20
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
- ASC permet de classer les tuples résultats par ordre croissant des valeurs du
ou des champs spécifiés, contrairement à DESC qui classe en décroissant.
- Les fonctions utilisées pour effectuer des calculs statistiques sont : AVG (pour
la moyenne), COUNT (pour le comptage), MAX (pour le maximum), MIN (pour le
minimum), SUM (pour la somme). La syntaxe générale de ces fonctions est
NomFonction(NomChamp). AVG, COUNT et SUM s‟appliquent par défaut à
toutes les valeurs résultantes du SELECT, mais l‟usage du mot clé DISTINCT
permet d‟écarter du calcul les éventuels doublons. La syntaxe deviendra alors
… NomFonction(Distinct NomChamp)…
Quelques exemples de passage de l’algèbre relationnelle vers le SQL
* PROJECTION
Liste (nom, prénoms, date de prise de service) des employés :
- En A.R. :
R = PROJECTION EMPLOYE(NomEmp, PreEmp, DateSce)
- EN SQL
SELECT NomEmp, PreEmp, DateSce
FROM EMPLOYE ;
ou bien
SELECT EMPLOYE.NomEmp, EMPLOYE.PreEmp, EMPLOYE.DateSce
FROM EMPLOYE ;
Cette seconde possibilité a permis de préciser la table de provenance des champs
projetés. Cela devient nécessaire si une confusion éventuelle pourra être faite sur ces
champs pendant l‟exécution de la requête.
* SELECTION
a) Liste des employés ayant pris service après le 1er Janvier 2000 et gagnant moins
de 200000 :
- En A.R.
R1 = SELECTION EMPLOYE((DateSce>#01/01/2000#)et(Salaire<200000))
- En SQL
SELECT *
FROM EMPLOYE
WHERE ((DateSce>#01/01/2000#)AND(Salaire<200000)) ;
Utiliser ici l‟étoile (*) revient à ne projeter aucun champ en particulier mais eux tous.
b) Lister tous les employés nés dans les années 70 :
En SQL :
21
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
SELECT *
FROM EMPLOYE
WHERE DateNais BETWEEN #01/01/1970# AND #31/12/1979# ;
ou bien
SELECT *
FROM EMPLOYE
WHERE (DateNais >=#01/01/1970#) AND (DateNais<=#31/12/1979#) ;
c) Lister tous les employés dont le nom commence par B :
SELECT *
FROM EMPLOYE
WHERE NomEmp LIKE “B*” ;
* (équi)JOINTURE
Informations sur les Employés et les services auxquels appartiennent ces
employés.
En A.R. :
R = JOINTURE EMPLOYE, SERVICE (Employe.CodSce = SERVICE.CodSce)
En SQL :
SELECT *
FROM EMPLOYE, EMPLOYE
WHERE EMPLOYE.CodSce = SERVICE.CodSce ;
* INTERSECTION
Liste des employés dont les N° matricules se trouvent parmi : E2, E3, E7, E9, E54.
En SQL :
SELECT *
FROM EMPLOYE
WHERE NumMatr IN („E2‟, „E3‟, „E7‟, „E9‟ );
* DIFFERENCE
Liste des employés dont les N° matricules ne se trouvent pas parmi ceux qui
suivent: E2, E3, E7, E9, E54.
En SQL :
SELECT *
FROM EMPLOYE
WHERE NumMatr NOT IN („E2‟, „E3‟, „E7‟, „E9‟ );
* COMBINAISON entre SELECTION, PROJECTION et JOINTURE
22
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
Nom, Prénoms, Libellé service des employés rattachés à la Direction des Affaires
financières :
En A.R. :
R1 = JOINTURE EMPLOYE, SERVICE (EMPLOYE.CodSce=SERVICE.CodSce)
R2 = JOINTURE R1, DIRECTION (R1.CodDir=DIRECTION.CodDir)
R3 = SELECTION R2 (LibDir = „DIRECTION DES AFFAIRES FINANCIERES‟)
R4 = PROJECTION R3 (NomEmp, PreEmp, LibSce
En SQL :
SELECT NomEmp, PreEmp, LibSce
FROM EMPLOYE, SERVICE, DIRECTION
WHERE EMPLOYE.CodSce = SERVICE.CodSce
AND SERVICE.CodDir = DIRECTION.CodDir
AND LibDir = „DIRECTION DES AFFAIRES FINANCIERES‟ ;
23
Enseignant : Koffi M. HOUNGBEDJI
Cours de BASE DE DONNEES
24
Enseignant : Koffi M. HOUNGBEDJI