Base de Donnees Sil 1

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 75

07/11/2023

BASE DE DONNEES (Niveau 1)


✓ Cours
✓ Exercices d’application
résolus
✓ Travaux Pratiques

Enseignant : ZINSOU Mensah


Contact : 97478114 / 95714195
E-mail : [email protected]
CHAPITRE 1 : GÉNÉRALITÉS SUR LES BASES DE
DONNÉES

INTRODUCTION
Dans les formes traditionnelles de l’informatique, les données sont stockées
sur des supports constituants les fichiers. Ces fichiers sont construits pour
répondre aux besoins des applications informatiques. Leur exploitation connaît
des difficultés liées au fait qu'ils sont utilisés isolement et indépendamment les
uns des autres ; ceci est d'une part coûteux en moyen de stockage de données
et d'autre part pose le problème de cohérence entre les données car la mise à
jour d’une même donnée localisée dans plusieurs fichiers utilisés, par des
applications différentes, peut ne pas être simultanée.
Aujourd’hui, la plupart des utilisateurs ne veulent plus d'un tel système
d’information constitué d’un ensemble de fichiers inflexibles et de données
inaccessibles. Il existe aujourd’hui des systèmes de gestion de base de données
basés sur des langages d'accès puissants.
Dans le déroulement de ce chapitre, nous essayerons de définir ce que c’est
qu'une base de données et les différentes étapes à suivre pour sa mise en
œuvre. On cherchera ensuite à connaître l’utilité des bases de données ; ce que
c’est qu’un système de gestion de base de données, ses principes et ses
objectifs.
I- LES BASES DE DONNÉES
A- Qu'est-ce qu'une base de données ?
Une base de données (Data Base, en Anglais) est un ensemble structuré de
données enregistrées, avec le moins de redondance possible, dans un
ordinateur et accessibles de façon sélective par plusieurs utilisateurs.

Réalisé par ZINSOU Mensah 1


Ces données doivent pouvoir être utilisées par des programmes, par des
utilisateurs différents.
On parle généralement de système d’information pour désigner toute la
structure regroupant les moyens mis en place pour pouvoir partager les
données.
B- Utilité d’une base de données
Une base de données permet de mettre les données à la disposition des
utilisateurs pour une consultation, une saisie ou bien une mise à jour tout en
s’assurant des droits accordés à ces derniers. Cela est d’autant plus utile
lorsque les données informatiques à gérer sont de plus en plus nombreuses.
L’avantage majeur de l’utilisation des bases de données est la possibilité de
pouvoir être utilisée par plusieurs utilisateurs simultanément.
C- Système de gestion de base de données (SGBD)
Afin de pouvoir contrôler les données ainsi que les utilisateurs, le besoin d'un
système de gestion de base de données s'est fait vite ressentir. La gestion se
fait grâce à un système appelé Système de Gestion de Base de Données (SGBD).
Une fois la base de données spécifiée, on peut y insérer les données, les
récupérer, les modifier ou les détruire : c’est ce qu'on appelle manipuler les
données.
D- Principaux objectifs d'un système de gestion de base de données
• Permettre l’accès efficace aux données de façon simple.
• Autoriser un accès aux données à plusieurs utilisateurs de manière
simultanée.
• Manipuler les données présentes dans la base.
• Permettre le partage des données entre les programmes.
• Assurer la sécurité des données.
• Faciliter une administration centralisée des données.

Réalisé par ZINSOU Mensah 2


II- MISE EN ŒUVRE D'UNE BASE DE DONNÉES
La mise en œuvre d’une base de données fiable et cohérente passe d'abord par
l'une des phases importantes qu'est l’analyse des données (Confère cours de
MERISE).
En effet, cette phase est indispensable car les résultats qui seront obtenus
serviront de base pour la conception proprement dite de la base de données à
mettre en place. Il faut donc éviter de bâcler cette étape !
Pour bien réussir cette phase, il existe une démarche classique à suivre. Cette
démarche permettra d'aboutir à deux schémas importants : le schéma
conceptuel des données (SCD) et le schéma logique relationnel (SLR).
La démarche à suivre est la suivante :
• Élaborer le dictionnaire des données.
• Élaborer la liste des dépendances fonctionnelles élémentaires et directes
encore appelée couverture minimale.
• Représenter le schéma conceptuel des données correspondant.
• Déduire le Schéma Relationnel des Données (SRD) à partir de Schéma
Conceptuel des Données (SCD).
• Présenter un Schéma Physique Relationnel (SPR) correspondant.

Réalisé par ZINSOU Mensah 3


CHAPITRE 2 : BASE DE DONNÉES RELATIONNELLE :
ÉTUDE DU LANGAGE ALGÉBRIQUE

INTRODUCTION
Un modèle de données est un ensemble de concepts et de règles permettant
de décrire les données. Il existe généralement trois modèles de données à
savoir : le modèle hiérarchique, le modèle réseau et le modèle rationnel.
C’est l’étude de ce dernier qui fera l’objet de ce chapitre. Il a été (modèle
rationnel) inventé par CODD en 1970 et est basé sur de concepts très simples. Il
lui est associé une théorie qui ne peut être séparée du modèle : c’est la théorie
de la normalisation des relations dont le but est d’éliminer les données
redondantes et de mieux comprendre la structure des données.
I- LES DIFFÉRENTS MODÈLES DE DONNÉES
Le principal objectif est de rendre indépendant les données vis-à-vis des
applications. L’accès à ces données par ces applications pose souvent un
certain nombre de problèmes. Pour simplifier ou réduire ces problèmes
d’accès, plusieurs modèles logiques de données ont vu le jour. On distingue par
ordre chronologique :
A- Le Modèle Hiérarchique
Historiquement premier, il est constitué d’une structure simple à gérer. Dans
cette structure, chaque élément n’a qu’un seul supérieur ; un tel modèle à un
nombre de communication limitée. Il n’y a aucune connexion.
B- Le Modèle Réseau
Le modèle réseau est une extension du modèle précédent. Il permet d'établir
les connexions entre les différents éléments. De cette manière, on dispose d'un
plus grand nombre d'interrogations possible mais elles doivent être toujours
prévues lors de la construction de la base de données.

Réalisé par ZINSOU Mensah 4


C- Le Modèle Relationnel
Le modèle relationnel permet de se libérer de la contrainte suivante : connaître
à l'avance les interrogations que l'on effectuera. Ainsi, les données sont
stockées sous forme de relation dans les "tables" qui deviendront par la suite
des fichiers. Ce type de structure permet d'établir des connexions au moment
de l'exécution des requêtes. On pourra donc effectuer toute sorte
d'interrogation plus ou moins complexe. L'accès aux bases de données
relationnelles s'effectue en appliquant les trois opérations de base à savoir : la
sélection, la jointure et la projection.
II- ÉTUDE DES DÉPENDANCES FONCTIONNELLES
Une dépendance fonctionnelle est un outil clé permettant de déterminer les
liens possibles qui existent entre les propriétés, de nature élémentaire du
dictionnaire des données, afin de les structurer et d’éviter ainsi les
redondances qui compliquent la mise à jour des bases de données.
On dit qu’une propriété B dépend fonctionnellement d’une autre propriété ou
groupe de propriétés S si et seulement si, à une valeur de S correspond une
seule valeur possible de B. On note :
S —→ B et on lit : "S détermine B" ou bien "B dépend de S"
(Source) (But)

Exemples
L’expression numcde → datecde signifie qu’à une valeur du numéro d’un bon
de commande correspond une seule valeur de la date de commande ; l’inverse
n’est pas vrai car à une date donnée, on peut passer plusieurs commandes.
L’expression numcde → numcli signifie qu’à une valeur du numéro de
commande correspond une seule valeur du numéro de client ; l’inverse n’est
pas toujours vrai car un client peut passer plusieurs commandes.

Réalisé par ZINSOU Mensah 5


Dans l’expression numcde, codprod → qtecde, la seule valeur du numéro d’un
bon de commande ne peut déterminer la quantité de chaque produit figurant
sur ce bon ; il en est de même pour celle du code d’un produit.
En effet, si la propriété numcde déterminait qtecde alors quel que soit le
produit concerné par ce bon de commande, sa quantité aurait une même
valeur ; ce qui n’est pas toujours vrai.
De même, si la propriété codprod déterminait qtecde alors quel que soit le bon
de commande sur lequel se trouverait un produit quelconque, ce dernier aura
une même quantité ; ce qui n’est pas toujours vrai.
Ainsi donc, la connaissance d’une quantité commandée de chaque produit
figurant sur un bon de commande dépend à la fois du numéro de ce bon et du
code dudit produit.

A- Quelques propriétés des dépendances fonctionnelles


Dans ce paragraphe, les lettres S, S1, S2, B, B1 et B2 désignent des
propriétés.

1- La réflexivité
On a : S → S ou S1, S2 → S1 ou S1, S2 → S2
Exemple : numcli → numcli

2- L’additivité
Si S → B1 et S → B2 alors S → B1, B2
Exemple : numcli → nomcli et numcli → prencli
alors numcli → nomcli, prencli
3- La projection
Si S → B1, B2 alors S → B1 et S → B2
4- La transitivité
Si S → S1 et S1 → B alors S → B

Réalisé par ZINSOU Mensah 6


Exemple : numcde → numcli or numcli → nomcli
donc numcde → nomcli
Remarque : dans le schéma modélisant la dépendance fonctionnelle entre deux
ou plusieurs propriétés, la propriété ou groupe de propriétés ''source'' est
toujours un identifiant. Il est soit simple soit composé.

B- Types de dépendances fonctionnelles


• Dépendance fonctionnelle élémentaire (dfe)
Considérons deux propriétés S et B.
La propriété B est en dépendance fonctionnelle élémentaire de S si B dépend
de la totalité de S et non d’une partie de S.
On note : S dfe B
Remarque : lorsqu’il s’agit d’une dépendance fonctionnelle telle que la source
est constituée d’une seule propriété, cette dépendance fonctionnelle est
forcément élémentaire.
• Dépendance fonctionnelle élémentaire et directe (dfed)
Considérons trois propriétés S, B1 et B2.
La propriété B2 est en dépendance fonctionnelle élémentaire et directe de S si
elle est d’abord en dépendance fonctionnelle élémentaire de S et s’il n’existe
pas B2 en dépendance fonctionnelle de B1 et B1 en dépendance fonctionnelle
de S ; en d’autres termes, on élimine la transitivité.
On note : S dfed B2

Exemple : numcde dfed numcli

Réalisé par ZINSOU Mensah 7


C- Formes normales

Toute relation issue d’une dépendance fonctionnelle doit respecter trois


conditions pour être juste : on parle de formes normales. Elles ont pour objectif
de décomposer des relations sans perdre d’information.
1- La première forme normale
Une relation R est en première forme normale si tous ses attributs (propriétés)
sont élémentaires et si cette relation admet une clé (identifiant).
Exemple : soit la relation R1 (numcli, nomcli, prencli, sexcli) dont les éléments
sont tous élémentaires.
La propriété numcli est la clé de cette relation telle que numcli →nomcli,
prencli, sexcli ; on peut donc dire que la relation R1 est en première forme
normale.
2- La deuxième forme normale
Elle permet d’assurer l’élimination de certaines redondances en garantissant
qu’aucun attribut n’est déterminé seulement que par une partie de sa clé.
Une relation R est en deuxième forme normale si et seulement si :
- Elle est d’abord en première forme normale.
- Tout attribut "non clé" ne dépend d’une partie de la clé mais plutôt de sa
totalité.
Remarque : Toute relation qui est en 1ère forme normale et dont la clé est
simple est considérée comme une relation en 2ème forme normale.
On peut donc dire que la relation R1 est en 2ème forme normale.

3- La troisième forme normale


La 3ème forme normale permet d’assurer l’élimination des redondances dues
aux dépendances transitives.

Réalisé par ZINSOU Mensah 8


Une relation R est en 3ème forme normale si et seulement si elle est d’abord en
2ème forme normale et tout attribut non clé ne dépend d’un autre attribut non
clé.
EXERCICE D’APPLICATION RÉSOLU
Soit la base de données ci-après :
CONTRAT (NumContrat, DateContrat, #RefCouv)
COUVERTURE (RefCouv, Libelle, Delai)
CONCERNER (#Numero,#NumContrat, DateContrat)
MACHINE (Numero, DateAchat, TypeAmort, #CodeEmplac, #CodeZone)
EMPLACEMENT (CodeEmplac, Temperature, Wifi, #CodeZone)
ZONE (CodeZone, Libelle, NiveauSecurite)
NB : On suppose que tous les attributs de cette base de données sont de
nature élémentaire
Travail à faire
1- La base de données est-elle normalisée ? Justifiez votre réponse.
2- Si la base n’est pas normalisée, indiquez les différentes modifications à
apporter pour la rendre sous forme normale.
Résolution
1. Vérification du respect des différentes formes normales
• Règle 1 : pas d’attribut calculé ou composite et présence de clé primaire
pour chacune des relations de la base de données
Tous les attributs de la base sont de nature élémentaire et de plus, toutes les
relations ont chacune une clé primaire.
On peut donc conclure que toutes les relations de cette base de données sont
en première forme normale.
• Règle 2 : dépendance de la totalité des attributs de la clé primaire

Réalisé par ZINSOU Mensah 9


Toutes les relations de la base respectent cette règle à l’exception de la relation
CONCERNER.
En effet, dans la relation CONCERNER, l’attribut DateContrat ne dépend que de
la source NumContrat et non de la totalité de la clé primaire
Numero+NumContrat de cette relation. Il s’agit là d’une dépendance partielle
et non totale. La base ne respecte donc pas la deuxième forme normale.
• Règle 3 : Dépendance directe des attributs vis-à-vis de la clé primaire
Déjà que la base ne respecte pas la deuxième forme normale à travers l’étude
des dépendances de la relation CONCERNER, elle ne peut donc respecter la
troisième forme normale.
De plus, dans la relation MACHINE, les attributs #CodeEmplac et #CodeZone
dépendent tous de la clé primaire Numero ; or dans la relation EMPLACEMENT
de la même base de données, l’attribut #CodeZone dépend de l’attribut
#CodeEmplac. On peut donc affirmer que la dépendance de l’attribut
#CodeZone par rapport à la clé primaire Numero n’est pas directe dans la
relation MACHINE.

2. Différentes modifications nécessaires à apporter


• Pour le respect de la deuxième forme normale, il convient de supprimer
l’attribut DateContrat de cette relation. On aura donc la relation :
CONCERNER (#Numero,#NumContrat)
• Pour le respect de la troisième forme normale, il conviendra de supprimer
l’attribut #CodeZone de la relation MACHINE. On aura donc :
MACHINE (Numero, DateAchat, TypeAmort, #CodeEmplac)

Réalisé par ZINSOU Mensah 10


III- ÉTUDE DU LANGAGE ALGÉBRIQUE
Le langage algébrique est un outil préalable au niveau opérationnel des
traitements permettant de formaliser les opérations qui peuvent être réalisées
sur des relations définies au niveau logique.
Bien formuler l’enchainement des opérations à effectuer sur les relations,
permet de préparer la manipulation des données présentes dans la base
relationnelle.
A- Qu’est-ce qu’une relation ?
Une relation permet de décrire des entités et des associations par un ensemble
d’attributs. Sa syntaxe est :
Nom_RELATION (Clé primaire, Attribut(s), #clé(s) Etrangère(s))
Remarque : une relation peut être présentée sous forme d’une table contenant
un ensemble d’enregistrements. Dans cette table, chaque colonne correspond
à un attribut de l’objet décrit ; chaque ligne de cette table correspond à un
enregistrement (ou tuple).
Exemple : Considérons la table COMMANDE relative à la relation COMMANDE
du SLR précédent.
On a :
Table : COMMANDE
numcmde datecmde numcli
1425 04/11/2022 250
1426 04/11/2022 145
4241 07/12/2022 167

Réalisé par ZINSOU Mensah 11


EXERCICE D’APPLICATION RÉSOLU
On vous donne le Schéma Conceptuel des Données suivant :
CLIENT
COMMANDE
1,N 1,1
numcli PASSER
numcde
nomcli 0,N
datecde
prencli
CONCERNER
vilcli

telcli
0,1
1,N
1 ,1

ETABLIR COMPORTER
LIVRAISON
qtecde
numliv
1,1 dateliv
1,N
FACTURE
1,N
numfact PRODUIT

codprod 1,N
datefact LIVRER
desprod
qteliv
pu

Travail à faire :
1- Indiquer le nombre d’entité, le nombre d’association, d’association binaire,
d’association ternaire, d’association porteuse, d’association hiérarchique,
association non-hiérarchique, CIF et CIM que comporte le schéma.
2- Présenter le tableau de justification des cardinalités.
3- Déduire le Modèle Logique Relationnel des Données correspondant.
4- Présenter, dans un tableau, le degré, la clé primaire et la (les) clé(s)
étrangère(s) de chacune des relations du MLRD obtenu

Réalisé par ZINSOU Mensah 12


RESOLUTION
Rappel 1 :
Sur un schéma conceptuel des données (SCD) on observe deux types d’objets :
les entités et les associations.
Une entité est un objet concret ou abstrait décrit pas un ensemble de
propriétés dont l’une est son identifiant qui peut être soit un numéro, un code
ou une référence.
Le formalisme de l’entité est le suivant :

NOM DE L’ENTITE

identifiant
propriété 2
…………
…………
propriété N

Une association est un lien sémantique définit entre deux ou plusieurs entités.
Son nom est généralement un verbe à l’infinitif. Elle est dite binaire lorsqu’elle
relie exactement deux entités ; ternaire lorsqu’elle relie exactement trois
entités, N-aires lorsqu’elle relie plus de trois entités etc. Elle peut être porteuse
de propriété(s) ou non.
Sur les branches reliant une entité à une association on observe des
cardinalités.
On note deux types de cardinalités : la cardinalité minimum (0 ou 1) et la
cardinalité maximum (1 ou n).
Les différents types de cardinalités (CardMin, CardMax) possibles sont :

0 Couples de cardinalité et Interprétations


1
0,1 : au plus un(e)
1,1 : un(e) et un(e) seul(e)
1 n 0, N : aucun(e) ou plusieurs
1, N : un(e) ou plusieurs // au moins un(e)

Réalisé par ZINSOU Mensah 13


Le formalisme d’une association est le suivant :

Nom_ASSOCIATION Nom_ASSOCIATION
Ou
[Propriété 1] [Propriété]
[Propriété n]

Ou CIF

Une association est dite hiérarchique lorsqu’elle porte sur l’une de ses
branches le type de cardinalité 1,1 ou 0,1. Elle n’est jamais porteuse de
propriété. On la considère comme une contrainte d’intégrité fonctionnelle
(CIF).
Une CIM est une association non hiérarchique. Elle peut être porteuse de
propriété(s) ou non.
1- Dénombrement
On a :
Elément Nombre
Entité 05
Association 05
Association binaire 05
Association ternaire 00
Association porteuse 02
Association hiérarchique 03
Association non hiérarchique 02
CIF 03
CIM 02

Réalisé par ZINSOU Mensah 14


Rappel 2 :
2- Justification des cardinalités
Association Entités Cardi- Justification
nalité
CLIENT 1,N Un client passe au moins une commande
PASSER COMMANDE 1,1 Une commande est passée par un seul client
COMMANDE 0,N Une commande peut faire l’objet d’aucune ou
de plusieurs livraisons
CONCERNER
LIVRAISON 1,1 Une livraison ne concerne qu’une seule
commande
COMMANDE 0,1 Une commande fait l’objet d’au plus une facture
ETABLIR FACTURE 1,1 Une facture est établie pour une seule
commande
COMMANDE 1,N Une commande comporte au moins un produit
COMPORTER PRODUIT 1,N Un même produit, d’une quantité donnée, figure
sur au moins un bon de commande
LIVRER LIVRAISON 1,N une livraison peut faire l’objet d’au moins un
produit
PRODUIT 1,N Un même produit, d’une quantité donnée, figure
sur au moins un bon de livraison

Rappel 3 :
Règles de passage du MCD au MLDR
R1 : Toute entité du MCD devient, donne son nom à une relation du MLDR.
L’identifiant de cette entité devient la clé primaire et les propriétés de l’entité
deviennent les attributs.
Remarque : les entités n'ayant que leur identifiant comme élément ne sont pas
concernées par cette règle.

Réalisé par ZINSOU Mensah 15


R2 : Toute association hiérarchique ou CIF ou association Père-Fils induit la
création d’une clé étrangère dans la relation de "l’objet fils". Cette clé
étrangère, qui n’est rien d’autre que l’identifiant de "l’objet père", sera
précédée du symbole dièse (#).
Remarque : dans le cas d’une association hiérarchique portant sur ses deux branches les types de
cardinalités 1,1 et 0,1, la clé étrangère sera créée dans la relation de l’entité ayant pour cardinalité
1,1.

R3 : Toute association non hiérarchique du MCD donne son nom à une relation
du MLDR. La clé primaire de cette relation sera formée par concaténation
(c'est-à-dire par juxtaposition) des identifiants des entités reliées à cette
association. Chaque composant de cette clé formée sera précédé du symbole
dièse (#), sauf dans le cas où ce composant est issu d’une entité n’ayant que
son identifiant comme élément. Les propriétés éventuellement portées par
cette association deviennent les attributs de la relation obtenue.
3- Déduisons le MLDR correspondant au MCD
En appliquant de façon cumulative les règles de passage du MCD au MLDR,
On a :
CLIENT (numcli, nomcli, prencli, vilcli, telcli)
COMMANDE (numcde, datecde, #numcli)
LIVRAISON (numliv, dateliv, #numcde)
FACTURE (numfact, datefact, #numcde)
PRODUIT (codprod, desprod, pu)
COMPORTER (#numcde,#codprod, qtecde)
LIVRER (#numliv,#codprod, qteliv)

Réalisé par ZINSOU Mensah 16


4- Caractéristiques des relations
Relation Degré Clé primaire Clé étrangère
CLIENT 5 numcli -
COMMANDE 3 numcde numcli
LIVRAISON 3 numliv numcde
FACTURE 3 numfact numcde
PRODUIT 3 codprod -
COMPORTER 3 numcde + codprod numcde, codprod
LIVRER 3 numliv + codprod numliv, codprod

B- Les opérateurs algébriques


1- Opérateurs algébriques spécifiques
Ils travaillent sur les attributs ou sur les valeurs des attributs des relations. On
distingue deux types d’opérateurs spécifiques :
- les opérateurs portant sur une relation (SELECTION, PROJECTION)
- les opérateurs portant sur deux relations (JOINTURE, PROJECTION)
2- Opérateurs ensemblistes classiques
Ils travaillent sur des relations considérées comme des ensembles.
Un opérateur ensembliste peut porter sur des relations (UNION,
INTERSECTION, DIFFERENCE) ou non (PRODUIT CARTESIEN)
3- Requête
Pour manipuler les données présentes dans une base, les utilisateurs doivent
formuler des requêtes ou demandes pour avoir les résultats escomptés.
L’ensemble des résultats est présenté dans un tableau appelé table réponse.
Chaque colonne de cette table a pour nom un attribut de la relation projetée
ou une fonction de calcul. Une ligne de données de cette table correspond à un
résultat de la requête.

Réalisé par ZINSOU Mensah 17


C- Mise en œuvre des concepts
Exercice introductif : considérons les tables de données suivantes :
Table « DEVIS » Table « TYPE »
codcli codtype nomtype
coddev datdev
D1 12/12/2010 C01 E Entreprise

D2 12/12/2010 C02 O ONG

D3 12/12/2010 C03 P Particulier

Table « FAMILLE » Table « CONTENIR »


codfam nomfam
codprod coddev qtecmde
La P21 D1 2
Laitier
Fr Fromagerie P30 D1 5

Ch Charcuterie P24 D1 3

Al Alcool P22 D2 2

Pd Petit déjeuner P34 D2 1

Go Gourmandise P23 D2 10

Ep Epices P29 D2 1

P21 D3 1

P26 D3 1

P30 D3 2

Table « CLIENT »

codcli nomcli adrcli villecli codtype


C01 Maquis « La belle gueule » 03 BP 2020 Porto-Novo E

C02 Hôtel « L’Oriental » 08 BP 1200 Calavi E

C03 Hôtel « L’Amazone » Rue Saint Georges Parakou E

C04 100% Alphabétisation Rue de l’apprenant Cotonou O

C05 M. Adogonon Georges 04 BP 4004 Malanville P

C06 Sauver la Démocratie Boulevard Obama Lokossa O

Réalisé par ZINSOU Mensah 18


Table « PRODUIT »
codprod
nomprod puprod qtestock codfam
P21 Lait entier 800 40 La

P22 Vin de table rosé 6 700 14 Al

P23 Gruyère 5 400 23 Fr

P24 Biscuit 975 42 Go

P25 Pâte à tartiner 4 850 50 Pd

P26 Chocolat 2 175 35 Go

P27 Sucre roux 1 250 50 Pd

P28 Jambon 1 000 19 Ch

P29 Bière blonde 1 600 30 Al

P30 Jus de fruit 2 500 32 Pd

P31 Yaourt 275 126 La

P32 Fromage 800 54 Fr

P33 Confiture 1 850 34 Pd

P34 Viande de bœuf 2 500 21 Ch

P35 Huile d’arachide 2 175 87 Ep

P36 Raisin 4 500 32 Go

P37 Moutarde 1 200 76 Ep

P38 Nescafé 800 25 Pd

P39 Tomate en boîte 250 33 Ep

P40 Beurre pasteurisé 875 100 Pd

C-1. La projection
Elle consiste à choisir les noms des colonnes représentant chacun un attribut
exprimant ce que l’on désir obtenir.
Remarque :
La projection consiste en un découpage vertical d’une table de données à
projeter.

Réalisé par ZINSOU Mensah 19


La syntaxe est la suivante :

Relation_RESULTAT = PROJECTION RELATION_Projetée (Attribut projeté(s)).


Exemple 1 :
Ecrire en langage algébrique puis illustrer les requêtes suivantes.
a- Afficher les noms et adresse des clients.
b- Afficher la liste des devis.
RESOLUTION
a- Affichage des noms et adresse des clients
- Ecriture algébrique
Résultat = PROJECTION CLIENT (nomcli, adrcli)
- Illustration

nomcli adrcli

Maquis « La belle gueule » 03 BP 2020

Hôtel « L’Oriental » 08 BP 1200

Hôtel « L’Amazone » Rue Saint Georges

100% Alphabétisation Rue de l’apprenant

M. Adogonon Georges 04 BP 4004

Sauver la Démocratie Boulevard Obama

b- Affichage de la liste des devis.


- Ecriture algébrique
Résultat = PROJECTION DEVIS (codev, datdev, codcli)
- Illustration

coddev datdev codcli

D1 12/12/2010 C01

D2 12/12/2010 C02

D3 12/12/2010 C03

Réalisé par ZINSOU Mensah 20


C-2. La sélection
Elle consiste à sélectionner (ou à choisir) les lignes d’une ou de plusieurs tables
vérifiant simultanément toutes les conditions à préciser. Sa syntaxe est la
suivante :
Relation_Résultat = SELECTION RELATION (Condition(s))
Avec condition = Attribut/comparateur/Valeur.
On note généralement deux types de comparateurs : les comparateurs
relationnels (=, >, >=, <, <=, <>) et les comparateurs non relationnels (LIKE, IN,
BETWEEN, etc.)
Remarque : la sélection consiste en un découpage horizontal d’une table de
données.
Exemple 1 (suite)
c- Afficher les clients de code type O
Résolution
- Ecriture algébrique
Résultat = SELECTION CLIENT (codtype = "O")
- Illustration
codcli nomcli adrcli villecli codtype
C04 100% Alphabétisation Rue de l’apprenant Cotonou O
C06 Sauver la Démocratie Boulevard Obama Lokossa O

C-3. La jointure
C’est une opération fondamentale qui permet de réunir deux par deux des
tables.
En effet, cette opération permet de relier avec une relation d’égalité (on parle
d’équi-jointure) des tables qui ont au moins un attribut_Clé en commun.
La syntaxe est la suivante :

Réalisé par ZINSOU Mensah 21


Relation_Résultat = JOINTURE RELATION1, RELATION 2 (condition de jointure)
avec condition de jointure : RELATION 1.AttributClé=RELATION 2.AttributClé
Exemple 1 (suite)
d- Afficher la liste des devis avec toutes les informations des clients.
Résolution
- Ecriture algébrique
Résultat = JOINTURE DEVIS, CLIENT (DEVIS.codcli = CLIENT.codcli)
- Illustration

coddev datdev codcli codcli nomcli adrcli villecli codtype


C01 Maquis « La belle 03 BP Porto- E
D1 12/12/2010 C01
gueule » 2020 Novo
C02 Hôtel 08 BP Calavi E
D2 12/12/2010 C02
« L’Oriental » 1200
C03 Hôtel Rue Saint Parakou E
D3 12/12/2010 C03
« L’Amazone » Georges
Remarque :
On peut également effectuer la combinaison des opérateurs précédemment
étudiés.
Exemple 1 (suite)

e- Afficher les noms et prix des produits coûtant au moins 4000

Résolution
- Ecriture algébrique
R1 = SELECTION PRODUIT (puprod >= 4000)
Résultat = PROJECTION R1 (nomprod, puprod)
- Illustration

nomprod puprod
Vin de table rosé 6700
Gruyère 5400
Pâte à tartiner 4800
Raisin 4500

Réalisé par ZINSOU Mensah 22


Exemple 1 (suite)
f- Afficher les noms et les villes des clients habitant Cotonou.
Résolution
- Ecriture algébrique
R1 = SELECTION CLIENT (villecli = "Cotonou")
Résultat = PROJECTION R1 (nomcli, villecli)
- Illustration

nomcli villecli
100% Alphabétisation Cotonou

Exemple 1 (suite)
g- La liste des produits (nom et quantité en stock) dont la quantité en stock est
d’au moins 50.
Résolution
- Ecriture algébrique
R1 = SELECTION PRODUIT (qtestock >= 50)
Res = PROJECTION R1 (nomprod, qtestock)

- Illustration

nomprod qtestock
Pâte à tartiner 50
Sucre roux 50
Yaourt 126
Fromage 54
Huile d’arachide 87
Moutarde 76
Beurre pasteurisé 100

Réalisé par ZINSOU Mensah 23


Exemple 1 (suite)
h- Afficher les codes et quantités des produits figurant sur le devis de code D3.
Résolution
- Ecriture algébrique
R1 = SELECTION CONTENIR (coddev = "D3")
Res = PROJECTION R1 (codprod, qtecmde)
- Illustration

codprod qtecmde
P21 1
P26 1
P30 2
Exemple 1 (suite)
i- Afficher les codes, libellés et quantités des produits figurant sur le devis de
code D3.
Résolution
- Ecriture algébrique
R1 = SELECTION CONTENIR (coddev = "D3")
R2 = JOINTURE R1, PRODUIT (R1.codprod = PRODUIT.codprod)
Res = PROJECTION R2 (codprod, nomprod, qtecmde)
-Illustration

codprod nomprod qtecmde


P21 Lait entier 1
P26 Chocolat 1
P30 Jus de fruit 2

Réalisé par ZINSOU Mensah 24


CHAPITRE 3 : ÉTUDE DU LANGAGE SQL

I- GÉNÉRALITÉS
Une requête (query, en anglais) est une question posée à une base de données
concernant les informations qu’elle contient, par exemple une recherche
d’informations dans la base ou une action exécutée sur ces informations (ajout,
suppression, modification).
Toute requête se comprend sur la base d’un raisonnement en trois temps :
exprimer un besoin d’information ; programmer grâce au langage SQL le moyen
de satisfaire ce besoin ; obtenir la réponse formelle.
Le langage structuré de requêtes (SQL : Structured Query Language, en Anglais)
est un langage informatique (de type requête) standard et normalisé, destiné à
manipuler une base de données relationnelle à l’aide des commandes.
Le but ce chapitre est d’étudier les différentes commandes du langage SQL et
de les mettre en œuvre, par l’écriture des requêtes et leur exécution, en
utilisant Microsoft Access, un logiciel de type Système de Gestion de Base de
Données (SGBD).

II- ÉTUDE DE QUELQUES COMMANDES


➢ portant sur la structure d’une table
A- Création d’une table
La commande CREATE TABLE permet de créer une nouvelle table avec ses
éléments caractéristiques.
Exemple :
Créer la structure de la table FAMILLE comportant deux colonnes : la première
nommée codfam de type alphabétique et de longueur 2 ; la deuxième nommée
nomfam de type alphabétique et de longueur 15.
On aura :

Réalisé par ZINSOU Mensah 25


CREATE TABLE FAMILLE (codfam CHAR (02) NOT NULL PRIMARY KEY, nomfam
CHAR (15) NOT NULL) ;
B- Modification de table
La commande ALTER TABLE permet d’ajouter une nouvelle modification à la
structure d’une table.
Supposons qu’on veut ajouter une nouvelle colonne nommée col3 de type
entier et de valeur nulle à la table FAMILLE.
On aura : ALTER TABLE FAMILLE ADD col3 INTEGER NULL ;
C- Suppression de table
La commande DROP TABLE permet de supprimer définitivement une table avec
son contenu.
Pour supprimer la table FAMILLE, on aura DROP TABLE FAMILLE ;
➢ portant sur la manipulation des données d’une table
D- Insertion des données dans une table

La commande INSERT INTO permet d’ajouter un ou plusieurs enregistrements


à une table. Il existe deux types d’insertion :

- l’insertion mono ligne permettant d’ajouter un enregistrement à une


table ;
- l’insertion multi lignes permettant d’ajouter plusieurs enregistrements
dans une table par une requête.

La syntaxe d’une insertion mono ligne est la suivante

INSERT INTO NomTABLE (Attribut1, Attribut2,…)

VALUES (valeur1, Valeur2,…) ;

Exemple : Ajouter à la table FAMILLE un nouvel enregistrement tel que codfam


est ag et nomfam est Agrume.

INSERT INTO FAMILLE (codfam, nomfam)

Réalisé par ZINSOU Mensah 26


VALUES ("ag", "Agrume") ;

La syntaxe d’une insertion multi lignes est la suivante :


INSERT INTO NomTABLE (Attribut1, Attribut2,…)
SELECT (…… );

E- Mise à jour des données d’une table

La commande UPDATE permet de modifier une ou plusieurs lignes d’une table.


La syntaxe est la suivante :

UPDATE NomTABLE

SET Attribut1=Valeur1, Attribut2=Valeur2, …, Attribut=ValeurN

WHERE condition ;

Exemple :

- Augmenter le prix unitaire des produits de 2%.

UPDATE PRODUIT

SET puprod=puprod * 1.02 ;

- Remplacer la ville du client dont le code est C02 par Dassa

On aura : UPDATE CLIENT

SET villecli="Dassa"

WHERE CodCli="C02" ;

F- Suppression des données d’une table

La commande DELETE permet de supprimer un ou plusieurs enregistrements


d’une table. La syntaxe est la suivante :

DELETE FROM NomTABLE

WHERE condition ;

Réalisé par ZINSOU Mensah 27


Exemple : Supprimer le client dont le code est C02.

On aura :

DELETE FROM CLIENT

WHERE codcli="C02" ;

G- Interrogation de données : La commande SELECT


1. Syntaxe générale

La syntaxe de rédaction d’une requête SQL d’interrogation de données est :

SELECT <Liste des attributs projetés ou fonctions >


FROM <Liste des tables des attributs concernés par la requête>
WHERE <Liste des critères de jointure et de sélection>
GROUP BY <Attribut(s) de groupage>
HAVING <Critère de sélection portant sur un groupe d’enregistrements>
ORDER BY <Critère de tri ou d’ordre> ;
2. Le tableau suivant regroupe les différentes fonctions statistiques et
fonctions de temps utilisées en langage SQL

Fonctions statistiques Rôle

Renvoie le nombre de valeurs identiques de la


COUNT ([DISTINCT] attribut) colonne (ou de attribut) spécifié(e).
Si DISTINCT est précisé, les doublons sont éliminés.
Compte toutes les lignes d’une table suivant un
COUNT (*)
critère spécifié ou non.

Renvoie la moyenne des valeurs de la colonne (ou


AVG (attribut)
attribut) spécifié(e).

Renvoie la plus petite valeur de la colonne (ou


MIN (attribut)
attribut) spécifié(e).

Renvoie la plus grande valeur de la colonne (ou


MAX (attribut)
attribut) spécifié(e).

SUM (attribut) Renvoie la somme des valeurs de la colonne (ou

Réalisé par ZINSOU Mensah 28


attribut) spécifié(e).

Renvoie les n enregistrements (ou lignes) d’une


table contenant des données préalablement rangées
TOP n
dans un ordre quelconque (Croissant ou
décroissant).

Fonctions de temps Rôle

YEAR (« Expression de date ») Extrait l’année de la date spécifiée.

MONTH (« Expression de date ») Extrait le mois de la date spécifiée.

DAY (« Expression de date ») Extrait le jour de la date spécifiée.

3. Etude de quelques prédicats utilisés en langage SQL

a- Le prédicat NULL
Un attribut (une colonne, un champ...) peut avoir la valeur "NULL" soit en
raison d'information incomplète (la valeur n'était pas connue au moment de
la saisie des données), soit parce que la donnée n'est pas pertinente. La valeur
"NULL" est différente de la valeur par défaut d’un l'attribut : zéro pour un
attribut de type numérique et espace pour un attribut de type caractère.
La syntaxe est : IS NULL et sa négation IS NOT NULL.
b- Le prédicat IN
Il comporte une liste de valeurs et vérifie si une valeur particulière apparaît
sur cette liste.
La syntaxe est : IN (val1, val2, ...) et sa négation NOT IN (val1, val2, ...).
Lorsque la liste des valeurs est connue et fixe, le prédicat IN peut être
remplacé par une suite d'opérateurs logiques OR.
NB : lorsque la liste des valeurs n'est pas connue à priori, comme dans
certaines sous-interrogations (ou sous-requêtes), ce prédicat est nécessaire.

Réalisé par ZINSOU Mensah 29


c- Le prédicat LIKE
Ce prédicat permet de faire des recherches à l'intérieur d'une chaîne de
caractères lorsque l'on dispose d'informations incomplètes.
Il utilise deux (2) caractères génériques :
% ou * : utilisé pour représenter une chaîne de caractère de longueur
quelconque.
? : utilisé pour représenter un caractère unique.
La syntaxe est : LIKE 'Chaîne de recherche' et sa négation NOT LIKE 'Chaîne de
recherche'

d- Le prédicat BETWEEN
Il permet de comparer la valeur d'un champ par rapport à une borne inférieure
et une borne supérieure (bornes incluses).
NB : en fonction des conditions que l'on veut exprimer au niveau des valeurs
renvoyées par une requête, on peut utiliser les prédicats IN, ANY, ALL ou
EXISTS.

e- Le prédicat ANY
Il permet de vérifier si au moins une valeur de la liste spécifiée (ou renvoyée
par la sous-requête) satisfait la condition.

f- Le prédicat ALL
Permet de vérifier si la condition est réalisée pour toutes les valeurs de la liste
spécifiée (ou renvoyée par la sous-requête).
g- Le prédicat EXISTS
Si la sous-interrogation renvoie un résultat, la valeur retournée est "Vrai" sinon
la valeur "Faux" est retournée.
4. Notion d’alias

Réalisé par ZINSOU Mensah 30


Un alias permet de renommer une colonne ou une table. Cette opération est
utile lorsque l'on veut qu'une colonne ait un nom plus "parlant" ou qu'une
table puisse être manipulée plus facilement notamment quand il existe
différentes conditions de jointure.

- Alias de colonne (ou d’attribut)


Syntaxe : Col1 AS "Nom de la colonne"
Dans le résultat de la requête correspondante, Col1 sera remplacée par "Nom
de la colonne". Les griffes ne sont obligatoires que si le nom d'alias comporte
des espaces
- Alias de table Syntaxe : Table1 Alias1
Dans une requête, Alias1 sera identique à Table1
5. Notion de sous-requête
Les sous-interrogations, ou SELECT imbriqués, permettent de réaliser des
interrogations complexes qui nécessiteraient normalement plusieurs
interrogations avec stockage des résultats intermédiaires. Elles se caractérisent
par une interrogation (clause SELECT) inclue dans la clause WHERE, la clause
HAVING ou la clause SELECT d'une autre interrogation.
Remarque : dans le cas de sous-requêtes, seuls les attributs du premier SELECT
sont projetés. La sous-requête doit être placée entre parenthèses. Elle ne doit
pas comporter de clause ORDER BY, mais peut inclure les clauses GROUP BY et
HAVING.
Le résultat d’une sous-requête est utilisé par la requête du niveau supérieur.
Une sous- requête est exécutée avant la requête de niveau supérieur.

Réalisé par ZINSOU Mensah 31


III- MISE EN ŒUVRE D’UNE BASE DE DONNÉES AVEC MICROSOFT ACCESS

Travaux Pratiques N°1 : création d’une base de données avec Microsoft


Access
On vous fournit les informations des annexes ci-après :
Annexe 1 : Tables de données
Table : CLIENT
numcli nomcli prencli adrcli villecli

4010 AZONDE Jean 01 BP 4023 Cotonou

4011 VIVIME Léopold Tél. 95 06 11 11 Parakou

4012 LAWANI Johan 06 BP 004 Porto-Novo

4013 BALOGOUN Didier 04 BP 2024 Parakou

4014 ABALO Jérôme Tél. 97 06 38 18 Bohicon

4015 COCOU Yves Tél. 93 34 41 11 Porto-Novo

4016 DANSOU Côme Tél. 90 90 04 40 Cotonou

4017 AFANVI David 06 BP 3434 Porto-Novo

4018 FANOU Rolland 04 BP 444 Cotonou

4019 EFIOU Afi Tél. 95 90 01 01 Cotonou

4020 GANDONOU Rock Tél. 90 06 38 41 Bohicon

4021 GUEDE Zinsou 03 BP 2711 Cotonou

4022 ZANNOU Magloire 05 BP 3618 Bohicon

4023 MAMADOU Issifou 02 BP 4400 Natitingou

4024 PADONOU Irène Tél. 21 01 44 20 Lokossa

4025 OUINSOU Clotilde 01 BP 2100 Cotonou

4026 ALLE Constance 13, rue des Amazones Cotonou

4027 BEHANZIN Didier 13, rue des Amazones Cotonou

4028 EGNON Clémence Boulevard des Oliviers Parakou

4029 JOHNSON Matthieu Boulevard Saint Michel Cotonou

Réalisé par ZINSOU Mensah 32


Table : REPRESENTANT
numrep nomrep salbase tauxcom

1010 Zannou Dieudonné 50 000 0,15

1011 Kinto Robert 75 000 0,10

1012 Bamikpo Grégoire 60 000 0,20

1013 Ali Traoré 100 000 0,25

1014 Poupo Alagnon 80 000 0,15

1015 Bakary Séïbou 60 000 0,20

Table : COMMANDE
numcmde datecmde adrliv numcli numrep

550 13/06/2022 Grand Marché 4011 1010

551 13/06/2022 St Michel 4020 1010

552 13/06/2022 Tokpa Hoho 4013 1011

553 15/06/2022 Ganhito 4010 1015

554 15/06/2022 Godomey 4025 1012

555 16/06/2022 Wologuèdè 4021 1014

556 17/06/2022 Wologuèdè 4029 1014

557 17/06/2022 Grand Marché 4010 1013

558 18/06/2022 St Michel 4015 1010

559 18/06/2022 St Michel 4010 1012

560 19/06/2022 Grand Marché 4018 1010

561 13/06/2022 Grand Marché 4011 1010

562 21/06/2022 Vèdoko 4013 1011

563 21/06/2022 Agbodjèdo 4029 1014

Réalisé par ZINSOU Mensah 33


Table : PRODUIT
codprod libprod prixunit

P01 Pâte dentifrice 700

P02 Lait en poudre 2 800

P03 Fromage 600

P04 Lait en boîte 1 500

P05 Suze 5 800

P06 Pastis 3 500

P07 Rhum St James 6 000

P08 William Lawson’s 6 000

P09 Coca Cola 1 025

P10 Sucre roux 1 350

Table : DEPARTEMENT
coddep nomdep superficie

D01 Alibori 7 000

D02 Borgou 15 000

D03 Couffo 8 500

D04 Mono 9 000

D05 Collines 6 500

D06 Zou 12 000

D07 Atlantique 10 000

D08 Ouémé 8 500

D09 Plateau 6 000

D10 Donga 14 000

D11 Atacora 13 000

D12 Littoral 7 000

Réalisé par ZINSOU Mensah 34


Table : PROSPECTER
numrep coddep

1010 D08

1010 D09

1010 D11

1011 D03

1011 D11

1012 D04

1012 D10

1013 D01

1013 D02

1014 D11

1015 D06

1015 D07

Table : CONCERNER
numcmde codprod qtecmde

550 P03 50

550 P06 25

550 P09 28

551 P03 31

551 P08 13

552 P01 13

552 P03 18

552 P09 24

553 P02 25

554 P03 21

554 P08 9

555 P01 25

Réalisé par ZINSOU Mensah 35


555 P04 18

555 P06 18

555 P09 31

556 P02 10

556 P07 12

556 P01 30

557 P01 23

557 P05 8

557 P08 29

558 P06 8

558 P10 11

559 P02 12

559 P05 16

559 P07 8

560 P03 9

560 P04 12

560 P09 24

560 P10 11

562 P01 13

562 P03 15

563 P01 10

563 P02 14

563 P03 12

Réalisé par ZINSOU Mensah 36


Annexe 2 : Dictionnaire des données
Propriété Description Type
numcli Numéro du client N
nomcli Nom du client A
prencli Prénom du client A
adrcli Adresse du client AN
villecli Ville du client A
numrep Numéro du représentant N
nomrep Nom du représentant A
salbase Salaire de base du représentant N
tauxcom Taux de commission du représentant N
numcmde Numéro de la commande N
datecmde Date de la commande D
adrliv Adresse de livraison de la commande AN
codprod Code du produit AN
libprod Libellé du produit A
prixunit Prix unitaire du produit N
coddep Code du département AN
nomdep Nom du département A
superficie Superficie du département N
qtecmde Quantité commandée pour chaque produit N

Travail à Faire :
1- Utiliser le logiciel Microsoft Access pour créer une base de données nommée
"TP ACCESS" en se servant des tables de données ci-dessus.
2- Créer la structure des différentes tables.
3- Afficher toutes les tables précédemment créées.
4- Créer des liens possibles entre les tables affichées.
5- Insérer les données dans les tables.

Travaux Pratiques N°2 : création et exécution des requêtes sous SQL


A- REQUÊTES D’INTERROGATION DE DONNÉES
L’écriture en langage SQL des différentes requêtes d’interrogation de données
se fera à l’aide du tableau récapitulatif ci-après :

Réalisé par ZINSOU Mensah 37


SELECT Attributs projetés On indique les attributs ou fonctions qui
ou fonctions expriment les informations que l'on désire
obtenir à travers la demande formulée.

FROM Tables concernées On indique, de façon objective, les tables de


par la requête tous les attributs manipulés dans toute la
requête (au niveau de toutes les clauses à
l’exception de la clause FROM).

WHERE Critère(s) de Il y a critère de jointure si on a au moins


Jointure deux tables au niveau de la clause FROM. La
jointure se fait entre ces tables suivant
l’attribut Clé que les deux tables ont en
commun.

La syntaxe est
Table1.AttributClé=Table2.AttributClé

Critère(s) de Un critère de sélection de la clause WHERE Si la valeur de


Sélection porte sur un attribut de la base. Il indique les comparaison est unique et
conditions (ou restrictions) de réalisation entièrement connue, dans
des résultats de la requête. la base de données, sans
information incomplète,
Sa syntaxe est : on utilise les comparateurs
relationnels tels que =, <,
Attribut Comparateur Valeur
<=, >,>= et <> (différent
de).
NB : Formuler un critère de sélection au Si la valeur à comparer à
niveau de la clause WHERE revient à l'attribut de sélection
comparer une valeur à un attribut de comporte d'information
incomplète, on utilise
sélection
comme comparateur LIKE.
S'il s'agit d'un ensemble de
valeurs se trouvant dans
un intervalle fermé à
comparer à l'attribut de
sélection, on utilise
comme comparateur
BETWEEN
On n'est pas obligé de
compléter cet attribut à
ceux de la clause SELECT.

Réalisé par ZINSOU Mensah 38


GROUP BY Attribut(s) de Si dans la formulation de la requête, on Tout attribut de GROUP BY
groupage utilise des expressions qui annoncent un est également attribut de
regroupement des enregistrements de la SELECT et vice-versa. Il se
table des résultats suivant les valeurs d'un place généralement avant
(ou des) attribut(s) quelconque(s), cet (ou les autres attributs de
ces) attribut(s) sera (seront) placé(s) au SELECT.
Une fonction de calcul ne
niveau de la clause GROUP BY.
reste jamais au niveau de
la clause GROUP BY.
La présence simultanée
d’attributs et de fonctions
de calcul au niveau de la
clause SELECT entraîne un
regroupement (GROUP BY)
d’enregistrements suivant
la valeur de chacun de ces
attributs.

HAVING Critère de Tout critère de sélection formulé avec un Il est conseillé de


sélection lié à un attribut de groupage ou avec une fonction compléter aux éléments de
groupe de calcul doit se placer au niveau de la SELECT l'expression de la
d’enregistrements clause HAVING fonction utilisée pour
formuler le critère se
trouvant au niveau de
HAVING

ORDER BY Critère de tri ou Si dans la formulation de la requête, on Il est conseillé de


d’ordre ou de utilise des expressions qui annoncent le compléter tout attribut de
rangement classement des enregistrements de la table la clause ORDER BY aux
des résultats suivant les valeurs d'un (ou attributs de SELECT. Cet
des) attribut(s) quelconque(s), cet (ou ces) attribut se place
attribut(s) sera (seront) placé(s) au niveau de généralement après les
la clause ORDER BY suivi(s) du mot clé ASC autres attributs de SELECT.
(ascendant) ou DESC (descendant)

Travail à faire : Ecrire, en langage algébrique et traduire en SQL, puis faire


exécuter avec Microsoft Access chacune des requêtes suivantes :
Requête 1 : Affichage des codes et noms de tous les produits.
- Ecriture algébrique
Résultat = PROJECTION PRODUIT (codprod, libprod)
- Ecriture de la requête en SQL
SELECT codprod, libprod
FROM PRODUIT;

Réalisé par ZINSOU Mensah 39


- Résultat attendu
Requête1
codprod libprod

P01 Pâte dentifrice

P02 Lait en poudre

P03 Fromage

P04 Lait en boîte

P05 Suze

P06 Pastis

P07 Rhum St James

P08 William Lawson’s

P09 Coca Cola

P10 Sucre roux

Requête 2 : Affichage des noms et adresses des clients.


- Ecriture algébrique
Résultat = PROJECTION CLIENT (nomcli, adrcli)
- Ecriture de la requête en SQL
SELECT nomcli, adrcli
FROM CLIENT;
- Résultat attendu
Requête2
nomcli adrcli

AZONDE 01 BP 4023

VIVIME Tél. 95 06 11 11

LAWANI 06 BP 004

BALOGOUN 04 BP 2024

ABALO Tél. 97 06 38 18

COCOU Tél. 93 34 41 11

DANSOU Tél. 90 90 04 40

Réalisé par ZINSOU Mensah 40


Requête2
nomcli adrcli

AFANVI 06 BP 3434

FANOU 04 BP 444

EFIOU Tél. 95 90 01 01

GANDONOU Tél. 90 06 38 41

GUEDE 03 BP 2711

ZANNOU 05 BP 3618

MAMADOU 02 BP 4400

PADONOU Tél. 21 01 44 20

OUINSOU 01 BP 2100

ALLE 13, rue des Amazones

BEHANZIN 13, rue des Amazones

EGNON Boulevard des Oliviers

JOHNSON Boulevard Saint Michel

Requête 3 : Liste de tous les produits.


- Ecriture algébrique
Résultat = PROJECTION PRODUIT (codprod, libprod, prixunit)
- Ecriture de la requête en SQL
SELECT codprod, libprod, prixunit SELECT *
FROM PRODUIT; OU
FROM PRODUIT;
- Résultat attendu
Requête3
NB : le symbole * placé au niveau de la clause SELECT remplace
codprod libprod prixunit tous les attributs de la table se trouvant au niveau de la clause
FROM
P01 Pâte dentifrice 700

P02 Lait en poudre 2800

P03 Fromage 600

P04 Lait en boîte 1500

Réalisé par ZINSOU Mensah 41


Requête3

codprod libprod prixunit

P05 Suze 5800

P06 Pastis 3500

P07 Rhum St James 6000

P08 William Lawson’s 6000

P09 Coca Cola 1025

P10 Sucre roux 1350

Requête 4 : Afficher, sans répétition, les villes d’habitation des clients.


- Ecriture algébrique
Résultat = PROJECTION CLIENT (UNIQUE villecli)
- Ecriture de la requête en SQL
SELECT DISTINCT villecli NB : le mot clé DISTINCT placé avant un attribut se trouvant au niveau
FROM CLIENT; de la clause SELECT, empêche la répétition des valeurs de cet attribut
lors de l’affichage
- Résultat attendu
Requête4
villecli

Bohicon

Cotonou

Lokossa

Natitingou

Parakou

Porto-Novo

Requête 5 : Liste des clients habitant Cotonou.


- Ecriture algébrique
R1 = SELECTION CLIENT (villecli = "Cotonou")
Résultat = PROJECTION R1 (numcli, nomcli, prencli, adrcli, villecli)

Réalisé par ZINSOU Mensah 42


- Ecriture de la requête en SQL
NB : on met la valeur d’un attribut de sélection entre griffes lorsque
SELECT * celle-ci comporte au moins un caractère non numérique ; c’est le cas
FROM CLIENT ici de la valeur Cotonou prise par l’attribut de sélection villecli.
WHERE villecli ="Cotonou";
- Résultat attendu
Requête5
numcli nomcli prencli adrcli villecli

4010 AZONDE Jean 01 BP 4023 Cotonou

4016 DANSOU Côme Tél. 90 90 04 40 Cotonou

4018 FANOU Rolland 04 BP 444 Cotonou

4019 EFIOU Afi Tél. 95 90 01 01 Cotonou

4021 GUEDE Zinsou 03 BP 2711 Cotonou

4025 OUINSOU Clotilde 01 BP 2100 Cotonou

4026 ALLE Constance 13, rue des Amazones Cotonou

4027 BEHANZIN Didier 13, rue des Amazones Cotonou

4029 JOHNSON Matthieu Boulevard Saint Michel Cotonou

Requête 6 : Les numéros et dates des commandes livrées au Grand Marché.


- Ecriture algébrique
R1 = SELECTION COMMANDE (adrliv = "Grand Marché")
Résultat = PROJECTION R1 (numcmde, datecmde)
- Ecriture de la requête en SQL
SELECT numcmde, datecmde
FROM COMMANDE
WHERE adrliv = "Grand Marché";
- Résultat attendu
Requête6
numcmde datecmde

550 13/06/2022

557 17/06/2022

560 19/06/2022

561 13/06/2022

Réalisé par ZINSOU Mensah 43


Requête 7 : Nom et prénom des clients habitant 13, rue des Amazones.
- Ecriture algébrique
R1 = SELECTION CLIENT (adrcli = "13, rue des Amazones")
Résultat = PROJECTION R1 (nomcli, prencli)
- Ecriture de la requête en SQL
SELECT nomcli, prencli
FROM CLIENT
WHERE adrcli = "13, rue des Amazones";
- Résultat attendu
Requête7
nomcli prencli

ALLE Constance

BEHANZIN Didier

Requête 8 : Liste des produits dont le nom commence par P.


- Ecriture algébrique
R1 = SELECTION PRODUIT (libprod COMME "P*")
Résultat = PROJECTION R1 (codprod, libprod, prixunit)
- Ecriture de la requête en SQL
SELECT * NB : Le prédicat LIKE est utilisé, comme un comparateur pour
FROM PRODUIT formuler un critère de sélection, lorsque la valeur de l’attribut de
sélection en question comporte des informations incomplètes. La
WHERE libprod LIKE "P*"; négation de ce prédicat est NOT LIKE.
- Résultat attendu A cet effet, on utilise le symbole * pour remplacer un groupe de
Requête8 caractères inconnus dans cette valeur de l’attribut de sélection.
codprod libprod prixunit Lorsqu’il s’agit d’un seul caractère inconnu, on utilise le symbole ?

P01 Pâte dentifrice 700

P06 Pastis 3500

Requête 9 : Nom et superficie des départements dont le 2ème caractère du nom


est O.
- Ecriture algébrique
R1 = SELECTION DEPARTEMENT (nomdep COMME "?o*")
Résultat = PROJECTION R1 (nomdep, superficie)
- Ecriture de la requête en SQL
SELECT nomdep, superficie
FROM DEPARTEMENT
WHERE nomdep LIKE "?o*";

Réalisé par ZINSOU Mensah 44


- Résultat attendu
Requête9
nomdep superficie

Borgou 15000

Couffo 8500

Mono 9000

Collines 6500

Zou 12000

Donga 14000

Requête 10 : Noms et adresses des clients dont l’adresse comporte le sigle "BP"
- Ecriture algébrique
R1 = SELECTION CLIENT (adrcli COMME "*BP*")
Résultat = PROJECTION R1 (nomcli, adrcli)
- Ecriture de la requête en SQL
SELECT nomcli, adrcli
FROM CLIENT
WHERE adrcli LIKE "*BP*";
- Résultat attendu
Requête10
nomcli adrcli

AZONDE 01 BP 4023

LAWANI 06 BP 004

BALOGOUN 04 BP 2024

AFANVI 06 BP 3434

FANOU 04 BP 444

GUEDE 03 BP 2711

ZANNOU 05 BP 3618

MAMADOU 02 BP 4400

OUINSOU 01 BP 2100

Réalisé par ZINSOU Mensah 45


Requête 11 : Liste des clients dont l’adresse ne comporte pas le sigle "BP"
- Ecriture algébrique
R1 = SELECTION CLIENT (adrcli PAS COMME "*BP*")
Résultat = PROJECTION R1 (numcli, nomcli, prencli, adrcli, villecli)
- Ecriture de la requête en SQL
SELECT *
FROM CLIENT
WHERE adrcli NOT LIKE "*BP*";
- Résultat attendu
Requête11

numcli nomcli prencli adrcli villecli

4011 VIVIME Léopold Tél. 95 06 11 11 Parakou

4014 ABALO Jérôme Tél. 97 06 38 18 Bohicon

4015 COCOU Yves Tél. 93 34 41 11 Porto-Novo

4016 DANSOU Côme Tél. 90 90 04 40 Cotonou

4019 EFIOU Afi Tél. 95 90 01 01 Cotonou

4020 GANDONOU Rock Tél. 90 06 38 41 Bohicon

4024 PADONOU Irène Tél. 21 01 44 20 Lokossa

4026 ALLE Constance 13, rue des Amazones Cotonou

4027 BEHANZIN Didier 13, rue des Amazones Cotonou

4028 EGNON Clémence Boulevard des Oliviers Parakou

4029 JOHNSON Matthieu Boulevard Saint Michel Cotonou

Requête 12 : Les dates des commandes passées par le client de numéro 4010
- Ecriture algébrique
R1 = SELECTION COMMANDE (numcli = 4010)
Résultat = PROJECTION R1 (UNIQUE datecmde)
- Ecriture de la requête en SQL
SELECT DISTINCT datecmde
FROM COMMANDE
WHERE numcli = 4010;

Réalisé par ZINSOU Mensah 46


- Résultat attendu
Requête12
datecmde

15/06/2022

17/06/2022

18/06/2022

Requête 13 : Affichage des noms et prix des produits coûtant moins de 3000
- Ecriture algébrique
R1 = SELECTION PRODUIT (prixunit < 3000)
Résultat = PROJECTION R1 (libprod, prixunit)
- Ecriture de la requête en SQL
SELECT libprod, prixunit
FROM PRODUIT
WHERE prixunit < 3000;
- Résultat attendu
Requête13
libprod prixunit

Pâte dentifrice 700

Lait en poudre 2800

Fromage 600

Lait en boîte 1500

Coca Cola 1025

Sucre roux 1350

Requête 14 : Les représentants dont le salaire de base est 60000


- Ecriture algébrique
R1 = SELECTION REPRESENTANT (salbase = 60000)
Résultat = PROJECTION R1 (numrep, nomrep, salbase, tauxcom)
- Ecriture de la requête en SQL
SELECT *
FROM REPRESENTANT
WHERE salbase = 60000;

Réalisé par ZINSOU Mensah 47


- Résultat attendu
Requête14

numrep nomrep salbase tauxcom

1012 Bamikpo Grégoire 60000 0,2

1015 Bakary Séïbou 60000 0,2

Requête 15 : Les produits dont le prix unitaire est différent de 5000


- Ecriture algébrique
R1 = SELECTION PRODUIT (prixunit <>5000)
Résultat = PROJECTION R1 (codprod, libprod, prixunit)
- Ecriture de la requête en SQL
SELECT *
FROM PRODUIT
WHERE prixunit <>5000;
- Résultat attendu
Requête15

codprod libprod prixunit

P01 Pâte dentifrice 700

P02 Lait en poudre 2800

P03 Fromage 600

P04 Lait en boîte 1500

P05 Suze 5800

P06 Pastis 3500

P07 Rhum St James 6000

P08 William Lawson’s 6000

P09 Coca Cola 1025

P10 Sucre roux 1350

Requête 16 : Liste des produits dont le prix unitaire est compris entre 2000 et
5000
- Ecriture algébrique
R1 = SELECTION PRODUIT (prixunit ENTRE 2000 ET 5000)
Résultat = PROJECTION R1 (codprod, libprod, prixunit)

Réalisé par ZINSOU Mensah 48


- Ecriture de la requête en SQL
SELECT *
FROM PRODUIT
WHERE prixunit BETWEEN 2000 And 5000;
- Résultat attendu NB : Le prédicat BETWEEN est utilisé, comme un comparateur pour
formuler un critère de sélection, lorsque l’attribut de sélection est
Requête16
susceptible de prendre des valeurs consécutives définies dans un
intervalle dont le début et la fin sont précisés. La négation de ce
codprod libprod prixunit prédicat est NOT BETWEEN.

P02 Lait en poudre 2800

P06 Pastis 3500

Requête 17 : La liste des représentants dont le salaire de base est compris


entre 75000 et 100000 avec indication du numéro, du nom et du salaire
de base.
- Ecriture algébrique
R1 = SELECTION REPRESENTANT (salbase ENTRE 75000 ET 100000)
Résultat = PROJECTION R1 (numrep, nomrep, salbase)
- Ecriture de la requête en SQL
SELECT numrep, nomrep, salbase
FROM REPRESENTANT
WHERE salbase BETWEEN 75000 And 100000;
- Résultat attendu
Requête17
numrep nomrep salbase

1011 KINTO Robert 75 000

1013 ALI Traoré 100000

1014 POUPO Alagnon 80000

Requête 18 : Numéros des commandes passées le 15 juin 2022


- Ecriture algébrique
R1 = SELECTION COMMANDE (datecmde = #15/06/2022#)
Résultat = PROJECTION R1 (numcmde)
- Ecriture de la requête en SQL
NB : toute valeur d’un attribut de type Date se présente sous
SELECT numcmde le format JJ/MM/AAAA. Elle est encadrée de part et d’autre
FROM COMMANDE par le symbole #.

WHERE datecmde = #15/06/2022#;

Réalisé par ZINSOU Mensah 49


- Résultat attendu
Requête18
numcmde

553

554

Requête 19 : Les adresses de livraison des commandes passées dans la 2ème


quinzaine de juin 2022.
- R1 = SELECTION COMMANDE (datecmde ENTRE #16/06/2022# ET
#30/06/2022#)
Résultat = PROJECTION R1 (UNIQUE adrliv)
- Ecriture de la requête en SQL
SELECT DISTINCT adrliv
FROM COMMANDE
WHERE datecmde BETWEEN #16/06/2022# And #30/06/2022#;
- Résultat attendu NB : il est nécessaire ici de précéder l’attribut adrliv du mot
Requête19 clé DISTINCT pour éviter la répétition d’une même valeur de
cet attribut car plusieurs commandes de même adresse de
adrliv livraison peuvent être livrées dans la période indiquée.

Agbodjèdo

Grand Marché

St Michel

Vèdoko

Wologuèdè

Requête 20 : Les numéros des commandes sur lesquelles la quantité


commandée de certains produits est comprise entre 10 et 20.
- R1 = SELECTION CONCERNER (qtecmde ENTRE 10 ET 20)
Résultat = PROJECTION R1 (UNIQUE numcmde)
- Ecriture de la requête en SQL
SELECT DISTINCT numcmde
FROM CONCERNER
WHERE qtecmde BETWEEN 10 And 20;

Réalisé par ZINSOU Mensah 50


- Résultat attendu
NB : il est nécessaire ici de précéder l’attribut numcmde du
Requête20
mot clé DISTINCT pour éviter la répétition d’une même valeur
numcmde de cet attribut car plusieurs produits inscrits sur un même bon
de commande peuvent avoir des quantités comprises entre
551 10 et 20.

552

555

556

558

559

560

562

563

Requête 21 : Les numéros des clients qui ont passé les commandes de numéros
551, 555 et 560.
- Ecriture en langage algébrique
R1 = SELECTION COMMANDE (numcmde = 551 OU numcmde = 555 OU
numcmde = 560)
Res = PROJECTION R1 (UNIQUE numcli)
- Ecriture de la requête en SQL
SELECT DISTINCT numcli
FROM COMMANDE
WHERE (numcmde = 551
OR numcmde = 555
OR numcmde = 560) ;
- Résultat attendu
Requête21
numcli

4020

4021

4018

Réalisé par ZINSOU Mensah 51


Requête 22 : Les commandes passées le 18 juin 2022 et dont l’adresse de
livraison est "St Michel" (Numéro et adresse de livraison)
- Ecriture en langage algébrique
R1 = SELECTION COMMANDE (datecmde = #18/06/2022# ET adrliv = "St
Michel")
Res = PROJECTION R1 (numcmde, adrliv)
- Ecriture de la requête en SQL
SELECT numcmde, adrliv
FROM COMMANDE
WHERE datecmde =#18/06/2022#
AND adrliv ="St Michel" ;
- Résultat attendu
Requête22
numcmde adrliv

558 St Michel

559 St Michel

Requête 23 : Les numéros des commandes sur lesquelles figure le produit de


code P03 dont la quantité commandée dépasse 20.
- Ecriture algébrique
R1 = SELECTION CONCERNER (codprod = "P03" ET qtecmde > 20)
Res = PROJECTION R1 (numcmde)
- Ecriture de la requête en SQL
SELECT numcmde
FROM CONCERNER
WHERE codprod = "P03"
AND qtecmde >20;
- Résultat attendu
Requête23
numcmde

550

551

554

Requête 24 : Liste des produits dont le nom commence par L ou dont le prix
dépasse 5000
- Ecriture algébrique

Réalisé par ZINSOU Mensah 52


R1 = SELECTION PRODUIT (libprod COMME "L*" OU prixunit >5000)
Res = PROJECTION R1 (codprod , libprod, prixunit)
- Ecriture de la requête en SQL
SELECT *
FROM PRODUIT
WHERE libprod LIKE "L*"
OR prixunit > 5000;
- Résultat attendu
Requête24
codprod libprod prixunit

P02 Lait en poudre 2800

P04 Lait en boîte 1500

P05 Suze 5800

P07 Rhum St James 6000

P08 William Lawson’s 6000

Requête 25 : Les représentants dont le salaire de base dépasse 75000 et ceux


dont le taux de commission est d’au moins 20%
- Ecriture algébrique
R1 = SELECTION REPRESENTANT (salbase >75000 OU tauxcom >= 0,2)
Res = PROJECTION R1 (numrep, nomrep, salbase, tauxcom)
- Ecriture de la requête en SQL
SELECT *
FROM REPRESENTANT
WHERE salbase>75000
OR tauxcom>= 0.2;
- Résultat attendu
Requête25

numrep nomrep salbase tauxcom

1012 BAMIKPO Grégoire 60000 0,2

1013 ALI Traoré 100000 0,25

1014 POUPO Alagnon 80000 0,15

1015 BAKARY Séïbou 60000 0,2

Réalisé par ZINSOU Mensah 53


Requête 26 : La liste des clients habitant Cotonou et Porto-Novo
- Ecriture algébrique
R1 = SELECTION CLIENT (villecli = "Cotonou" OU villecli = "Porto-Novo")
Res = PROJECTION R1 (numcli, nomcli, prencli, adrcli, villecli)
- Ecriture de la requête en SQL
SELECT *
FROM CLIENT
WHERE villecli = "Cotonou"
OR villecli = "Porto-Novo";
- Résultat attendu
Requête26

numcli nomcli prencli adrcli villecli

4010 AZONDE Jean 01 BP 4023 Cotonou

4012 LAWANI Johan 06 BP 004 Porto-Novo

4015 COCOU Yves Tél. 93 34 41 11 Porto-Novo

4016 DANSOU Côme Tél. 90 90 04 40 Cotonou

4017 AFANVI David 06 BP 3434 Porto-Novo

4018 FANOU Rolland 04 BP 444 Cotonou

4019 EFIOU Afi Tél. 95 90 01 01 Cotonou

4021 GUEDE Zinsou 03 BP 2711 Cotonou

4025 OUINSOU Clotilde 01 BP 2100 Cotonou

4026 ALLE Constance 13, rue des Amazones Cotonou

4027 BEHANZIN Didier 13, rue des Amazones Cotonou

4029 JOHNSON Matthieu Boulevard Saint Michel Cotonou

Requête 27 : Réécrire autrement la requête n° 21 en utilisant le prédicat IN


- Ecriture de la requête en SQL
NB : le prédicat IN vérifie si une valeur quelconque d’un
SELECT DISTINCT numcli attribut apparaît dans une liste de valeurs connue et fixe.
FROM COMMANDE Ce prédicat peut être utilisé pour remplacer une suite
d’opérateurs logique OR.
WHERE numcmde IN (551, 555, 560); Lorsque la liste des valeurs n'est pas connue à priori, comme
dans certaines sous-interrogations (ou sous-requêtes), ce
prédicat est nécessaire.
La négation de ce prédicat est NOT IN

Réalisé par ZINSOU Mensah 54


- Résultat attendu
Requête21
numcli

4020

4021

4018

Requête 28 : Le nom et le prénom du client qui a passé la commande de


numéro 555
- Ecriture algébrique
R1 = SELECTION COMMANDE (numcmde = 555)
R2 = JOINTURE CLIENT, R1 (CLIENT.numcli = R1.numcli)
Res = PROJECTION R2 (nomcli, prencli)
- Ecriture de la requête en SQL
SELECT nomcli, prencli
FROM CLIENT, COMMANDE
WHERE CLIENT.numcli = COMMANDE.numcli
AND numcmde = 555;
- Résultat attendu
Requête28
nomcli prencli

GUEDE Zinsou

Requête 29 : Les noms des produits figurant sur la commande 550


- Ecriture algébrique
R1 = SELECTION CONCERNER (numcmde = 550)
R2 = JOINTURE PRODUIT, R1 (PRODUIT.numcli = R1.numcli)
Res = PROJECTION R2 (libprod)
- Ecriture de la requête en SQL
SELECT libprod
FROM PRODUIT, CONCERNER
WHERE PRODUIT.codprod =CONCERNER.codprod
AND numcmde = 550 ;

Réalisé par ZINSOU Mensah 55


- Résultat attendu
Requête29

libprod

Fromage

Pastis

Coca Cola

Requête 30 : Les dates de commandes du produit "Fromage" avec indication du


libellé du produit
- Ecriture algébrique
R1 = SELECTION PRODUIT (libprod = "Fromage")
R2 = JOINTURE CONCERNER, R1 (CONCERNER.codprod = R1.codprod)
R3 = JOINTURE COMMANDE, R2 (COMMANDE.numcmde = R2.numcmde)
Res = PROJECTION R3 (UNIQUE datecmde, libprod)
- Ecriture de la requête en SQL
SELECT DISTINCT datecmde, libprod
FROM COMMANDE, CONCERNER, PRODUIT
WHERE COMMANDE.numcmde = CONCERNER.numcmde
AND CONCERNER.codprod = PRODUIT.codprod
AND libprod = "Fromage" ;
- Résultat attendu NB : il peut arriver que le produit dont le nom est Fromage
soit commandé sur plusieurs commandes le même jour.
Requête30 A cet effet, il est nécessaire d’utiliser dans la clause SELECT, le
datecmde libprod mot clé DISTINCT pour éviter, lors de l’affichage des résultats,
la répétition d’une même valeur de l’attribut datecmde.
13/06/2022 Fromage

15/06/2022 Fromage

19/06/2022 Fromage

Requête 31 : Les noms et prénoms des clients qui ont commandé le produit
"Pâte dentifrice"
- Ecriture algébrique
R1 = SELECTION PRODUIT (libprod = "Pâte dentifrice")
R2 = JOINTURE CONCERNER, R1 (CONCERNER.codprod = R1.codprod)
R3 = JOINTURE COMMANDE, R2 (COMMANDE.numcmde = R2.numcmde)
R4 = JOINTURE CLIENT, R3 (CLIENT.numcli = R3.numcli)
Res = PROJECTION R4 (UNIQUE nomcli, prencli)
- Ecriture de la requête en SQL

Réalisé par ZINSOU Mensah 56


SELECT DISTINCT nomcli, prencli
FROM CLIENT, COMMANDE, CONCERNER, PRODUIT
WHERE CLIENT.numcli = COMMANDE.numcli
AND COMMANDE.numcmde = CONCERNER.numcmde
AND CONCERNER.codprod = PRODUIT.codprod
AND libprod = "Pâte dentifrice";
- Résultat attendu
Requête31
NB : il peut arriver que le produit dont le nom est Pâte
nomcli prencli dentifrice soit commandé sur plusieurs commandes par un
BALOGOUN Didier même client.
A cet effet, il est nécessaire d’utiliser dans la clause SELECT, le
GUEDE Zinsou mot clé DISTINCT pour éviter, lors de l’affichage des résultats,
la répétition d’une même valeur des attributs nomcli et
JOHNSON Matthieu prencli.
AZONDE Jean
Requête 32 : La liste des produits figurant sur la commande n° 550
- Ecriture algébrique
R1 = SELECTION CONCERNER (numcmde = 550)
R2 = JOINTURE PRODUIT, R1 (PRODUIT.codprod = R1.codprod)
Res = PROJECTION R2 (codprod, libprod, prixunit)
- Ecriture de la requête en SQL
SELECT PRODUIT.*
FROM PRODUIT, CONCERNER
WHERE PRODUIT.codprod = CONCERNER.codprod
AND numcmde = 550;
- Résultat attendu NB : le symbole * se place seul devant SELECT lorsqu’il y a une
seule table au niveau de FROM.
Requête32
Dans le cas où on a plusieurs tables au niveau de FROM, il est
codprod libprod prixunit nécessaire de précéder ce symbole de la table dont il
remplace les atrributs.
P03 Fromage 600

P06 Pastis 3500

P09 Coca Cola 1025

Requête 33 : La liste des clients ayant passé de commande le 13 juin 2022


- Ecriture algébrique
R1 = SELECTION COMMANDE (datecmde = #13/06/2022#)
R2 = JOINTURE CLIENT, R1 (CLIENT.numcli = R1.numcli)
Res = PROJECTION R2 (UNIQUE numcli, nomcli, prencli, adrcli, villecli)
- Ecriture de la requête en SQL
SELECT DISTINCT CLIENT.*
FROM CLIENT, COMMANDE

Réalisé par ZINSOU Mensah 57


WHERE CLIENT.numcli = COMMANDE.numcli
AND datecmde = #13/06/2022#;
NB : si le mot clé DISTINCT n’était pas précisé,
- Résultat attendu l’enregistrement du client de numéro 4011 s’affichera deux
fois lors de l’affichage des résultats de la requête.
Requête33
numcli nomcli prencli adrcli villecli

4011 VIVIME Léopold Tél. 95 06 11 11 Parakou

4013 BALOGOUN Didier 04 BP 2024 Parakou

4020 GANDONOU Rock Tél. 90 06 38 41 Bohicon

Requête 34 : Les numéros et noms des représentants intervenant dans le


département Atacora
- Ecriture algébrique
R1 = SELECTION DEPARTEMENT (nomdep = "Atacora")
R2 = JOINTURE PROSPECTER, R1 (PROSPECTER.coddep = R1.coddep)
R3 = JOINTURE REPRESENTANT, R2 (REPRESENTANT.numrep = R2.numrep)
Res = PROJECTION R3 (numrep, nomrep)
- Ecriture de la requête en SQL
SELECT REPRESENTANT.numrep, nomrep
FROM REPRESENTANT, PROSPECTER, DEPARTEMENT
WHERE REPRESENTANT.numrep = PROSPECTER.numrep
AND PROSPECTER.coddep = DEPARTEMENT.coddep
AND nomdep = "Atacora";
- Résultat attendu
Requête34 NB : dans une requête SQL, tout attribut ayant servi à
numrep nomrep formuler le critère de jointure doit être précédé, partout où on
le trouve, de la table dans laquelle il est considéré comme une
1010 ZANNOU Dieudonné clé primaire.

1011 KINTO Robert

1014 POUPO Alagnon

Requête 35 : Le numéro et le nom du client qui a passé la commande de


numéro 553
- Ecriture algébrique
R1 = SELECTION COMMANDE (numcmde = 553)
R2 = JOINTURE CLIENT, R1 (CLIENT.numcli = R1.numcli)
Res = PROJECTION R2 (numcli, nomcli)
- Ecriture de la requête en SQL

Réalisé par ZINSOU Mensah 58


SELECT CLIENT.numcli, nomcli
FROM CLIENT, COMMANDE
WHERE CLIENT.numcli = COMMANDE.numcli
AND numcmde = 553;
- Résultat attendu
Requête35
numcli nomcli

4010 AZONDE

Requête 36 : Les commandes sur lesquelles se trouve le produit de code P08


avec indication du numéro de la commande, du code et du prix unitaire du
produit ainsi que la quantité commandée.
- Ecriture algébrique
R1 = SELECTION PRODUIT (codprod ="P08")
R2 = JOINTURE CONCERNER, R1 (CONCERNER.numcli = R1.codprod)
Res = PROJECTION R2 (numcmde, codprod, prixunit, qtecmde)
- Ecriture de la requête en SQL
SELECT numcmde, PRODUIT.codprod, prixunit, qtecmde
FROM CONCERNER, PRODUIT
WHERE CONCERNER.codprod = PRODUIT.codprod
AND PRODUIT.codprod ="P08";
- Résultat attendu
Requête36
numcmde codprod prixunit qtecmde

551 P08 6000 13

554 P08 6000 9

557 P08 6000 29

Requête 37 : Nombre de représentants dont le salaire de base est d’au plus


75000.
- Ecriture algébrique
R1 = SELECTION REPRESENTANT (salbase <= 75000)
Res = PROJECTION R1 (COMPTER(salbase))
- Ecriture de la requête en SQL
SELECT COUNT(salbase) As Nombre SELECT COUNT(*) As Nombre
FROM REPRESENTANT OU
FROM REPRESENTANT
WHERE salbase <= 75000; WHERE salbase <= 75000;
- Résultat attendu

Réalisé par ZINSOU Mensah 59


NB : le symbole * placé dans la parenthèse de COUNT signifie
tous les enregistrements de la table des résultats de la requête.
Par conséquent la fonction COUNT(*) comptera tous les
enregistrements de la tables des résultats pour lesquels le
salaire de base est inférieur ou égal à 75000
Requête37

Nombre

Requête 38 : Nombre de commandes passées par le client AZONDE Jean.


- Ecriture algébrique
R1 = SELECTION CLIENT (nomcli = "AZONDE" ET prencli = "Jean")
R2 = JOINTURE COMMANDE, R1 (COMMANDE.numcli = R1.numcli)
Res = PROJECTION R2 (COMPTER(numcli))
- Ecriture de la requête en SQL
OU
SELECT COUNT(COMMANDE.numcli) As Nombre
FROM COMMANDE, CLIENT
WHERE COMMANDE.numcli = CLIENT.numcli
AND nomcli = "AZONDE"
AND prencli = "Jean"; SELECT COUNT(*) As Nombre
FROM COMMANDE, CLIENT
WHERE COMMANDE.numcli = CLIENT.numcli
AND nomcli = "AZONDE"
- Résultat attendu AND prencli = "Jean";
Requête38

Nombre

Requête 39 : Quantité totale de produits figurant sur la commande 552.


- Ecriture en langage algébrique
R1 = SELECTION CONCERNER (numcmde = 552)
Res = PROJECTION R1 (SOMME(qtecmde))
- Ecriture de la requête en SQL
SELECT SUM(qtecmde) As QtéTotale
FROM CONCERNER
WHERE numcmde = 552;
- Résultat attendu
Requête39

QtéTotale

55

Réalisé par ZINSOU Mensah 60


Requête 40 : Total des salaires de base des représentants prospectant dans le
département Atacora.
- Ecriture en langage algébrique
R1 = SELECTION DEPARTEMENT (nomdep= "Atacora")
R2 = JOINTURE PROSPECTER, R1 (PROSPECTER.coddep = R1.coddep)
R3 = JOINTURE REPRESENTANT, R2 (REPRESENTANT.numrep = R2.numrep)
Res = PROJECTION R3 (SOMME(salbase))
- Ecriture de la requête en SQL
SELECT SUM(salbase) As Total_Salaire
FROM REPRESENTANT, PROSPECTER, DEPARTEMENT
WHERE REPRESENTANT.numrep = PROSPECTER.numrep
AND PROSPECTER.coddep = DEPARTEMENT.coddep
AND nomdep = "Atacora";
- Résultat attendu
Requête40
Total_Salaire

205 000

Requête 41 : Total de la commande 555.


- Ecriture en langage algébrique
R1 = SELECTION CONCERNER (numcde= 555)
R2 = JOINTURE PRODUIT, R1 (PRODUIT.codprod = R1.codprod)
Res = PROJECTION R2 (SOMME(qtecmde*prixunit))
- Ecriture de la requête en SQL
SELECT SUM(qtecmde*prixunit) As Total_Com
FROM PRODUIT, CONCERNER
WHERE PRODUIT.codprod = CONCERNER.codprod
AND numcmde = 555;
- Résultat attendu
Requête41
Total_Com

139 275

Requête 42 : La superficie moyenne de tous les départements.


- Ecriture en langage algébrique
Res = PROJECTION DEPARTEMENT (MOYENNE(superficie))
- Ecriture de la requête en SQL
SELECT AVG(superficie) As Superficie_Moyenne

Réalisé par ZINSOU Mensah 61


FROM DEPARTEMENT;
- Résultat attendu
Requête42

Superficie_Moyenne

9708,33

Requête 43 : Prix unitaire moyen des produits dont le nom commence par "S".
- Ecriture en langage algébrique
R1 = SELECTION PRODUIT (libprod COMME "S*")
Res = PROJECTION R1 (MOYENNE(prixunit))
- Ecriture de la requête en SQL
SELECT AVG(prixunit) As Prix_Moyen
FROM PRODUIT
WHERE libprod LIKE "S*";
- Résultat attendu
Requête43
Prix_Moyen

3575

Requête 44 : Le plus grand salaire de base des représentants.


- Ecriture en langage algébrique
Res = PROJECTION REPRESENTANT (MAXIMUM(salbase))
- Ecriture de la requête en SQL
SELECT MAX(salbase) As Salaire_Maximal
FROM REPRESENTANT;
- Résultat attendu
Requête44
Salaire_Maximal

100 000

Requête 45 : Le prix du produit le plus cher figurant sur la commande numéro


552.
- Ecriture en langage algébrique
R1 = SELECTION CONCERNER (numcmde = 552)
R2 = JOINTURE PRODUIT, R1 (PRODUIT.codprod = R1.codprod)
Res = PROJECTION R2 (MAXIMUM(prixunit))
- Ecriture de la requête en SQL

Réalisé par ZINSOU Mensah 62


SELECT MAX(prixunit) As Plus_cher
FROM PRODUIT, CONCERNER
WHERE PRODUIT.codprod = CONCERNER.codprod
AND numcmde = 552;
- Résultat attendu
Requête45

Plus_cher

1025

Requête 46 : Le prix du produit qui coûte le moins cher.


- Ecriture en langage algébrique
Res = PROJECTION PRODUIT (MINIMUM(prixunit))
- Ecriture de la requête en SQL
SELECT MIN(prixunit) As Moins_cher
FROM PRODUIT;
- Résultat attendu
Requête46
Moins_cher

600

Requête 47 : La plus petite superficie des départements prospectés par le


représentant ALI Traoré.
- Ecriture en langage algébrique
R1 = SELECTION REPRESENTANT (nomrep = "ALI Traoré")
R2 = JOINTURE PROSPECTER, R1 (PROSPECTER.numrep = R1.numrep)
R3 = JOINTURE DEPARTEMENT, R2 (DEPARTEMENT.coddep = R2.coddep)
Res = PROJECTION R3 (MINIMUM (superficie))
- Ecriture de la requête en SQL
SELECT MIN(superficie) As Petite_Superficie
FROM DEPARTEMENT, PROSPECTER, REPRESENTANT
WHERE DEPARTEMENT.coddep = PROSPECTER.coddep
AND PROSPECTER.numrep = REPRESENTANT.numrep
AND nomrep = "ALI Traoré";

Réalisé par ZINSOU Mensah 63


- Résultat attendu
Requête47

Petite_Superficie

7000

Requête 48 : Noms et prénoms des clients par ville


- Ecriture en langage algébrique
R1 = GROUPER CLIENT (villecli)
Res = PROJECTION R1 (villecli, nomcli, prencli)
- Ecriture de la requête en SQL
SELECT villecli, nomcli, prencli
FROM CLIENT
GROUP BY villecli, nomcli, prencli;
- Résultat attendu
Requête48
NB : pour cette requête, l’utilisation du mot « par » suivi de
villecli nomcli prencli « ville », une information de la base de données représentée
par l’attribut villecli, sans qu’il y ait un article (le, la, un,
Bohicon ABALO Jérôme une,..) les séparant, entraine un regroupement des données
des attributs nomcli et prencli autour d’une même valeur de
l’attribut villecli ; d’où l’utilisation de la clause GROUP BY.
Bohicon GANDONOU Rock Tout attribut de la clause GROUP BY est également attribut
de la clause SELECT et vice-versa.
Bohicon ZANNOU Magloire Cet attribut doit être placé au début des autres.
Noter bien qu’on ne ramène jamais une fonction de calcul au
Cotonou ALLE Constance niveau de GROUP BY.

Cotonou AZONDE Jean

Cotonou BEHANZIN Didier

Cotonou DANSOU Côme

Cotonou EFIOU Afi

Cotonou FANOU Rolland

Cotonou GUEDE Zinsou

Cotonou JOHNSON Matthieu

Cotonou OUINSOU Clotilde

Lokossa PADONOU Irène

Natitingou MAMADOU Issifou

Parakou BALOGOUN Didier

Réalisé par ZINSOU Mensah 64


Requête48

villecli nomcli prencli

Parakou EGNON Clémence

Parakou VIVIME Léopold

Porto-Novo AFANVI David

Porto-Novo COCOU Yves

Porto-Novo LAWANI Johan

Requête 49 : Pour chaque adresse de livraison, indiquer les noms des produits
- Ecriture en langage algébrique
R1 = GROUPER COMMANDE (adrliv)
R2 = JOINTURE CONCERNER, R1 (CONCERNER.numcmde = R1.numcmde)
R3 = JOINTURE PRODUIT, R2 (PRODUIT.codprod = R2.codprod)
Res = PROJECTION R3 (adrliv, libprod)
- Ecriture de la requête en SQL
SELECT adrliv, libprod
FROM PRODUIT, CONCERNER, COMMANDE
WHERE PRODUIT.codprod = CONCERNER.codprod
AND CONCERNER.numcmde = COMMANDE.numcmde
GROUP BY adrliv, libprod;
- Résultat attendu
NB : pour cette requête, l’utilisation du groupe de mots
Requête49 « pour chaque» suivi de « adresse de livraison », une
adrliv libprod information de la base de données représentée par l’attribut
adrliv, entraine un regroupement des données de l’attribut
Agbodjèdo Pâte dentifrice libprod autour d’une même valeur de l’attribut adrliv ; d’où
l’utilisation de la clause GROUP BY.
Agbodjèdo Lait en poudre

Agbodjèdo Fromage

Ganhito Lait en poudre

Godomey Fromage

Godomey William Lawson’s

Grand Marché Coca Cola

Grand Marché Fromage

Grand Marché Lait en boîte

Réalisé par ZINSOU Mensah 65


Grand Marché Pastis

Grand Marché Pâte dentifrice

Grand Marché Sucre roux

Grand Marché Suze

Grand Marché William Lawson’s

St Michel Fromage

St Michel Lait en poudre

St Michel Pastis

St Michel Rhum St James

St Michel Sucre roux

St Michel Suze

St Michel William Lawson’s

Tokpa Hoho Coca Cola

Tokpa Hoho Fromage

Tokpa Hoho Pâte dentifrice

Vèdoko Pâte dentifrice

Vèdoko Fromage

Wologuèdè Coca Cola

Wologuèdè Lait en boîte

Wologuèdè Lait en poudre

Wologuèdè Pastis

Wologuèdè Pâte dentifrice

Wologuèdè Rhum St James

Requête 50 : Le nombre de commandes passées par client au cours de l’année


2022.
- Ecriture en langage algébrique
R1 = SELECTION COMMANDE (datecmde ENTRE #01/01/2022# And
#31/12/2022#)

Réalisé par ZINSOU Mensah 66


R2 = GROUPER R1 (numcli)
Res = PROJECTION R2 (numcli, COMPTER(numcli))
- Ecriture de la requête en SQL
SELECT numcli, COUNT(numcli) As Nbre_Commande
FROM COMMANDE
WHERE datecmde BETWEEN #01/01/2022# And #31/12/2022#
GROUP BY numcli;
Ou bien
SELECT numcli, COUNT(*) As Nbre_Commande
FROM COMMANDE
WHERE datecmde BETWEEN #01/01/2022# And #31/12/2022#
GROUP BY numcli;
- Résultat attendu
Requête50 NB : pour cette requête, l’utilisation du mot « par » suivi de
« client », une information de la base de données représentée
numcli Nbre_Commande par l’ensemble des attributs de la table CLIENT, entraine
l’utilisation de la clause GROUP BY.
4010 3

4011 2

4013 2

4015 1

4018 1

4020 1

4021 1

4025 1

4029 2

Remarque : au cas où on souhaiterait afficher en plus du numéro, le nom et le prénom des clients, on aura ceci :

- Ecriture de la requête en SQL


SELECT CLIENT.numcli, nomcli, prencli, COUNT(*) As Nbre_Commande
FROM COMMANDE, CLIENT
WHERE COMMANDE.numcli = CLIENT.numcli
AND datecmde BETWEEN #01/01/2022# And #31/12/2022#
GROUP BY CLIENT.numcli, nomcli, prencli;

Réalisé par ZINSOU Mensah 67


- Résultat attendu
Requête50 Bis

numcli nomcli prencli Nbre_Commande

4010 AZONDE Jean 3

4011 VIVIME Léopold 2

4013 BALOGOUN Didier 2

4015 COCOU Yves 1

4018 FANOU Rolland 1

4020 GANDONOU Rock 1

4021 GUEDE Zinsou 1

4025 OUINSOU Clotilde 1

4029 JOHNSON Matthieu 2

Requête 51 : Les représentants (numéro et nom) ainsi que le nombre de


commandes transmises au cours de la 1ère quinzaine de juin 2022
- Ecriture en langage algébrique
R1 = SELECTION COMMANDE (datecmde ENTRE #01/06/2022# And
#15/06/2022#)
R2 = JOINTURE REPRESENTANT, R1 (REPRESENTANT.numrep = R1.numrep)
R3 = GROUPER R2 (numrep)
Res = PROJECTION R3 (numrep, nomrep, COMPTER (numrep))
- Ecriture de la requête en SQL
SELECT REPRESENTANT.numrep, nomrep, COUNT(*) As Nbre_Cde
FROM REPRESENTANT, COMMANDE
WHERE REPRESENTANT.numrep = COMMANDE.numrep
AND datecmde BETWEEN #01/06/2022# And #15/06/2022#
GROUP BY REPRESENTANT.numrep, nomrep;
- Résultat attendu
Requête51 NB : la présence d’une fonction de calcul (COUNT, SUM,..) au
niveau de la clause SELECT avec d’autres attributs entraine un
regroupement des données de ces attributs ; d’où l’utilisation
numrep nomrep Nbre_Cde
de la clause GROUP BY

1010 ZANNOU Dieudonné 3

1011 KINTO Robert 1

Réalisé par ZINSOU Mensah 68


Requête51

numrep nomrep Nbre_Cde

1012 BAMIKPO Grégoire 1

1015 BAKARY Séïbou 1

Requête 52 : Les commandes dont la quantité totale des produits dépasse 50


au cours du 2ème trimestre 2022
- Ecriture en langage algébrique
R1 = SELECTION COMMANDE (datecmde ENTRE #01/04/2022# And
#30/06/2022#)
R2 = JOINTURE CONCERNER, R1 (CONCERNER.numcmde = R1.numcmde)
R3 = GROUPER R2 (numcmde)
R4 = SELECTION R3 (SOMME (qtecmde)>50)
Res = PROJECTION R4 (numcmde, SOMME (qtecmde))
- Ecriture de la requête en SQL
SELECT COMMANDE.numcmde, SUM(qtecmde) As Qte_Tot
FROM CONCERNER, COMMANDE
WHERE CONCERNER.numcmde = COMMANDE.numcmde
AND datecmde BETWEEN #01/04/2022# And #30/06/2022#
GROUP BY COMMANDE.numcmde
HAVING SUM(qtecmde)>50 ;
- Résultat attendu
Requête52 NB : tout critère de sélection formulé avec une fonction de
calcul (COUNT, SUM,…) ne peut figurer au niveau de la clause
WHERE mais plutôt au niveau de la clause HAVING qui
numcmde Qte_Tot nécessite préalablement l’usage de la clause GROUP BY.
Il est recommandé de compléter aux éléments de SELECT, la
550 103 fonction de calcul ayant servie à la formulation du critère de
sélection au niveau de la clause HAVING.
552 55

555 92

556 52

557 60

560 56

Requête 53 : Les commandes passées au cours de l’année 2022 sur lesquelles


le nombre total de produits commandés dépasse 2 (Numéro commande et
nombre)
- Ecriture en langage algébrique

Réalisé par ZINSOU Mensah 69


R1 = SELECTION COMMANDE (ANNEE(datecmde) = 2022)
R2 = JOINTURE CONCERNER, R1 (CONCERNER.numcmde = R1.numcmde)
R3 = GROUPER R2 (numcmde)
R4 = SELECTION R3 (COMPTER(numcmde)>2)
Res = PROJECTION R4 (numcmde, COMPTER(numcmde))
- Ecriture de la requête en SQL
SELECT COMMANDE.numcmde, COUNT(codprod) As Nbre_Produit
FROM CONCERNER, COMMANDE
WHERE CONCERNER.numcmde = COMMANDE.numcmde
AND datecmde BETWEEN #01/01/2022# And #31/12/2022#
GROUP BY COMMANDE.numcmde
HAVING COUNT(codprod) >2 ;
- Résultat attendu
Requête53
numcmde Nbre_Produit

550 3

552 3

555 4

556 3

557 3

559 3

560 4

563 3

Requête 54 : La liste des représentants par salaire de base dont le salaire de


base dépasse 50000 avec indication du salaire de base, du numéro et du nom
des représentants.
- Ecriture en langage algébrique
R1 = GROUPER REPRESENTANT (salbase)
R2 = SELECTION R3 (salbase>50000)
Res = PROJECTION R2 (salbase, numrep, nomrep)
- Ecriture de la requête en SQL
SELECT salbase, numrep, nomrep
FROM REPRESENTANT
GROUP BY salbase, numrep, nomrep
HAVING salbase >50000;

Réalisé par ZINSOU Mensah 70


- Résultat attendu
NB : pour cette requête, l’utilisation du mot « par » suivi de
Requête54 « salaire », une information de la base de données
salbase numrep nomrep représentée par l’attribut salbase, entraine l’utilisation de la
clause GROUP BY.
Puisque cet attribut de groupage est utilisé pour formuler le
60000 1012 BAMIKPO Grégoire critère de sélection, ce critère doit être placé au niveau de la
clause HAVING.
60000 1015 BAKARY Séïbou

75000 1011 KINTO Robert

80000 1014 POUPO Alagnon

100000 1013 ALI Traoré

Requête 55 : Nom des représentants du moins payé au plus payé


- Ecriture en langage algébrique
R1 = ORDONNER REPRESENTANT (salbase)
Res = PROJECTION R1 (nomrep, salbase)
- Ecriture de la requête en SQL
SELECT nomrep, salbase SELECT nomrep, salbase
FROM REPRESENTANT OU FROM REPRESENTANT
ORDER BY salbase ASC; ORDER BY salbase;
- Résultat attendu
NB : il est recommandé de compéter tout attribut ou fonction
Requête55 de la clause ORDER BY aux éléments de la clause SELECT.
nomrep salbase
Cet élément complété se place après les attributs de SELECT.
ZANNOU 50000 Le mot clé ASC (Ascendant) indique l’ordre ascendant des
Dieudonné données de l’attribut salbase lors de l’affichage. Si l’ordre
d’affichage était décroissant, on aurait utilisé le mot clé DESC
BAKARY Séïbou 60000 (Descendant)

BAMIKPO Grégoire 60000

KINTO Robert 75000

POUPO Alagnon 80000

ALI Traoré 100000

Requête 56 : Liste des noms (dans l’ordre alphabétique inverse) des produits
figurant sur la commande 555.
- Ecriture en langage algébrique
R1 = SELECTION CONCERNER (numcmde = 555)
R2 = JOINTURE PRODUIT, R1 (PRODUIT.codprod = R1.codprod)
R3 = ORDONNER R2 (libprod)

Réalisé par ZINSOU Mensah 71


Res = PROJECTION R3 (libprod)
- Ecriture de la requête en SQL
SELECT libprod
FROM PRODUIT, CONCERNER
WHERE PRODUIT.codprod = CONCERNER.codprod
AND numcmde = 555
ORDER BY libprod DESC;
- Résultat attendu

Requête56

libprod

Pâte dentifrice

Pastis

Lait en boîte

Coca Cola

Requête 57 : Numéros des commandes qui n’ont fait l’objet d’aucun produit.
- Ecriture de la requête en SQL
SELECT numcmde
FROM COMMANDE
WHERE numcmde NOT IN (SELECT numcmde
FROM COMMANDE C, CONCERNER CO
WHERE C.numcmde = CO.numcmde);
- Résultat attendu

numcmde

561

B- REQUÊTES ACTIONS

Requête 58 : Insérer un nouveau produit dont le code est P11, de nom


Mayonnaise et dont le prix unitaire est 875.
- Ecriture de la requête en SQL
INSERT INTO PRODUIT (coprod, libprod, prixunit)
VALUES ("P11", "Mayonnaise", 875);

Réalisé par ZINSOU Mensah 72


Requête 59 : Insérer un nouveau représentant dont le code est 1016, de nom
ZORO Paul, de salaire de base 75 000 et dont le taux de commission est 0,25.
- Ecriture de la requête en SQL
INSERT INTO REPRESENTANT
VALUES 1016, " ZORO Paul ", 75000, 0,25);

Requête 60 : Modifier à 1000, le prix du produit de code P11.


- Ecriture de la requête en SQL
UPDATE PRODUIT
SET prixunit=1000
WHERE codprod="P11";

Requête 61 : Augmenter de 10% le salaire de base du représentant de numéro


1016.

- Ecriture de la requête en SQL


UPDATE REPRESENTANT
SET salbase=salbase*1.1
WHERE numrep=1016;

Requête 62 : Supprimer le produit de code P11.

- Ecriture de la requête en SQL


DELETE FROM PRODUIT
WHERE codprod="P11";

Requête 63 : Supprimer le produit de code P02.

- Ecriture de la requête en SQL


Il faut supprimer d’abord tous les enregistrements associés de la table
CONCERNER avant de supprimer l’enregistrement spécifié dans la table
PRODUIT

DELETE FROM CONCERNER

Réalisé par ZINSOU Mensah 73


WHERE codprod="P02";

DELETE FROM PRODUIT

WHERE codprod="P02";

Réalisé par ZINSOU Mensah 74

Vous aimerez peut-être aussi