Algèbre Relationnelle et le SQL
2019
COURS ET EXERCICES
CORRIGES SUR L'ALGEBRE
RELATIONNELLE ET LE SQL
Réalisé par Mr Sylla Mamadou
ANNEE ACADEMIQUE 2018-2019
PRIX : 2000 FCFA
Document Réservé aux 2BTSIDA 2018- 2019 Page 1
Algèbre Relationnelle et le SQL
2019
CHAPITRE 1: INTRODUCTION AUX BASES DES DONNEES
I- Concepts de bases
a- Un attribut: Encore appelé rubrique ou colonne c'est une propriété ou un
renseignement. On dit encore c'est un élément d'une connaissance
levant toute ambiguïté. Exemple: Matricule.
b- Un enregistrement: Encore appelé Tuple est un ensemble de valeurs
relatif à un ou plusieurs attributs. On dit encore c'est une ligne d'un
tableau. Exemple:
Attributs
Matricule Nom Prénom
001A Digbeu Siriki
00B45 Yao Mariam Enregistrement
c- Fichier : C'est une collection d'informations (données) regroupées en
enregistrement et mémorisées sur un support (disque dur, clé USB, CD,
DVD, etc.). On dit encore que c'est un ensemble d'enregistrements.
Exemple : Le fichier des étudiants ivoiriens. Les fichiers sont gérés par
un logiciel appelé SGF (Système de Gestion de Fichiers)
II- Définition d'une Base de Données
Une Base de Données est un ensemble structuré de données enregistrées sur un
support accessible par un ordinateur (Mainframes, Mini, PC, Assistants personnels)
pour satisfaire simultanément plusieurs utilisateurs de façon sélective et en un temps
opportun. On dit souvent que c'est un ensemble d'informations ou un ensemble de
fichiers propre à une organisation donnée. Pour la mettre en place, il faut recenser des
données, les organiser et traiter, les stocker afin d'y accéder plus tard. Les facteurs à
l'origine des Bases de Données sont:
- Les progrès technologiques qui ont permis de stocker des masses de données
plus grandes;
- Les besoins des entreprises nécessitant dans leur organisation une
connaissance de plus en plus fine de leurs activités.
III- Définition d'un SGBD
Un SGBD est un logiciel permettant d'organiser des données sur les périphériques et
qui fournit des procédures de sélection et de recherche de ces mêmes données. En un
mot un SGBD est un logiciel permettant à l'utilisateur d'interagir avec une Base de
Données. On dite généralement que c'est le logiciel permettant la gestion d'une Base
de Données. SGBD signifie Système de Gestion de Base de Données.
Document Réservé aux 2BTSIDA 2018- 2019 Page 2
Algèbre Relationnelle et le SQL
2019
IV-Les Objectifs d'un SGBD
Les objectifs d'un SGBD sont nombreux mais l'on peut citer entre autres:
- L'indépendance physique: Il s'agit de pouvoir définir l'assemblage des données
élémentaires entre elles dans les systèmes informatiques indépendamment de
l'assemblage réalisé dans le monde réel en tenant compte seulement des
critères de performance et de flexibilité d'accès.
- L'indépendance logique: Il s'agit de l'indépendance des applications par rapport
aux structures de stockage de données.
- La manipulation des données par des non informaticiens: L'utilisateur verra les
données indépendamment de leur implantation en machine.
- L'efficacité des accès aux données: Un SGBD possède des langages de
manipulation de données qui permettent aux informaticiens ou non d'accéder
aux données.
- Une administration cohérente des données: Un SGBD possède des fonctions
d'administration (Intégrité des données, partage des données, etc.)
V- Fonctions d'un SGBD
Un SGBD a principalement deux (2) fonctions qui sont:
- La Description: Le SGBD doit mettre à la disposition de l'utilisateur un outil
pour décrire l'ensemble des données qui seront stockées dans la Base de
Données. Il s'agira également de la perception de la Base de Données par
l'utilisateur (Niveau logique) et de l'organisation des données sur les supports
physiques (Niveau physique).
- L'Utilisation: Il s'agit d'offrir à l'utilisateur une interaction avec la Base de
Données sous forme d'un dialogue pour rechercher, sélectionner et modifier
des données
Document Réservé aux 2BTSIDA 2018- 2019 Page 3
Algèbre Relationnelle et le SQL
2019
CHAPITRE 2: LES MODELES DE DONNEES
I- Introduction
Pour décrire de manière complète les systèmes d'informations, l'on a élaboré des
modèles.
II- Définition
Un modèle de données est un ensemble de concepts et de règles de compositions de
ces concepts permettant de décrire l'information, structure d'un système
d'informations. Il existe de nombreux de données. Nous allons étudier ceux qui sont
couramment utilisés. Les modèles sont:
A- Le modèle Entité/Association
Il est construit autour de concepts utilisés dans la méthode Merise. Il permet d'obtenir
une structuration efficace des données indépendamment des traitements. L'intérêt de
cette approche se situe à plusieurs niveaux. Ce modèle est naturel et facile à
comprendre. Il permet également d'obtenir sans manipuler les données des résultats
de synthèse. Il permet pour finir une représentation graphique claire des résultats. Les
concepts de base de modèle sont Entité, Association, Propriété auxquelles s'ajoutent
les cardinalités, identifiant ou clé d'entité. Exemple:
ETUDIANT FILIERE
Matricule Codfil
(1, 1) ETRE (1, N)
Nom Libellé
La méthodologie de conception d'un schéma Entité- Association est la suivante:
- Reconnaître les entités et les associations;
- Reconnaître les attributs pertinents (les attributs concrets car on n'a pas
besoin de tous les attributs mais les plus essentiels);
- Placement des attributs (Associations porteuses de propriétés ou pas, Entités,
etc.);
- Déterminer les types d'associations (Binaire, Ternaire, n- aire);
- Faire le choix des cardinalités pour les couples Entités- Associations;
Document Réservé aux 2BTSIDA 2018- 2019 Page 4
Algèbre Relationnelle et le SQL
2019
B- Le modèle Relationnel
Ce modèle est basé sur les relations et comporte des outils puissants de
conceptualisation et est orienté Système de Gestion de Base de Données Relationnel
ou DBMS (DataBase Management System). Les concepts de ce modèle sont:
- Domaine Sémantique: C'est un ensemble de valeurs. Un attribut prend ses
valeurs dans un domaine sémantique. On dit encore c'est son ensemble de
définition. Exemple: le Nom prend ses valeurs dans les chaînes de caractères.
- Relation: C'est une entité ou association ayant subie les règles de
transformation du MCD au MLD. On dit encore que c'est un tableau à deux (2)
dimensions comportant plusieurs enregistrements. On le note R (A1, A2, …,
An) où R est le nom de la relation et A1… An sont les attributs. Exemple :
ETUDIANT (Mater, Nom, Prénom, Sexe, Tel).
- Clé de relation: Encore appelée Clé primaire, c'est un attribut ou ensemble
d'attribut permettant de distinguer les tuples ou enregistrements des uns des
autres de façon unique.
- Clé Secondaire: Encore appelée Clé étrangère ou migrante, c'est un attribut qui
est clé primaire dans une autre relation mais qui se retrouve comme un simple
attribut dans la relation qui l'accueille ou dans laquelle elle migre. Elle est
précédée ou suivie du signe dièse (#). Exemple: COMMANDE (Codcmde,
libcmde, datcmde, # Codclt).
- Degré d'une relation: C'est le nombre d'attributs de la relation.
- Cardinalité d'une relation: C'est le nombre de tuples ou d'enregistrements de la
relation.
- Relation Normalisée: Une relation est dite normalisée lorsque tous ces attributs
sont élémentaires. Exemple: ETUDIANT (Numet, Nomet, Prenomet, Adreet);
Adreet (N°rue, Ville, Code postal). La relation ETUDIANT n'est pas normalisée
car Adreet étant un attribut d'ETUDIANT, cet attribut est composé. Pour que
cette relation ETUDIANT soit normalisée, il suffit de juste remplacer Adreet par
sa valeur dans ETUDIANT. ETUDIANT (Numet, Nomet, Prenomet, N°rue, Ville,
Code postal) ce qui signifie que la relation ETUDIANT est maintenant
Normalisée.
Exemple Récapitulatif: PRODUIT (REFPRDT, DESIGNATION, PRIX)
REFPRDT DESIGNATIO PRIX
N
001A LAIT 2700
00ZE3 BEURRE 300
12LK SAVON 675
- Une ligne du tableau est un tuple ou enregistrement: (001A, LAIT, 2700);
- La cardinalité de cette relation est 3;
- Un attribut est une colonne: exemple REFPRDT;
- Le degré de cette relation est 3;
Document Réservé aux 2BTSIDA 2018- 2019 Page 5
Algèbre Relationnelle et le SQL
2019
C- Règles de passage du MCD au MLD ou MR
Pour passer du MCD au MLD, l'on applique les Règles de passage suivantes:
Règle N°1: A chaque Entité, est associé un schéma de relation composé de tous les
attributs de l'entité;
Règle N°2: Si dans une association A, il existe une entité E pour laquelle la cardinalité
du couple (E, A) est égale à (0, 1) ou (1, 1), on ajoute dans le schéma de la relation (R)
qui traduit E une clé de chacune des autres entités participant à l'association. Cette
clé est suivie ou précédée du signe dièse (#)
Règle N°3: Si dans une association A, il n'existe pas d'entité E pour laquelle la
cardinalité du couple (E, A) est égale à (0, 1) ou (1, 1), on crée un nouveau schéma de
relation (R) contenant une clé de chaque entité participant à l'association ainsi que
tous les attributs de l'association si elle en contient.
NB: Toutes ces trois (3) règles s'appliquent de façon simultanée ou ensemble.
Exemple: Soit le modèle de Chen suivant
Restaurateur Produit
CodR Refprdt
NomR Libellé
(1, N)
(0, N)
PASSER
CONCERNE
R
Commande
(1, 1) (1, N) Qtécmde
Num_cde
T.A.F: Trouver le MLD
Voici la résolution
Restaurateur (CodR, NomR);
Commande (Num cde, # CodR);
Produit (Refprdt, Libellé)
Document Réservé aux 2BTSIDA 2018- 2019 Page 6
Algèbre Relationnelle et le SQL
2019
Concerner (Refprdt, Num Cde, Qtécmde)
Application 1: Reconstruire le MCD à partir du MLD suivant:
- Station (Numstat, nomstat, altitude, région);
- Hôtel (Codhot, nomhot, # Numstat, catégorie);
- Chambre (Numch, # Codhot, Nombrelits);
- Client (N°clt, Nomclt, Adrclt, Telclt)
- Réservation (#N°clt, # Codhot, # Numch, Datdebut, Datfin, Nombrepersonnes);
Application 2: Proposer le MLDR à partir du MCD suivant
Client Contrat
Numclt Codcontrat
Signer
(1, N) (1, 1)
Nomclt Objet
Datcontrat
(1, N)
Déterminer
(1, 1) (1, N) (1, N)
Avoir
Employé Qualification
Matricule Codquaf
Nomemp Libellé
Salaire
(1, N) (1, N)
Réajuster
Document Réservé aux 2BTSIDA 2018- 2019 Page 7
Algèbre Relationnelle et le SQL
2019
CHAPITRE 3: NORMALISATION DU MODELE RELATIONNEL ET DU MCD
L'objectif de la normalisation est de construire un schéma de base de données
cohérent. Un mauvais schéma logique peut conduire à un certain nombre d'anomalies
pendant la phase d'exploitation de la base de données. Nous allons voir ces
anomalies dans une première partie. Pour qu’un modèle relationnel soit normalisé, il
faut qu’il respecte certaines contraintes appelées les formes normales. Les formes
normales s’appuient sur les dépendances fonctionnelles entre attributs.
I- Rappels sur la notion de dépendance fonctionnelle
La construction du MCD mais également du modèle relationnel correspondant, repose
presque entièrement sur le concept de dépendance fonctionnelle. C’est ce concept qui
permet de passer d’un ensemble de propriétés non structuré à un modèle conceptuel
des données formé d’entités et d’associations et au modèle relationnel correspondant.
II- Définition
On dit que l'attribut B est en dépendance fonctionnelle (DF) de l'attribut A si à une
valeur quelconque de la propriété A, on ne peut faire correspondre qu’une seule
valeur au plus de la propriété B.
On note A B
(Source) (But)
Autrement dit, si on connaît la valeur de A, on peut en déduire une seule valeur de B.
Mais la réciproque n’est pas vrai (si on connaît B, on ne peut pas en déduire A).
Exemple : Num client Nom client
Il existe une DF entre num client et Nom client, car si on connaît une valeur de la
propriété num client. (Exemple : 23A2), il ne peut lui correspondre qu’une seule valeur
de la propriété nom (ex : Digbeu).
La réciproque est fausse :
Nom client Num client n’est pas une DF
Si l’on connaît la valeur de la propriété Nom client, on ne peut pas en déduire la
propriété Num client, car il peut y avoir des homonymes.
III- Terminologie
Document Réservé aux 2BTSIDA 2018- 2019 Page 8
Algèbre Relationnelle et le SQL
2019
Si on a une dépendance fonctionnelle A B, on peut employer les expressions
suivantes de façon équivalente :
- Il y a une dépendance fonctionnelle de A vers B
- B est en dépendance fonctionnelle de A
- B dépend fonctionnellement de A
- A est la source et B est le but (ou la cible) de la dépendance fonctionnelle
DF à partir de propriétés concaténées (partie gauche composée de plusieurs attributs)
Il peut exister des dépendances fonctionnelles à partir de propriétés concaténées,
c'est-à-dire qui forment un tout indissociable, comme si elles étaient soudées. On note
par un + cette concaténation.
Exemple : Considérons une commande qui comporte plusieurs produits
Num_Commande + Ref_Produit quantité commandée
Si on n’a seulement le numéro de la commande, on ne peut pas en déduire la quantité
commandée, car il faut aussi savoir de quel produit. De même, on ne peut pas savoir
la quantité commandée d’un produit si on ne sait pas de quelle commande. Il faut bien
connaître à la fois la commande et le produit (leurs identifiants respectifs) pour en
déduire la quantité commandée. Les dépendances fonctionnelles dont la source est
formée de plusieurs propriétés doivent être élémentaires, c'est-à-dire ne pas être
créées artificiellement.
Exemple : Num Commande + Num Client date commande n’est pas une DF
élémentaire car on n’a pas besoin du numéro de client pour connaître la date de
commande, il suffit de connaître le numéro de la commande. La propriété Num Client
ne sert à rien dans cette DF.
IV- Propriétés des dépendances fonctionnelles
Les dépendances fonctionnelles ont les propriétés suivantes :
- Union : Si on a deux DF ayant la même source, on peut les rassembler en une
seule, en séparant les cibles par une virgule.
Si A B et A C alors ont peut écrire que A B, C
Exemple : Référence Désignation et Référence Prix de vente unitaire
Alors par union on a : Référence Désignation, Prix de vente unitaire
Lors du tracé du graphe des dépendances fonctionnelles, l’union permet de regrouper
sur une seule ligne toutes les dépendances fonctionnelles ayant la même source.
- Transitivité :
Si A B et B C alors on a A C
Document Réservé aux 2BTSIDA 2018- 2019 Page 9
Algèbre Relationnelle et le SQL
2019
Ex : Num Médecin Code Service et Code Service Num Hopital
Alors on a Num Médecin Num Hopital
Les DF qui peuvent être déduites par transitivité de deux autres DF (qui ne sont pas
directes) doivent être éliminées car elles sont alors redondantes.
Il ne reste alors que les DF directes, c'est-à-dire celles qui ne peuvent pas être
retrouvées par transitivité. Attention toutefois à la signification des dépendances. Une
dépendance fonctionnelle qu'on peut retrouver par transitivité ne doit pas être
supprimée si elle n'a pas le même sens que la transitivité des deux autres, car il y
aurait perte d'information.
V- Les Formes Normales
Il existe trois (3) formes normales et elles ont pour objectifs de permettre la
décomposition des relations sans prendre d'informations à partir des notions des
dépendances fonctionnelles (DF)
a- La Première Forme Normale (1 FN)
Une relation est en 1FN si tout attribut contient une valeur atomique ou encore si tous
ces attributs sont élémentaires. On dit encore qu'une relation est en 1FN si:
- Elle possède une clé identifiant de manière unique et stable chaque ligne
- Chaque attribut est monovalué (ne peut avoir qu’une seule valeur par ligne)
- Aucun attribut n’est décomposable en plusieurs attributs significatifs.
Exemple: Etudiant (CodE, Nom, Prenom, Adresse)
Adresse (Rue, Ville). Donc la relation 'Etudiant' n'est pas en 1FN à cause de l'attribut
Adresse qui n'est pas élémentaire. Pour mettre 'Etudiant' en 1FN, il suffit de remplacer
Adresse par sa valeur dans 'Etudiant' ce qui donnerait:
Etudiant (CodE, Nom, Prenom, Rue, Ville) et dans ce cas 'Etudiant' est en 1FN.
b- Deuxième Forme Normale (2 FN)
Une relation R est en deuxième forme normale si et seulement si :
- elle est en 1FN
- tout attribut non clé est totalement dépendant de toute la clé.
Autrement dit, aucun des attributs ne dépend que d’une partie de la clé.
NB: La 2FN n'est à vérifier que pour les relations ayant une clé composée. Une
relation en 1FN n'ayant qu'un seul attribut clé est toujours en 2FN
Exemple:
LIGNE_COMMANDE (#Num_cde, #RéférenceProd, DésignationProd, Quantité)
Document Réservé aux 2BTSIDA 2018- 2019Page 10
Algèbre Relationnelle et le SQL
2019
Cette relation est en première forme normale (existence d’une clé valide et aucun
attribut n’est décomposable). Cependant, elle n’est pas en 2° forme normale car on a
DésignationProd ne dépend pas de toute la clé mais seulement de RéférenceProd:
RéférenceProd DésignationProd pour connaître l’attribut DésignationProd, on n’a
pas besoin de connaître le numéro de commande.
c- La Troisième Forme Normale (3FN)
Une relation est en 3° forme normale si et seulement si :
- elle est en 2° forme normale
- tout attribut doit dépendre directement de la clé, c'est-à-dire qu’aucun attribut
ne doit dépendre de la clé par transitivité.
Autrement dit, aucun attribut ne doit dépendre d’un autre attribut non clé.
Cette relation n’est pas en première forme normale. On dit généralement que la 3FN
sert à éliminer les transitivités.
Exemple: CLIENT (Num_client, Nom_client, code_categ, nom_categ)
Cette relation n’est pas en 3FN car Num_client nom_categ n’est pas une
dépendance directe. En effet, on a aussi Num_client et num_categ et nom_categ
NB: Si l’une des 3 règles n’est pas vérifiée, cela indique une erreur dans le modèle
relationnel et il faut alors modifier pour que les 3 règles soient vérifiées pour toutes
les relations. On vérifie les règles dans l’ordre. Si la première forme normale n’est pas
respectée, pas la peine de vérifier la 2FN. Et si la 2FN n’est pas vérifiée, inutile de
vérifier la 3FN. Il existe d’autres formes normales mais on admet couramment que ces
3 premières formes.
Résumé
Modèle normalisé = relations avec
- une clé, qui permet de distinguer chaque occurrence
- des attributs élémentaires (1FN)
- en dépendance de TOUTE la clé (2FN),
- et rien que de la clé (3FN)
On parle aussi de normalisation pour un MCD. Un MCD qui donne un MR normalisé
est qualifié aussi de normalisé.
Document Réservé aux 2BTSIDA 2018- 2019Page 11
Algèbre Relationnelle et le SQL
2019
Application 1:
Normaliser ce modèle si l'âge d'accès dépend du niveau.
CLASSE
Niveau, Section
Âge
Prise charge
Matière
Résolution de l'application 1
Le MLD issu de l'entité classe est: CLASSE (Niveau, Section, Âge, prise charge,
Matière). Or l'âge d'accès dépend du niveau ce engendre la DF: Niveau âge.
La relation CLASSE qui a une clé primaire concaténée (Niveau, Section) n'est pas en
[Link] car l'attribut âge ne dépend de toute la clé mais d'une partie de la clé. En
appliquant les règles de normalisation et de décomposition, l'on obtient:
Niveau âge;
Section Section (car la clé primaire ou l'identifiant dépend de lui-même);
Niveau, Section prise charge, Matière
Ainsi le nouveau MCD est le suivant:
SECTION NIVEAU
(1, N) (1, N)
Section CLASSE Niveau
Prise charge Âge
Matière
Le nouveau MLD est:
SECTION (Section)
NIVEAU (Niveau, Âge)
CLASSE (Section, Niveau, prise charge, Matière)
Document Réservé aux 2BTSIDA 2018- 2019Page 12
Algèbre Relationnelle et le SQL
2019
Application 2:
Restaurateur (CodR, NomR, Tel)
Commande (Codcmde, Datcmde, Libellé)
Produit (Refprdt, Désignation, Dat péremption, Prix)
Concerner (CodR, Codcmde, Refprdt, Qtécmde)
T.A.F: Normaliser le MLD précédent, puis proposer le nouveau MCD
Résolution
1- Le MLD est à la 1FN mais n'est pas en 2FN à cause de la DF issue de la relation
Concerner qui est CodR, Codcmde, Refprdt Qtécmde. Cette dépendance n'est
pas valable car la quantité commandée ne peut pas dépendre ou être fonction du
CodR ce qui signifie que la quantité commandée dépend d'une partie de la clé et non
de toute la clé. La quantité commandée dépend à la fois du produit et de la commande
ce qui engendre la dépendance suivante: Codcmde, Refprdt Qtécmde.
2- Proposons le nouveau MCD
L'ensemble des DF après les règles de normalisation est:
CodR NomR, Tel;
Codcmde Datcmde, Libellé;
Refprdt Désignation, Dat péremption, Prix;
Codcmde, Refprdt Qtécmde
Produit
Restaurateur
Refprdt
CodR
Désignation
NomR
Dat péremption
Tel
Prix
(1, N) (1, N)
Commande
Passer
Codcmde
Concerner
Datcmde
(1, 1) Qtécmde
Libellé
(1, N)
Document Réservé aux 2BTSIDA 2018- 2019Page 13
Algèbre Relationnelle et le SQL
2019
Application 3
Soit Personnel (CodP, Nom, Salaire, Département, Bâtiment). Sachant qu'un personnel
appartient à un département donné et qu'un département ne peut avoir de locaux dans
plusieurs bâtiments:
- Déterminer les dépendances fonctionnelles issues de personnel ;
- Dire en quelle FN est personnel;
- Décomposer ou normaliser la relation personnel;
- Le MCD;
Résolution
1) CodP Nom, Salaire;
CodP Département; (car un personnel appartient ou travaille dans un
département) (a)
Département Bâtiment; (car un département ne peut avoir de locaux dans
plusieurs bâtiments) (b)
CodP Nom, Salaire, Département, Bâtiment (car CodP est la clé primaire)
2) La relation est en 2FN car la clé n'est composée ou concaténée
3) Cette relation n'est en 3 FN car il y a une transitivité à cause de (a) et (b) or la
3FN permet d'éliminer les transitivités. En appliquant les règles de
normalisation et de décomposition l'on obtient:
Personnel (CodP, Nom, Salaire, Département).
Département (Département, Bâtiment).
Département
Personnel
Département
CodP (1, 1) (1, N)
Appartenir Bâtiment
Nom
Salaire
Document Réservé aux 2BTSIDA 2018- 2019Page 14
Algèbre Relationnelle et le SQL
2019
CHAPITRE 4: L'ALGEBRE RELATIONNELLE
A- Définition
L'algèbre relationnelle est une collection d'opérations qui manipulent les relations
d'une Base de données. Elle est basée sur une organisation des données sous formes
de tables ou de relations. La manipulation des données se fait selon le concept
mathématique de relation de la théorie des ensembles. L'expression des besoins
utilisateurs se fait à l'aide d'opérateurs dont les opérandes sont des relations.
B- Les Opérateurs
1- Les opérateurs ensemblistes
a- L'UNION
L'union de deux (2) relations ou tables R et S est une relation T contenant l'ensemble
des tuples ou enregistrements appartenant à R ou à S ou aux deux. Les 2 relations ont
le même schéma (le même nombre d'attributs). On note:
T=R U S ou T= Union (R, S)
Exemple
Produit (Refprdt, Libellé, Prix) Stock total: T= Union (R, S)
Stock de Bouaké (R)
Refprdt Libellé Prix
Refprdt Libellé Prix
1 A 2 1 A 2
2 L 1
3 Z 1 2 L 1
3 Z 1
Stock d'Abidjan (S)
5 H 12
Refprdt Libellé Prix
5 H 12 10 B 6
10 B 6
7 W 10 7 W 10
Document Réservé aux 2BTSIDA 2018- 2019Page 15
Algèbre Relationnelle et le SQL
2019
b- L'intersection
L'intersection de 2 relations R et S de même schéma est une relation T de même
schéma contenant les tuples appartenant à la fois à R et S. on note:
T= R ∩ S ou T= Intersection (R, S) ou T= Int (R, S)
Exemple:
R (Matr, Nom) étudiants inscrits en IDA
S (Matr, Nom) étudiants inscrits en RHCOM
Quelle est la liste des étudiants inscrits à la fois en IDA et en RHCOM?
Matr Nom
1 A
2 Z
3 I T= Intersection (R, S)
S Matr Nom
Matr Nom
10 B
2 Z
2 Z
7 W
c- La différence
La différence de 2 relations ou tables R et S de même schéma (dans l'ordre R-S) est
une relation T de même schéma contenant les tuples ou enregistrements appartenant
à R et qui n'appartiennent pas à S. On note T= R-S ou T=Minus(R, S) ou T=
Différence(R, S).
T= R-S= Différence(R, S) (donne ceux qui sont en IDA mais pas en RHCOM)
Matr Nom
1 A
3 I
Document Réservé aux 2BTSIDA 2018- 2019Page 16
Algèbre Relationnelle et le SQL
2019
d- Le produit cartésien
Le produit cartésien de 2 relations R et S (de schéma quelconque) est une relation T
ayant pour attributs la concaténation de ceux de R et S et dont les tuples sont toutes
les concaténations d'un tuple de R à un tuple de S. On dit encore c'est la table
contenant la concaténation de l'ensemble des tuples d'une ligne d'une table ou
relation à ceux de l'autre table, et ce pour chaque ligne. On note:
T= R*S ou T=Product (R, S) ou T=Produit (R, S)
Exemple
Client (Numclt, Nom, Catégorie)
Numclt Nom Catégorie
1 Touré 1
4 Digbeu 2
Produit (Refprdt, Libellé)
Refprdt Libellé
1 Lait
2 Beurre
3 Bonbon
Quel est l'ensemble des possibilités de produits offerts aux clients?
T= Client*Produit
Numclt Nom Catégorie Refprdt Libellé
1 Touré 1 1 Lait
1 Touré 1 2 Beurre
1 Touré 1 3 Bonbon
4 Digbeu 2 1 Lait
4 Digbeu 2 2 Beurre
4 Digbeu 2 3 Bonbon
e- La division
C'est la table ou relation contenant l'ensemble des tuples qui concaténés à chaque
tuple de l'une des tables fournies des tuples appartenant à l'autre.
On note T = DIVISION (R, S) ou T=R/S ou R= R div S, le produit, possède les attributs
non communs aux deux relations (tables) R1 et R2 initiales et est formée de tous les
uplets qui, concaténés à chacun des uplets du diviseur donne toujours un uplet du
dividende.
Document Réservé aux 2BTSIDA 2018- 2019Page 17
Algèbre Relationnelle et le SQL
2019
2- Les Opérateurs relationnels
a- La Projection
C'est un opérateur unaire ou de base de l'algèbre relationnelle. C'est une opération qui
consiste à éliminer des lignes (tuples ou enregistrements) ou des colonnes (attributs)
d'une ou plusieurs tables. On dit encore c'est une opération qui consiste à créer une
table ou relation à partir d'une autre en ne gardant que les colonnes spécifiées. On
note: R = Projection (R1; liste des attributs) ou R=Project (R1;Attribut);
R= Projection. R1 (liste des attributs); R=Nouvelle relation et R1= Ancienne relation;
Exemple: Etudiant (Numet, Nom, Prenom, Sexe, Filière, âge)
Quelle est la liste des noms et prénoms des étudiants?
R0= Etudiant;
R1= Projection (R0; Nom, Prenom); (Affiche ou donne uniquement que les noms et
prénoms des étudiants). On ne tient pas compte du Numéro, sexe, filière et âge de
l'étudiant.
b- La Sélection ou Restriction
C'est aussi un opérateur unaire. La sélection d'une relation R par une qualification Q
est une relation R' de même schéma dont les tuples sont ceux de R satisfaisant à la
qualification Q. On dit encore c'est une opération qui consiste à créer une table ou
relation à partir d'une autre en ne gardant que les lignes ou tuples pour lesquels une
colonne ou attribut vérifie certaines propriétés ou caractéristiques. On note:
R = Sélection (R1;Q) ou R= Restriction (R1;Q)
R= Select (R1;Q) ou R= Restrict (R1;Q)
R =Nouvelle relation; R1= Ancienne Relation;
Q est la condition est exprimée à l’aide des opérateurs mathématiques tels que =, >, <,
>=, <=, <> ou des opérateurs de logique de base ET, OU, NON.
Exemple: Etudiant (Numet, Nom, Prenom, Sexe, Filière, âge)
1- Afficher la liste des noms de ceux d'Ida
R0=Etudiant;
R1= Sélection (R0; Filière="IDA"); R2= Projection (R1; Nom)
2- Liste des numéros et Filière des étudiants dont l'âge varie entre 18 et 25 ans
R0=Etudiant; R1=Sélection (R0; âge>=18 et âge<=25);
Document Réservé aux 2BTSIDA 2018- 2019Page 18
Algèbre Relationnelle et le SQL
2019
R2= Projection (R1; Numet, Filière).
c- La jointure
La jointure de 2 relations R et S selon la qualification Q est l'ensemble des tuples du
produit cartésien R * S satisfaisant à la qualification Q. On note:
T= R * S [Q] ou T= R S [Q]
T = Jointure (R, S; Q);
Exemple:
Client (Numclt, Nom)
Commande (Codecom, date, #Numclt)
Trouver les noms de ceux qui ont passé commande le 21/12/2018
R0=Client * Commande [Numclt=Numclt]
R1=Sélection (R0; date=#21/12/2018#)
R2=Projection (R1; Nom)
3- Fonctions d'agrégats et de Tri de l'algèbre relationnelle
Les agrégats consistent dans un premier temps, à regrouper les tuples d’une relation
en fonction des valeurs d’un premier attribut, puis à appliquer une fonction de calcul
sur les valeurs d’un deuxième attribut des uplets regroupés.
a- Les fonctions statistiques de base :
SOMME (attribut) : renvoie le total des valeurs d’un attribut
MOYENNE (attribut) : renvoie la moyenne des valeurs d’un attribut
MINIMUM (attribut) : renvoie le minimum (plus petite valeur) d’un attribut
MAXIMUM (attribut) : renvoie le maximum (plus grande valeur) d’un attribut
b- La fonction de « comptage »
Elle donne le nombre de tuples (dénombrement) d’un ou de plusieurs groupes de
tuples. Syntaxe : R = Comptage (R1; attribut de dénombrement) ou
R= Compter (R1; attribut)
C- La fonction « calculer »
Les calculs et /ou comptage portent sur la relation R1. R2 ne comportera qu’une ligne
avec autant de colonnes.
d- La fonction « Trier »
Le tri effectue sur un ou plusieurs attributs, dans l’ordre croissant ou décroissant. La
relation est triée selon un ordre. La relation résultat a la même structure et le même
Document Réservé aux 2BTSIDA 2018- 2019Page 19
Algèbre Relationnelle et le SQL
2019
contenu que la relation de départ. Syntaxe : TRI (attribut1 Asc, attribut2 Asc, attribut3
Desc, ….) Asc : croissant ; Desc : décroissant
Exercice 1
Soit le MLD suivant:
Enterprise (N°ent, Nomentr, Tel, Délai, rue, ville)
Personne (Codpers, nompers, prenompers, #N°ent)
Réponse (Numrep, librep, datrep, #Codpers)
Type Réponse (Codtyp, libtyp, #Numrep, #N°ech)
Versement (Numvers, libvers, montvers, #N°ent, #Coddde, #N°ech)
Echelle Taxe (N°ech, Valeur)
Demande Taxe (Coddde, avis, date, #Codpers)
Relance Taxe (N°rel, datrel, #Coddde)
T.A.F :
1- Reconstruire le MCD
2- Trouver en algèbre relationnelle les requêtes suivantes :
a- Les travailleurs de Coton Ivoire
b- Donner la liste des noms des entreprises qui ont versé un montant taxe
de 500000 F.
c- Donner la liste des noms des personnes relancées depuis le 18/03/2016
ayant donné un avis favorable à la demande taxe A024.
Correction
1- Appliquer les règles de passage pour reconstruire le mcd;
2- Passons aux requêtes
a- Les travailleurs de coton ivoire
R0=Entreprise*Personne [N°ent=N°ent]
R1= Sélection (R0;Nomentr="Coton Ivoire")
R2= Projection (R1; nompers, prenompers)
b- Donner la liste des noms des entreprises qui ont versé un montant taxe de
500000 F.
R0= Entreprise*Versement [N°entr=N°entr]
R1= Sélection (R0; montvers=500000)
Document Réservé aux 2BTSIDA 2018- 2019Page 20
Algèbre Relationnelle et le SQL
2019
R2= Projection (R1; Nomentr)
c- Donner la liste des noms des personnes relancées depuis le 18/03/2016 ayant
donné un avis favorable à la demande taxe A024
R0= Personne*Demande Taxe*Relance Taxe [Codpers=Codpers et Coddde=Coddde]
R1= Sélection (R0; Coddde='A024' et avis="favorable")
R2= Sélection (R1; datrel='18/03/2016')
R3= Projection (R2; nompers)
Exo N°2
Station (Numstat, nomstat, altitude, région)
Hôtel (Codhot, nomhot, #Numstat, catégorie)
Chambre (Numch, #Codhot, Nombrelits)
Client (Numcli, nomcli, Adrcli, Telclt)
Réservation (Numcli, Numch, Codhot, Datdebut, Datfin, Nombrepersonnes)
1- Nom des clients et nombre de personnes correspondantes pour des réservations
de l'hôtel les studios de Bouaké
R0= Client Réservation Hôtel [Numcli=Numcli et Codhot= Codhot]
R1= Restriction (R0; nomhot="les studios" et nomstat="Bouaké")
R2= Projection (R1; nomcli, Nombrepersonnes)
2 –pour chaque station du Bafing donner le nombre de chambres réservés pour le
22/12/1998
R0= Station*Hôtel* Réservation [Numstat= Numstat et Codhot=Codhot]
R1= Sélection (R0; Datdebut='22/12/1998' et région="Bafing")
R2= Projection (R1; Numstat, comptage (Numch))
3 –Quels sont les noms des hôtels de catégorie 2 étoiles de Méribel qui sont complets
la semaine du 01/01/2018 au 08/01/2018
R0= Hôtel*Réservation [Codhot=Codhot]
R1=Sélection (R0; catégorie="2 étoiles" et nomstat="Méribel")
R2= Sélection (R1; Datdebut='01/01/2018' et Datfin ='08/01/2018')
R3= Projection (R2; nomhot)
Document Réservé aux 2BTSIDA 2018- 2019Page 21
Algèbre Relationnelle et le SQL
2019
CHAPITRE 5: LE LANGAGE SQL
I- Définition
SQL signifie (Structured Query Language), en français Langage d’Interrogation
Structuré. C’est un standard international, en ce qui concerne les langages de
manipulation des BD. SQL est connu par tous les SGBDR. Il faut cependant
mentionner désormais la présence de standards internationaux tels que SQL-86,
SQL-89, SQL-92, SQL-99 ou SQL-2003 et SQL-2008. Chaque SGBD sur le marché
utilise un peu son propre dialecte du langage SQL. Son utilisation courante consiste à
lire, à modifier, à créer, à insérer des informations dans une base de données. Le SQL
comporte cinq grandes parties :
Le DDL : Data Définition Language (Langage de Définition des données). Il permet de
décrire les éléments d’une base de données, notamment les tables, les colonnes, les
clefs, les index, les contraintes. Elle possède les commandes de base suivante :
CREATE, ALTER, DROP qui permettent respectivement de créer, modifier, supprimer
un élément de la base.
Le DML : Data Manipulation Language (Langage de Manipulation des données). C’est
la partie du SQL qui permet de traiter les données. Elle comporte les commandes de
base suivantes : INSERT, UPDATE, DELETE, SELECT qui permettent respectivement
d’insérer, de modifier, de supprimer et d’extraire des données.
Le DCL : Data Control Language (c'est-à-dire le Langage de contrôle des données).
C’est la partie du SQL qui s’occupe de gérer les droits d’accès aux tables. Elle
comporte les commandes de base suivantes : GRANT, REVOKE qui permettent
respectivement d’attribuer et de révoquer des droits.
Le TCL : Transaction Control Language, le Langage de Contrôle de Transaction
C'est la partie du SQL chargé de contrôler la bonne exécution des transactions.
Elle comporte les commandes de base suivantes : SET TRANSACTION, COMMIT,
ROLLBACK.
L’Embedded SQL : le SQL intégré. Il s'agit d'éléments procéduraux que l'on intègre à
un langage hôte : SET, DECLARE CURSOR, OPEN, FETCH...
Sa syntaxe basique est: Select… From… Where;
L'instruction Select est un opérateur de projection donc permet de choisir la ou les
propriété(s) sélectionnée(s).
Le From définit la ou les table(s) concernée(s) ou encore la provenance des données.
Le Where donne ou définit la condition ou le critère de sélection.
NB: Il existe autres ordres SQL qui sont:
Le Group By: permettant de faire des regroupements;
Order By: Permettant de faire des tris (ASC croissant, DESC décroissant)
Document Réservé aux 2BTSIDA 2018- 2019Page 22
Algèbre Relationnelle et le SQL
2019
Ainsi la syntaxe globale du SQL est:
Select … From … Where (condition)
Group by (expression)
Having (condition)
Order by (expression ASC ou DESC);
II- Quelques opérateurs du SQL
a- L'opérateur étoile (*)
C'est cet opérateur qui permet de sélectionner ou prendre toutes les propriétés d'une
ou plusieurs tables. Sa syntaxe est la suivante: Select * from…;
Exemple: Commande (Codcmde, libellé, datcmde)
Afficher les commandes: Select * from Commande;
Quelles sont les commandes du 21/10/1990?
Select * from Commande Where (datcmde=#21/10/1990#);
Afficher le libellé de toutes les commandes
Select libellé from Commande;
b- L'opérateur (distinct)
Permet d'éliminer les doublons (répétitions) d'une ou plusieurs table(s).
Sa syntaxe est: Select Distinct… from… Where..;
Exemple: Select distinct from Commande;
c- L'opérateur As ()
Signifie Alias et permet de renommer temporairement un attribut d'une table ou
requête ou même d'une table. Il permet de donner un nom à de nouvelles colonnes
créées par la requête. Syntaxe: Select distinct champ AS champ from table;
Exemple: Versement (Codvers, Libellé, Montant, Date)
Renommer le Montant comme Recette?
Select Montant as Recette from Versement;
d- L'opérateur In ()
Cet opérateur permet de faire un choix c'est-à-dire permet de vérifier si un attribut est
égal à une des valeurs déterminées. C'est une méthode simple pour vérifier si une
colonne (attribut) est égale à une valeur ou une autre valeur. Sa syntaxe est:
Select… from… Where… in (valeur 1,…, Valeur n);
Exemple: Employé (Numemp, nom, prénom, salaire, statut)
Quelle est la liste des noms, prénoms et salaire des employés qui sont soient
directeur ou soient ingénieur.
Select nom, prénom, salaire from Employé Where statut in ('Directeur', 'Ingénieur');
Son contraire est Not In. Exemple: Select nom from Employé Where statut Not in
('Directeur', 'Ingénieur'); (affiche tous les employés saufs les directeurs et les
ingénieurs).
Document Réservé aux 2BTSIDA 2018- 2019Page 23
Algèbre Relationnelle et le SQL
2019
e- L'opérateur (And & Or)
Il s'agit des conjonctions de coordinations Et / Ou utilisées par le SQL pour combiner
des conditions ou critères de sélection. Syntaxe:
Select… from… Where Condition 1 and Condition 2;
ou
Select… from… Where Condition 1 or Condition 2;
Exemple
Client (Numclt, Nom, Prénom, Sexe)
Facture (Codfact, Libellé, Montant, Datfact, #Numclt)
Afficher la liste des numéros des femmes de nom Digbeu
Select Numclt from Client Where (Sexe='Féminin' And Nom='Digbeu');
Qui sont les clients (Nom et prénom) qui ont faits des achats le 21/12/2018 ou le
28/12/2018?
Select Nom, Prénom from Client, Facture Where (Datfact=#21/12/2018# or
Datfact=#28/12/2018#);
f- L'opérateur Between
Permet de choisir une valeur dans un intervalle. On dit que cet opérateur indique la
valeur comprise entre deux (2) valeurs. Syntaxe: Select… from…Where…. Between
valeur 1 and valeur n;
Exemple: Produit (Refprdt, Désignation, Prix, Quantité)
Trouver la référence et libellé des produits dont le prix varie entre 100 et 200F CFA
Select Refprdt, Désignation from produit Where Prix Between 100 and 200;
g- L'opérateur Like
Il s'utilise dans la clause Where et permet de faire une recherche sur un modèle
particulier. Syntaxe: Select…from…Where… Like modèle;
Exemple: Produit (Refprdt, Désignation, Prix, Quantité)
Select * from Produit Where Désignation Like '% A'; (Tous les produits dont la
désignation se termine par un A).
Select * from Produit where Désignation Like ' A%'; (Commençant par un A).
Select * from Produit where Désignation Like '% A%'; (Qui utilisent un A).
Select * from Produit where Désignation Like 'B%NE'; (Commençant par un B et
finissant par NE).
Document Réservé aux 2BTSIDA 2018- 2019Page 24
Algèbre Relationnelle et le SQL
2019
h- L'opérateur is null ou is not null
Indique si une valeur est non définie ou inconnue. C'est en réalité un opérateur de
comparaison. Syntaxe: Select… from… where… is Null; ou encore Select… from…
where… is not null; Exemple: Client (Numclt, Nom, Prénom, Sexe)
Quel est le client qui n'a pas de nom?
Select * from Client where Nom is Null;
i- La clause Group By
Cette clause permet de regrouper plusieurs résultats et utiliser une fonction de totaux
sur un groupe de résultats. Syntaxe: Select… from…Group By (Expression);
Expression est une fonction qui peut-être:
Avg (): Pour calculer la moyenne;
Count (): Compter le nombre de ligne ou de tuples;
Max () (Pour le maximum), Min () (Pour le minimum), Sum () (faire la somme);
Exemple:
Client (Numclt, Nom, Prénom, Sexe)
Facture (Codfact, Libellé, Montant, Datfact, #Numclt)
Select count (*) from Client; (Donne le nombre total de clients).
Select Avg (Montant) from Facture; (le montant moyen).
Select Numclt, Sum (Montant) from Client, Facture where (Client. Numclt=Facture.
Numclt) group by Numclt; (donne la somme totale versée par chaque client)
j- La clause Having
Similaire au where à la seule différence que le Having permet de filtrer en utilisant des
fonctions Sum, Count, Avg, Min, Max. Syntaxe: Select attribut 1, fonction (attribut 2)
from… group by attribut 1 Having fonction (attribut 2) opérateur de valeur;
Exemple
Liste des noms des clients ayant un total supérieur à 40000 FCFA
Select Nom, Sum (Montant) from Client, Facture where (Client. Numclt= Facture.
Numclt) Group by Nom Having Sum (Montant) > 40000;
Document Réservé aux 2BTSIDA 2018- 2019Page 25
Algèbre Relationnelle et le SQL
2019
k- La clause Order By
Permet de trier de façon Croissante (opérateur ASC) ou de façon Décroissante
(opérateur DESC). Syntaxe: Select… from… Order By attribut (ASC ou DESC);
Exemple: Select Nom from Client Order By Nom Asc; (affiche uniquement que les
noms des clients par ordre alphabétique).
l- L'opérateur Union
Cet opérateur permet de concaténer les résultats de 2 requêtes ou de plusieurs (même
nombre de colonnes). Cet opérateur évite la répétition. Sa syntaxe est:
Select…from…Where…;
Union
Select… from… Where…;
m- L'opérateur Intersect
Permet de récupérer les enregistrements communs à 2 requêtes. Sa syntaxe est:
Select…from…Where…;
Intersect
Select…from…Where…;
n- L'opérateur Minus ou Except
Permet de récupérer les enregistrements de la 1ère requête sans inclure ceux de 2nde
Select…from…Where…;
Minus
Select…from…Where…;
o- L'opérateur Insert Into
Permet d'insérer des données dans une table ou relation. Sa syntaxe est:
Insert Into Nom Table values ('valeur 1',…,'valeur n');
Ou
Insert Into Nom Table (Colonne1,…, Colonne n) values ('valeur 1',…,'valeur n');
Exemple: Insert Into Etudiant (Matricule, nom, sexe) values ('A12', 'Toure', 'F'); (insère
les valeurs A12, Toure et F dans la table Etudiant
Document Réservé aux 2BTSIDA 2018- 2019Page 26
Algèbre Relationnelle et le SQL
2019
p- L'opérateur Update
Permet d'effectuer des modifications ou mises-à-jour sur les données existantes d'une
table. Sa syntaxe est:
Update Nom Table
Set colonne= nouvelle valeur
Where…;
Exemple: Facture (Codfact, Libellé, Montant, Datfact).
Augmenter toutes les factures de 20% d'impôt.
Update Facture
Set Montant=Montant+20%*Montant;
Réduire la facture A12 de 10000 FCFA pour une erreur
Update Facture
Set Montant=Montant – 10000
Where Codfact='A12';
q- L'opérateur Delete
Permet de supprimer des lignes ou enregistrements d'une table. Sa syntaxe est:
Delete from Nom Table Where…;
Exemple: supprimer toutes les factures établies le 12/11/2016
Delete from Facture Where Datfact=#12/11/2016#;
r- L'opérateur Alter Table
Permet de modifier une existence en définissant le type de données (Integer, Date,
Text, Char, Varchar, etc.). Cet opérateur utilise le ADD pour ajouter une nouvelle
colonne ou attribut ou le DROP pour supprimer une colonne.
Exemple: Commande (Codcmde, libellé, datcmde)
Ajouter la propriété montant à la commande
Alter Table Commande ADD montant Varchar; ce qui donne Commande (Codcmde,
libellé, datcmde, montant)
Supprimer le libellé des commandes
Alter Table Commande DROP libellé;
Document Réservé aux 2BTSIDA 2018- 2019Page 27
Algèbre Relationnelle et le SQL
2019
s- L'opérateur Create Table
Permet de créer une ou plusieurs tables avec les données (Int, Date, Text, CHAR,
Varchar). Cet opérateur utilise aussi le Not Null (qui impose la saisie), Primary Key (clé
primaire), Foreign Key (clé secondaire), etc. Exemple:
Client (Numclt, Nom, Prénom, Sexe)
Facture (Codfact, Libellé, Montant, Datfact, #Numclt)
Créons la table Client
Create Table Client
(Numclt Varchar Not Null Primary Key,
Nom Varchar,
Prénom Varchar,
Sexe Varchar);
Créons la table Facture
(Codfact Varchar Not Null Primary Key,
Libellé Varchar,
Montant Int,
Datfact Date,
Numfact
Foreign Key (Numfact) references Client);
t- L'opérateur Inner Join
Encore appelé jointure ou équijointure, cet opérateur retourne les enregistrements
lorsqu'il y a au moins une ligne ou enregistrement dans chaque colonne ou attribut
qui correspond à la condition. Sa syntaxe:
Select…from Table 1 Inner Join Table 2 on Table [Link]= [Link];
Ou
Select… from Table 1 Inner Join Table 2 Where Table [Link]= Table [Link];
Document Réservé aux 2BTSIDA 2018- 2019Page 28
Algèbre Relationnelle et le SQL
2019
Exemple:
Client (Numclt, Nom, Prénom, Sexe)
Commande (Codcmde, libellé, datcmde, #Numclt)
Afficher les commandes clients en cours
Select * from Client Inner Join Commande on [Link]= [Link];
III- Les Sous- Requêtes
Encore appelée requête imbriquée, c'est une requête située à l'intérieur d'une autre. A
l'exécution c'est la sous- requête qui est d'abord exécutée et son résultat est comparé
à la condition de la requête principale. Syntaxe: Select… from… Where colonne (sous-
requête).
Sur un résultat
Select … from Nom Table 1 Where colonne= (Select…from Nom Table 2);
Sur une colonne
Select… from Nom Table 1 Where colonne In (Select… from Nom Table 2);
Nb: on peut avoir In, Not In, =, >, >=, <, <=, <>
Exemple: Client (Numclt, Nom, Prénom, Sexe)
Quels sont les clients qui ont le même que Sylla
Select * from Client Where Nom = (Select Nom from Client Where Nom='Sylla');
Document Réservé aux 2BTSIDA 2018- 2019Page 29
Algèbre Relationnelle et le SQL
2019
Exercice 1
Soit le MLD suivant:
Enterprise (N°ent, Nomentr, Tel, Délai, rue, ville)
Personne (Codpers, nompers, prenompers, #N°ent)
Réponse (Numrep, librep, datrep, #Codpers)
Type Réponse (Codtyp, libtyp, #Numrep, #N°ech)
Versement (Numvers, libvers, montvers, #N°ent, #Coddde, #N°ech)
Echelle Taxe (N°ech, Valeur)
Demande Taxe (Coddde, avis, date, #Codpers)
Relance Taxe (N°rel, datrel, #Coddde)
T.A.F :
Trouver en SQL les requêtes suivantes :
a- Les travailleurs de Coton Ivoire
b- Donner la liste des noms des entreprises qui ont versé un montant taxe
de 500000 F.
c- Donner la liste des noms des personnes relancées depuis le 18/03/2016
ayant donné un avis favorable à la demande taxe A024.
Résolution
a) Select * from Entreprise, Personne Where (Entreprise.N°ent=Personne.N°ent)
and (Nomentr = ' Coton Ivoire');
b) Select Nomentr from Entreprise, Versement Where montvers=500000 and
(Entreprise.N°ent=Versement.N°ent);
c) Select nompers from Personne, Relance Taxe, Demande Taxe Where
(Coddde='A12') and (avis='favorable') and (datrel=#18/03/2016#) and (Demande
[Link]=Relance [Link]) and ([Link]=Demande
[Link]);
Document Réservé aux 2BTSIDA 2018- 2019Page 30
Algèbre Relationnelle et le SQL
2019
Exo N°2
Station (Numstat, nomstat, altitude, région)
Hôtel (Codhot, nomhot, #Numstat, catégorie)
Chambre (Numch, #Codhot, Nombrelits)
Client (Numcli, nomcli, Adrcli, Telclt)
Réservation (Numcli, Numch, Codhot, Datdebut, Datfin, Nombrepersonnes)
1- Nom des clients et nombre de personnes correspondantes pour des réservations
de l'hôtel les studios de Bouaké
En Algèbre relationnelle
R0= Client Réservation Hôtel [Numcli=Numcli et Codhot= Codhot]
R1= Restriction (R0; nomhot="les studios" et nomstat="Bouaké")
R2= Projection (R1; nomcli, Nombrepersonnes)
En SQL
Select nomcli, Nombrepersonnes from Client, Réservation, Hôtel Where (Client.
Numcli= Réservation. Numcli) and (Hôtel. Codhot= Réservation. Codhot) and
(nomstat='Bouaké) and (nomhot='les studios');
2 –pour chaque station du Bafing donner le nombre de chambres réservés pour le
22/12/1998
En Algèbre Relationnelle
R0= Station*Hôtel* Réservation [Numstat= Numstat et Codhot=Codhot]
R1= Sélection (R0; Datdebut='22/12/1998' et région="Bafing")
R2= Projection (R1; Numstat, comptage (Numch))
En SQL
Select Numstat, count (Numch) from Station, Réservation, Hôtel Where (Station.
Numstat= Réservation. Numstat) and (Hôtel. Codhot= Réservation. Codhot) and
(Datdebut=#22/12/1998#) and (région='Bafing');
3 –Quels sont les noms des hôtels de catégorie 2 étoiles de Méribel qui sont complets
la semaine du 01/01/2018 au 08/01/2018
En Algèbre Relationnelle
R0= Hôtel*Réservation [Codhot=Codhot]
R1=Sélection (R0; catégorie="2 étoiles" et nomstat="Méribel")
Document Réservé aux 2BTSIDA 2018- 2019Page 31
Algèbre Relationnelle et le SQL
2019
R2= Sélection (R1; Datdebut='01/01/2018' et Datfin ='08/01/2018')
R3= Projection (R2; nomhot)
4 – Augmenter la capacité de toutes les chambres de 5 lits
En Algèbre Relationnelle
R0= Chambre
R1=Projection (R0; Nombrelits=Nombrelits+5)
En SQL
Update Chambre set Nombrelits=Nombrelits+5;
Document Réservé aux 2BTSIDA 2018- 2019Page 32
Algèbre Relationnelle et le SQL
2019
CHAPITRE 6 : PRÉSENTATION DE MICROSOFT ACCESS 2007
MS Access est un système de gestion de base de données relationnelle (SGBDR) qui
fait partie du groupe de programmes MS Office en version professionnelle. La version
utilisée pour l'élaboration de ce support est MS Access d'Office 2007.
Le premier écran qui apparaît au lancement de MS Access se présente comme suit
Il permet de choisir et ouvrir une base de données récente si celle-ci fait partie de la
liste des raccourcis affichées à droite de l’écran ou d’ouvrir (ou bien créer) une base
de données grâce au « bouton office » dans le coin gauche en haut.
La barre de menu principale présente quatre menus :
Le menu Accueil
Le menu Créer
Le menu Données externes
Le menu Outils de bases de données
Document Réservé aux 2BTSIDA 2018- 2019Page 33
Algèbre Relationnelle et le SQL
2019
Le menu Accueil
Le menu Créer
Il y a six types d’objets qui permettent de créer et de manipuler des bases de données
Access : tables, formulaires, états, requêtes, macros, modules (ces trois derniers sont
contenus dans la barre Autre).
Le menu Données externes
Le menu outils de base de données
Pour chaque objet, il existe deux modes :
- Le mode utilisateur de l’objet
- Le mode structure de l’objet
Document Réservé aux 2BTSIDA 2018- 2019Page 34
Algèbre Relationnelle et le SQL
2019
Le volet de navigation
Le volet de navigation permet par exemple d'ouvrir les composants d'une base de
données (appelés objets dans Access), pour les traiter ou pour y apporter des
modifications. Pour savoir rapidement ce que vous pouvez faire avec un objet, il suffit
de cliquer dessus avec le bouton droit et de consulter le menu contextuel
correspondant.
Le volet de navigation
Document Réservé aux 2BTSIDA 2018- 2019Page 35
Algèbre Relationnelle et le SQL
2019
CHAPITRE 7 : APERÇU SUR LES OBJETS D'UNE BASE DE DONNÉES
Le SGBDR MS Access contient plusieurs types de composants appelés objets qui
permettent la manipulation des données. Nous allons les présenter brièvement dans
ce chapitre afin de connaître leurs rôles et comprendre leurs utilités.
1- Une table
Une table est une structure qui contient des données. Elle est organisée en lignes et
colonnes. Dans la terminologie base de données, les lignes sont représentées par les
enregistrements et les colonnes par les champs.
Les données sont stockées à l’intérieur des tables. Une table peut être comparée à
une liste, qui contient des enregistrements relatifs à un domaine bien défini.
Exemple : pour la gestion des contrats, nous avons construit deux tables. Celle qui
actuellement active est la table Client.
2- Une requête
C’est la formulation d’une question à traiter et la réponse qui lui est apportée sous
forme d’un enchaînement d’opérateurs mis en œuvre sur une ou plusieurs tables.
Les requêtes constituent dans un certain sens des "questions" qu'on pose au SGBD.
Le résultat d'une requête est toujours un sous-ensemble d'une ou de plusieurs tables.
Exemple
Nous voulons connaître la liste des contrats signés par le client N°1, la requête
pourrait être:
SELECT client.n°client, nom, prénom, n°contrat, datecontrat, prime
FROM client, contrat
WHERE (client.n°client=contrat.n°client) and (client.n°client=1);
Document Réservé aux 2BTSIDA 2018- 2019Page 36
Algèbre Relationnelle et le SQL
2019
Voici le résultat de cette requête :
3- Un formulaire
C’est l’interface privilégiée de communication entre le SGBDR et l’utilisateur. Véritable
outil de dialogue, le formulaire est un écran personnalisé permettant de saisir,
modifier, sélectionner et visualiser les enregistrements d’une ou plusieurs tables, de
valider des options ou de lancer différentes actions. Nous verrons par la suite les
différents modes de formulaires.
Exemple : voici un formulaire qui permet de saisir, modifier, visualiser les
enregistrements de la table chambres. Il existe plusieurs formes possibles de
présentation des formulaires.
Ce formulaire présente tous les enregistrements de la table « Contrat »
Document Réservé aux 2BTSIDA 2018- 2019Page 37
Algèbre Relationnelle et le SQL
2019
Celui-ci présente un enregistrement à la fois
4- Un état
Les états encore appelés rapports sont similaires aux formulaires, à la différence près,
qu'ils sont uniquement destinés à être imprimés. Il peut également contenir des
données calculées, triées ou même groupées.
Les états ne permettent pas de dialogues interactifs avec l’utilisateur.
En général, on utilise les états pour :
Imprimer des listes et des statistiques concernant les données ;
Regrouper les données et créer des calculs sur les données ;
Créer des factures, bons de livraison et autres pièces de gestion importantes.
Document Réservé aux 2BTSIDA 2018- 2019Page 38
Algèbre Relationnelle et le SQL
2019
Exemple
Liste des contrats regroupés par client
5- Une macro
Une macro est une action ou ensemble d'actions que vous pouvez utiliser pour
automatiser des tâches, pour effectuer une action spécifique.
6- Un module
Un module est principalement une collection de déclarations, d'instructions et de
procédures stockées ensemble sous un même nom, pour organiser votre code.
Un objet Module représente
Soit un module standard : module dans lequel vous pouvez placer des procédures
Sub et Function que vous souhaitez rendre accessibles aux autres procédures dans
toute votre base de données.
Soit un module de classe : module qui peut contenir la définition d'un nouvel objet.
Lorsque vous créez une instance d'une classe, vous créez un nouvel objet. Les
procédures définies dans le module deviennent les propriétés et méthodes de l'objet.
Document Réservé aux 2BTSIDA 2018- 2019Page 39
Algèbre Relationnelle et le SQL
2019
En résumé
À l'aide de Microsoft Access, vous pouvez gérer toutes vos informations à partir
d'un fichier de base de données unique. Dans ce fichier, vous pouvez utiliser les
éléments suivants :
Des tables afin de stocker vos données.
Des requêtes afin de rechercher et extraire les données souhaitées.
Des formulaires afin d'afficher, ajouter et mettre à jour les données dans les
tables.
Des états afin d'analyser ou imprimer des données sous une mise en page
spécifique.
Des macros, outils qui permettent d'automatiser des tâches et d'ajouter des
fonctionnalités aux formulaires, états et contrôles.
Des modules
Document Réservé aux 2BTSIDA 2018- 2019Page 40
Algèbre Relationnelle et le SQL
2019
CHAPITRE 7 : LES TABLES
1- Préliminaires : Création d'une nouvelle base de données (en mode création).
Lancer Microsoft Access 2007
Cliquez sur le bouton Microsoft Office
Cliquez sur Nouveau
Dans la partie « Prise en main de Microsoft », s’affiche une boîte de dialogue
Enregistrez d’abord le nom de la nouvelle base de données et Cliquez sur Créer.
2- La création d'une nouvelle table
Il s'agit de créer des tables à partir du schéma conceptuel des données suivant:
Agent Véhicule
N°Agent Posséder N°Immatriculation
0,n 1,1
Nom DateAchat
Prénom Marque
On en déduit le modèle logique des données suivant:
Agent (N°Agent, Nom, Prénom, Fonction, Commune)
Véhicule (N°Immatriculation, DateAchat, Marque, Couleur, N°Agent#)
Document Réservé aux 2BTSIDA 2018- 2019Page 41
Algèbre Relationnelle et le SQL
2019
La première étape consiste à créer la structure de la table. Pour cela nous allons
utiliser le « mode sans assistant » c'est-à-dire en mode création. Ce mode permet au
concepteur de définir lui-même la table et ses propriétés.
2.1. La définition de la structure des tables
Pour définir la structure d’une table, il faut pour chaque champ :
Définir le nom du champ ;
Définir le type de données du champ ;
Type de données Sa description
Texte Spécifie les champs de type alphabétique
Stocke du texte d’une longueur maximum de 65 535
Mémo
caractères
Numérique Spécifie des champs de type entier ou réel
Date/Heure Champs temporels. Spécifie une date et/ou une heure
Pour spécifier des champs contenant des valeurs
Monétaire
monétaires.
Spécifie les champs numériques automatiquement
Numéro Auto incrémenté chaque fois qu’un nouveau tuple est ajouté à la
table.
Oui/Non Champs booléen (vrai/faux, oui/non, actif/inactif)
Spécifie des objets liés ou incorporés à une table : image,
Objet OLE
feuille Excel, dessin, graphique …
Spécifie des champs de type texte utilisés comme adresses
Lien hypertexte
de lien hypertexte.
Spécifie que des valeurs de champ seront obtenues à partir
Assistant liste de choix
d’une autre table, d’une requête ou d’une liste de valeurs.
Document Réservé aux 2BTSIDA 2018- 2019Page 42
Algèbre Relationnelle et le SQL
2019
Définir les propriétés du type de données du champ
Chaque propriété peut être définie plus précisément à l’aide d’une liste de propriétés
attachées au type de données du champ. Toutes les propriétés ne sont pas
obligatoirement renseignées. Certaines peuvent avoir de valeur par défaut.
Pour chaque champ, éventuellement, cliquez dans la colonne à droite pour préciser
les propriétés.
Définir la description du champ.
La description du champ sert à fournir sous forme d’un texte, des informations au
sujet du champ, son rôle dans le système d’information.
2.2. La création d’une table : « Agent »
Nom des champs Type de données Description
N°agent Numérique Numéro de l'agent
Nom Texte [15] Nom de l'agent
Prénom Texte [20] Prénom de l'agent
Fonction Texte [50] Fonction exercée par l'agent
Commune Texte [30] Commune de résidence de l'agent
Document Réservé aux 2BTSIDA 2018- 2019Page 43
Algèbre Relationnelle et le SQL
2019
Voici ci-dessous le menu et l’icône qui permet de créer une table en mode création
Cliquez sur l’icône « Création de table »
Créez la table Agent avec ses champs dans la fenêtre qui se présente comme suit :
Pour déterminer une clé primaire à une table : sélectionner le champ proposé
comme clé primaire (N°Chambres) et cliquez sur l’icône
Le type de données NuméroAuto est un compteur automatique qui évite la saisie
des nombres entiers, évitant ainsi le risque des doublons.
Après avoir défini les propriétés, cliquez sur pour enregistrer le nom de la
table.
Basculez en « Mode Feuille de données » pour saisir les enregistrements dans la
table. Les différents modes d'affichage se trouvent dans le menu accueil.
Document Réservé aux 2BTSIDA 2018- 2019Page 44
Algèbre Relationnelle et le SQL
2019
2.3. La Création d’une autre table : la table « Véhicule »
On procèdera de la même façon que pour la création de la table Agent. Remarquons
que cette table contient le champ N°Agent comme clé externe dont le type sera Entier
long.
Table Véhicule
2.4. Les manipulations à savoir pour utiliser une table et travailler avec ses
enregistrements
Ouvrir une table en mode "Feuille de Données"
Déplacer le curseur dans le champ suivant
Déplacer le curseur dans le champ précédent
Déplacer le curseur dans n'importe quel champ d'un enregistrement
Sélectionner l'enregistrement suivant
Sélectionner l'enregistrement précédent
Sélectionner le premier enregistrement
Document Réservé aux 2BTSIDA 2018- 2019Page 45
Algèbre Relationnelle et le SQL
2019
Sélectionner le dernier enregistrement
Comment reconnaît-on l'enregistrement en cours ?
Modifier la largeur d'une colonne
Déplacer un champ
Rechercher des valeurs dans les enregistrements
Masquer des champs
Réafficher les champs masqués
Imprimer des enregistrements
3- Les autres modes de création d’une table
Sélectionner le mode « Feuille de Données » pour une table ouverte en mode
« Création »
3.1. Création avec les modèles de tables
MS Access permet de créer des tables à l'aide d'un modèle de table. Il s'agit des
modèles d'éléments courants tels que les contacts, les problèmes et les tâches, les
événements, les biens.
3.2. Le mode Table
Permet de créer une table vide. On peut définir directement les champs dans la
nouvelle table ou l'ouvrir en mode création
3.3. Le mode Listes SharePoint
Ce mode permet de créer un site SharePoint et une table dans la base de données
active qui établit une liaison vers la liste nouvellement créée.
Document Réservé aux 2BTSIDA 2018- 2019Page 46
Algèbre Relationnelle et le SQL
2019
Chapitre 8: LES RELATIONS ENTRE TABLES
Une base de données bien est rarement composée d'une seule table, mais d'un
ensemble de tables, entre lesquelles il existe certaines relations.
1- La clé primaire et la clé secondaire
La clé primaire : elle est constituée d'un ou de plusieurs champs d'une table. Elle est
l'élément unique qui permet d'identifier un enregistrement.
La clé secondaire : c'est un champ constituant la clé primaire d'une autre table. Elle
permet de représenter un lien entre deux tables. On dit aussi clé étrangère ou bien clé
externe.
2- Les index
Un index est constitué de un ou de plusieurs champs. Il permet de trier le contenu
d'une table dans un ordre spécifique ou de trouver rapidement un enregistrement.
Les index sont des structures qui accélèrent les tris et recherches dans les tables,
ainsi que l'exécution de certaines requêtes.
Exemple:
Créer par exemple un index sur le champ Nom veut dire que le SGBD copie toutes les
valeurs existantes du champ Nom dans une liste spéciale à 2 colonnes. La deuxième
colonne contient les noms triés en ordre alphabétique, et la première contient une
référence vers l'enregistrement correspondant de la table.
Il est évident que par la suite de la création de cet index, toutes les recherches et les
tris concernant le nom de l'agent sont accélérés.
Un index peut aussi comporter plusieurs champs comme par exemple Nom et
Prénom.
Propriétés importantes des index :
Un index est toujours lié à un ou plusieurs champs d'une table.
Un index peut seulement contenir des champs ayant un des types de données
Texte, Numérique ou Date/Heure.
Un index est automatiquement mis à jour par le SGBD lors d'un ajout, d'une
modification ou d'une suppression d'enregistrements dans la table. Ceci est
transparent pour l'utilisateur de la BD.
Il existe deux types d'index:
Index avec doublons (Les valeurs doubles sont permises)
Index sans doublons (Les valeurs doubles ne sont pas permises)
NB : La clé primaire est toujours indexée à l'aide d'un index sans doublons !
Document Réservé aux 2BTSIDA 2018- 2019Page 47
Algèbre Relationnelle et le SQL
2019
3- La création des relations entre les tables
Avant de commercer à créer les relations entre les tables conformément au modèle
logique des données, les tables elles-mêmes doivent d'abord être créées. Pour notre
cours, il y a deux tables : Agent et Véhicule. Nous supposons qu'elles ont déjà été
créées (chapitre 3).
Sélectionnez le menu « Outils de base de données »
Cliquez sur l’icône Relations
Dans la nouvelle barre qui apparaît, cliquez sur
Sélectionnez chaque table dans la fenêtre « Afficher la table » et cliquez sur le
bouton Ajouter, puis Fermer.
Établir la relation entre les tables Agent et Véhicule. Pour se faire, faire glisser le
champ N°Agent de la table Agent vers N°Agent de la table Véhicule et relâchez.
4- Les règles d’intégrité
À chaque fois qu'une relation entre deux tables est établie, une boîte de dialogue
apparait afin de préciser les options nécessaires au type de la relation établi.
Document Réservé aux 2BTSIDA 2018- 2019Page 48
Algèbre Relationnelle et le SQL
2019
Par le simple fait d'inclure des clés étrangères dans une table, Access ne reconnaît
pas encore une relation entre les tables. Access ne sait par exemple pas
automatiquement que le champ N°Chambre de la table Réservations fait référence à la
clé primaire N°Chambre de la table Chambres. A l'aide de la fenêtre des Relations, on
peut indiquer à Access les clés étrangères et leurs clés primaires associées, et ainsi
définir les relations entre les tables.
Relations entre les tables
La documentation d’Access nous dit que le fait d'établir des relations simples entre
des tables, nous facilite en outre la création de requêtes multi table. Nous allons
vérifier cette affirmation plus tard dans la partie Activités de ce TP.
Document Réservé aux 2BTSIDA 2018- 2019Page 49
Algèbre Relationnelle et le SQL
2019
L'intégrité référentielle
Un avantage incontestable de la fenêtre Relations est la possibilité de définir ce qu'on
appelle l'intégrité référentielle pour une relation donnée.
Par contrainte d'intégrité référentielle, on entend l'obligation qu'à chaque valeur de la
clé étrangère corresponde une et une seule valeur de la clé primaire associée. Cette
obligation doit toujours être vérifiée lors de l'ajout, de la suppression ou de la
modification de données.
Access nous offre plusieurs possibilités pour garantir à tout moment l'intégrité
référentielle des données d'une BD.
Cascade des opérations vers les clés étrangères correspondantes : Une
modification d'une clé primaire aurait comme conséquence la modification de
toutes les clés étrangères correspondantes. Une suppression d'une clé primaire
par exemple aurait comme conséquence la suppression automatique de tous les
enregistrements dont la clé étrangère a la même valeur. Cette option est à utiliser
avec précaution !!!
Dans notre cas, nous allons appliquer toutes les trois règles.
Terminez par la seconde relation entre les tables Clients et Réservations par le
biais des champs Numclient des deux côtés.
Appliquez les 3 règles d’intégrités.
Validez.
Remarques : il s’agit de deux relations un-à-plusieurs (1-N).
5- Les manipulations importantes sur les relations à savoir
Pour effectuer des opérations sur les relations de la base de données, il faut au
préalable afficher les relations.
Apparaît un menu supplémentaire Création qui permet de faire des manipulations sur
les relations :
Document Réservé aux 2BTSIDA 2018- 2019Page 50
Algèbre Relationnelle et le SQL
2019
Ouvrir la fenêtre Relations
Ajouter une table dans la fenêtre Relations
Effacer une table de la fenêtre Relations
Définir une relation entre deux tables
Effacer une relation existante
Modifier une relation existante
Forcer le respect de l'intégrité référentielle
Document Réservé aux 2BTSIDA 2018- 2019Page 51
Algèbre Relationnelle et le SQL
2019
Chapitre 9: Série d'exercices
Exercice N°1
Soit le MLDR suivant:
Avion (Numav, Nomav, Capacité);
Vol (Numvol, Vildepart, Vilarrivée, Heurdepart, Heurarrivée, #Numpl, #Numav)
Pilote (Numpl, Nom, Prénom, Nationalité, Salaire, Sexe, âge, fonction, ville)
1- Reconstruire le Mcd
2- Trouver en Algèbre Relationnelle puis traduire en SQL les requêtes suivantes:
a- Les pilotes de Bouaké
En Al R0= Pilote; R1= Sélection (R0; ville= "Bouaké); R2= Projection (R1; Numpl, Nom)
En SQL: Select Numpl, Nom from Pilote Where [Link]= 'Bouaké';
b- liste des vols des pilotes dans des avions transportant plus de 200 personnes
En AL:R0=Vol * Avion ([Link]=[Link])
R1=Restriction (R0>200); R2= Projection (R1;Numpl);
En SQL: Select Numpl from Avion, Vol Where ([Link]=[Link]) and
[Link]é>200;
c- Trouver le Salaire moyen des pilotes
En AL R0=Pilote; R1= Projection (R0; Moyenne (salaire));
En SQL: Select Avg (salaire) from Pilote;
d- Quelle est la somme perçue par chaque pilote
AL: R0= Pilote; R1= Projection (R0; Numpl, Nom, Prénom, Somme (salaire))
En SQL: Select Numpl, Nom, Prénom, Sum (salaire) from Pilote;
e- Liste des noms et prénoms des non nationaux;
En AL: R0= Pilote; R1= Sélection (R0; Nationalité <>"Ivoirienne");
R2= Projection (R1; Nom, Prénom);
En SQL: Select Nom, Prénom from Pilote Where ([Link]é<>'Ivoirienne');
Document Réservé aux 2BTSIDA 2018- 2019Page 52
Algèbre Relationnelle et le SQL
2019
d- De combien dispose la compagnie?
En AL: R0= Pilote; R1= Projection (R0;Comptage (Numpl));
ou R1= Comptage (R0; Numpl)
En SQL: Select count (*) from Pilote;
e- Afficher la liste des noms des pilotes partant après 8h dans des avions de plus
500 places.
En AL: R0=Avion*Pilote*Vol ([Link]=[Link] et [Link]=[Link])
R1= Sélection (R0; Heurdepart > 8 et Capacité > 500);
R2= Projection (R1; Nom);
En SQL: Select Nom from Avion, Pilote, Vol Where (Heurdepart > 8) and (Capacité
>500) and ([Link]=[Link]) and ([Link]=[Link]);
Exo N°2
Un organisme de gestion de spectacles, de salles de concert et de vente de billets de
spectacles gère une base de données dont le schéma relationnel est le suivant :
Spectacle (Spectacle_ID, Titre, DateDéb, Durée, #Salle_ID, Chanteur)
Concert (Concert_ID, Date, Heure, #Spectacle_ID)
Salle (Salle_ID, Nom, Adresse, Capacité)
Billet (Billet_ID, #Concert_ID, Num_Place, Catégorie, Prix)
Vente (Vente_ID, Date_Vente, Billet_ID, MoyenPaiement)
Trouver en Algèbre Relationnelle
1- Quelles sont les dates du concert d'Alpha au Zénith ?
R0=Spectacle*Concert*Salle [Spectacle_ID=Spectacle_ID et Salle_ID= Salle_ID]
R1= SELECTION (R0; Chanteur='Alpha' et Nom='Zénith')
R2=PROJECTION (R1; Date)
2- Quels sont les chanteurs n'ayant jamais réalisé de concert à la Cygale ?
R0= Spectacle; R1= Salle;
R2=R0*R1 [Spectacle_ID= Spectacle_ID]
R3= SELECTION (R2; Nom="Cygale")
Document Réservé aux 2BTSIDA 2018- 2019Page 53
Algèbre Relationnelle et le SQL
2019
R4=R0-R3
R5= PROJECTION (R4; Chanteur)
3- Quels sont les chanteurs ayant réalisé au moins un concert dans toutes les salles?
R0= Salle; R1=Spectacle
R2=R0*R1 [Salle_ID=Salle_ID]
4- liste des billets payés par chèque
R0= Vente; R1= SELECTION (R0; MoyenPaiement="Chèque")
R2=PROJECTION (R1; Billet_ID)
5- trouver le nombre total de billets vendus
R0=Vente; R1= Comptage (R0; Billet_ID)
6- afficher le nombre total de billets invendus
R0=Billet; R01=Vente;
R1=PROJECTION (R0;Billet_ID)
R2=PROJECTION (R01;Billet_ID)
R3=R1-R2; R4=comptage (R3;Billet_ID)
Document Réservé aux 2BTSIDA 2018- 2019Page 54
Algèbre Relationnelle et le SQL
2019
Exo N°3
Client (Numclt, Nom)
Commande (Codecom, date)
Produit (Refprod, désignation, prix)
Posséder (Numclt, Codecom, Refprod, quantité)
1- Appliquer les règles de normalisation, de vérification et de décomposition pour
trouver le nouveau MCD et d'en déduire le MLD
2- A partir des requêtes suivantes, écrire en SQL ou Algèbre Relationnelle
a- liste des clients n'ayant effectués aucune commande le 22/11/1990
b- liste des savons commandés
c- accorder une réduction de 15fcfa sur tous les articles
Correction
1- Numclt, Codecom, Refprod quantité n'est pas une dépendance
fonctionnelle exacte car la quantité commandée ne dépend pas du Numclt. Ainsi
posséder n'est pas en 2FN, donc pas en 3FN. En appliquant les règles de
normalisation, l'on obtient la DF suivante:
Codecom, Refprod quantité;
Ainsi le nouveau MLD sera:
Client (Numclt, Nom)
Commande (Codecom, date, #Numclt)
Produit (Refprod, désignation, prix)
Posséder (Codecom, Refprod, quantité)
2- les requêtes
a- R0= Client; R1=Commande; R2= Client* Commande [Numclt=Numclt]
R3= Sélection (R2; date='22/11/1990'); R4=R0-R3
b- R0=Produit*Posséder [Refprod=Refprod]
R1= Restriction (R0; désignation="savon")
Document Réservé aux 2BTSIDA 2018- 2019Page 55
Algèbre Relationnelle et le SQL
2019
R2= Projection (R1; Refprod, désignation)
c- R0=Produit; R1= Projection (R0;prix=prix-15)
Exercice N°4
Etudiant (Matricule, Nom, Prénom, Sexe, Âge, Filière);
Versement (Codvers, Montant, Libellé, Datv, #Matricule);
1- Quelle est la liste des Noms des femmes d'IDA
Select Nom from Etudiant Where ([Link]='F') and ([Link]ère='IDA');
2- Afficher le Total versé par étudiant
Select [Link], Sum([Link]) from Versement, Etudiant Where
([Link]= [Link]) Group by [Link];
3- Quel est l'étudiant qui n'a pas de nom?
Select [Link] from Etudiant Where [Link] is Null;
4- Réduire l'âge des étudiants de 5 ans
Update Etudiant Set Âge= Âge-5;
5- Total des entrées appelé Bilan annuel
Select Sum ([Link]) as Bilan annuel from Versement;
6- Liste des noms qui ont le même versement que Digbeu Siriki
Select [Link] from Etudiant, Versement Where
([Link]=[Link]) and [Link]= (Select
[Link] from Etudiant, Versement Where
([Link]=[Link]) and (Nom='Digbeu') and (Prénom='Siriki'));
7- Afficher les versements de 20000, 30000 et 50000 FCFA
Select [Link]é from Versement [Link] in (20000,30000, 50000);
8- Les étudiants dont l'âge varie entre 20 et 25 ans
Select * from Etudiant Where Etudiant.Âge between 20 and 25;
Ou Select * from Etudiant Where Etudiant.Âge >=20 and Etudiant.Âge<= 25;
9- Créer la table Etudiant
(Matricule Varchar Not Null Primary Key,
Nom Varchar,
Document Réservé aux 2BTSIDA 2018- 2019Page 56
Algèbre Relationnelle et le SQL
2019
Prénom Varchar,
Sexe Varchar,
Âge Integer
Filière);
10- Créons la table Facture
(Codvers Varchar Not Null Primary Key,
Montant Integer,
Libellé Varchar,
Datv Date,
Numfact Varchar
Foreign Key (Numfact) references Etudiant);
11- Insérer l'étudiante Yao Mariam en Gescom ayant 23 ans avec le code A12
Insert Into Etudiant values ('A12', 'Yao', 'Mariam', 'F', 22, 'Gescom');
12- Liste commune des Kouakou et Kouassi
Select * from Etudiant Where ([Link] ='Kouakou' or [Link]='Kouassi');
13- Réduire le versement du 23/11/2018 de Kamagaté Aya de 20000 FCFA
Update Etudiant, Versement set [Link]= [Link]-20000 Where
([Link]=[Link]) and ([Link]=#23/11/2018#) and
([Link]='Kamagaté') and (Prénom='Aya');
14- Supprimer l'attribut Filière de la relation Etudiant
Alter Table Etudiant drop Filière;
15- Ajouter la colonne Téléphone à Etudiant
Alter Table Etudiant ADD Téléphone Varchar;
16- liste des étudiants qui sont en IDA ou SEI
Select * from Etudiant Where ([Link]ère='IDA' or [Link]ère='SEI');
Ou
Select * from Etudiant Where ([Link]ère='IDA');
Union
Select * from Etudiant Where ([Link]ère='SEI');
Document Réservé aux 2BTSIDA 2018- 2019Page 57
Algèbre Relationnelle et le SQL
2019
17- Qui sont à la fois en IDA et en SEI?
Select * from Etudiant Where ([Link]ère='IDA');
Intersect
Select * from Etudiant Where ([Link]ère='SEI');
18- Ceux qui n'ont jamais versés
Select * from Etudiant;
Minus
Select * from Etudiant, Versement Where ([Link]=[Link]);
Document Réservé aux 2BTSIDA 2018- 2019Page 58
Algèbre Relationnelle et le SQL
2019
Document Réservé aux 2BTSIDA 2018- 2019Page 59