Vous êtes sur la page 1sur 59

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
2.FN 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 1.Id= Table2.Id;

Ou

Select… from Table 1 Inner Join Table 2 Where Table 1.Id= Table 2.Id;

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 Client.Numclt= Commande.Numclt;

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
Taxe.Coddde=Relance Taxe.Coddde) and (Personne.Codpers=Demande
Taxe.Codpers);

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 Pilote.ville= 'Bouaké';

b- liste des vols des pilotes dans des avions transportant plus de 200 personnes

En AL:R0=Vol * Avion (Avion.Numav=Vol.Numav)

R1=Restriction (R0>200); R2= Projection (R1;Numpl);

En SQL: Select Numpl from Avion, Vol Where (Avion.Numav=Vol.Numav) and


Avion.Capacité>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 (Pilote.Nationalité<>'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 (Avion.Numav=Vol.Numav et Pilote.Numpl=Vol.Numpl)

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 (Avion.Numav=Vol.Numav) and (Pilote.Numpl=Vol.Numpl);

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 (Etudiant.Sexe='F') and (Etudiant.Filière='IDA');

2- Afficher le Total versé par étudiant

Select Etudiant.Matricule, Sum(Versement.Montant) from Versement, Etudiant Where


(Etudiant.Matricule= Versement.Matricule) Group by Versement.Matricule;

3- Quel est l'étudiant qui n'a pas de nom?

Select Etudiant.Nom from Etudiant Where Etudiant.Nom 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 (Versement.Montant) as Bilan annuel from Versement;

6- Liste des noms qui ont le même versement que Digbeu Siriki

Select Etudiant.Nom from Etudiant, Versement Where


(Etudiant.Matricule=Versement.Matricule) and Versement.Montant= (Select
Versement.Montant from Etudiant, Versement Where
(Etudiant.Matricule=Versement.Matricule) and (Nom='Digbeu') and (Prénom='Siriki'));

7- Afficher les versements de 20000, 30000 et 50000 FCFA

Select Versement.Libellé from Versement Versement.Montant 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 (Etudiant.Nom ='Kouakou' or Etudiant.Nom='Kouassi');

13- Réduire le versement du 23/11/2018 de Kamagaté Aya de 20000 FCFA

Update Etudiant, Versement set Versement.Montant= Versement.Montant-20000 Where


(Etudiant.Matricule=Versement.Matricule) and (Versement.Datv=#23/11/2018#) and
(Etudiant.Nom='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 (Etudiant.Filière='IDA' or Etudiant.Filière='SEI');

Ou

Select * from Etudiant Where (Etudiant.Filière='IDA');

Union

Select * from Etudiant Where (Etudiant.Filiè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 (Etudiant.Filière='IDA');

Intersect

Select * from Etudiant Where (Etudiant.Filière='SEI');

18- Ceux qui n'ont jamais versés

Select * from Etudiant;

Minus

Select * from Etudiant, Versement Where (Etudiant.Matricule=Versement.Matricule);

Document Réservé aux 2BTSIDA 2018- 2019Page 58


Algèbre Relationnelle et le SQL
2019

Document Réservé aux 2BTSIDA 2018- 2019Page 59

Vous aimerez peut-être aussi