Introduction aux SGBD pour Débutants
Introduction aux SGBD pour Débutants
Année 2020/2021
TABLE DE MATIERE
TABLE DE MATIERE ..............................................................................................1
3
SGBD PRINCIPE ET FONCTIONNEMENT
Une base de données est un ensemble structuré de données enregistrées sur des supports informatisés,
pouvant satisfaire simultanément plusieurs utilisateurs de façon sélective, en un délai raisonnable.
Le concept de Base de Données (BDD) est apparu vers 1960, face au nombre croissant d'informations que les
entreprises devaient gérer et partager :
Chaque nouvelle application créait alors ses propres fichiers de données et ses propres programmes ;
le concept de base de données va à l'encontre de cette façon de procéder : il permet la centralisation, la
coordination, l'intégration et la diffusion de l'information archivée.
La base de données enregistre les faits ou événements qui surviennent dans la vie d'un organisme, pour les
restituer à la demande : elle permet également de tirer des conclusions en rapprochant plusieurs faits
élémentaires.
Les données peuvent être manipulées par plusieurs utilisateurs ayant des vues différentes surces données
("points de vue" différents).
La structure d’ensemble des données suit une définition rigoureuse appelée SCHEMA.
Toute manipulation de fichier exige trois niveaux d’intervention, et trois couches logicielles :
- Gestion du support physique : disques durs, disquette, streamers…
Pilote d’entrées-sorties (Driver)
- Gestion des structures internes des fichiers, et des méthodes d’accès : ouverture,
fermeture,lecture, écriture…
Système de gestion de fichiers (SGF)
- Gestion des contenus : calculs, tests, affichages ...
Programmes applicatifs
4
Système de Gestion de Base de données : SGBD
- définir des "bases de données", et des relations entre les éléments de chaque base ;
- spécifier le traitement de ces données : interrogations, mises à jour, calculs, extractions...
Le SGBD reçoit des commandes aussi bien des programmes d'application que des utilisateurs :il
commande les manipulations de données, généralement par l'intermédiaire d'un SGF.
Utilisateur
Ouvrir, fermer,
Demande d'un
Unités
enreg. physique De
lire, écrire Lecture/
Gestion de la Base SGBD SGF
Ecriture
Code réponse,
Enreg. physique
ou code erreur
Programme Données logiques
applicatif
Pour pallier aux inconvénients des méthodes classiques de gestion de fichiers, les SGBD visent
quatre objectifs : intégration et corrélation, flexibilité (indépendance), disponibilité, sécurité.
Ces objectifs exigent une distinction nette entre les données et les procédures de manipulation
de ces données : aux données, on associera une fonction d'administration des données,
aux procédures de manipulation une fonction de programmation.
Programmeur
Schéma Schéma Schéma
Modèle externe
Externe externe externe d'application
Utilisateur 1 Utilisateur 2 Application 3
Schéma Analyste
Modèle conceptuel
conceptuel
Schéma
Administrateur
Modèle interne interne de la base
5
Niveau conceptuel
C’est une abstraction aussi fidèle que possible, de l'univers de l'entreprise, après modélisation
et indépendamment de toute référence à l'utilisation et à l'implantation en machine. modèle
conceptuel de données (MCD) permet le passage d'un concret inaccessible (l'univers réel) à un
abstrait manipulable : le schéma conceptuel. Celui-ci peut donc être considéré comme la
description du contenu de la base : c'est le résultat d'un travail d'analyse et de conception d'un
système d'information automatisé.
Pour aboutir au schéma conceptuel, l'analyste doit repérer dans le réel, et recenser de manière
exhaustive, toutes les entités et toutes les associations :
- Une entité peut être définie comme une personne, un objet, un lieu, un statut, un événement
qui ont une existence dans le monde réel. C'est un objet concret ou abstrait, possédant un
certain nombre de caractéristiques spécifiques (exemple : le produit x coûte y francs).
- Généralement, les entités du monde réel se manifestent à travers des faits élémentaires.
- Certains faits faisant intervenir plusieurs entités, il apparaît la notion d'association. Une
association (ou lien) est un ensemble de deux ou plusieurs entités, chacune d'elles jouant un
rôle particulier.
- les liens fonctionnels notés N : 1
On a un lien fonctionnel N:1 de A vers B si toute occurrence de A détermine au plus une occurrence
de B, et si à toute occurrence de B, correspond un nombre quelconque d’occurrences de A.
Exemple : dans une compagnie aérienne, connaissant le numéro d'un vol, on en déduit d'une
manière unique la destination, mais plusieurs vols peuvent avoir la même destination.
X X
Y Y
Z Z
Exemple : dans une faculté, un enseignant peut dispenser des cours dans plusieurs modules
différents ; de la même façon, un cours peut être dispensé par plusieurs enseignants.
6
IV Fonctionnement d'un SGBD
Chronologie des opérations dans l’interrogation d’un SGDB
Un programme d'application A émet une demande de lecture de données au SGBD sur une des
bases :
Les trois principaux modèles sont, dans l'ordre chronologique de leur arrivée sur le marché, le
modèle hiérarchique, le modèle réseau (ou navigationnel), le modèle relationnel.
Le modèle hiérarchique
Société
7
Le modèle relationnel
C'est un article publié en 1969 par un mathématicien du centre de recherche IBM, Codd, qui
définit les bases de ce modèle relationnel. Codd s'est intéressé au concept d'information et a
cherché à le définir sans se préoccuper de la technique informatique, de ses exigences et de ses
contraintes. Il a étudié un modèle de représentation des données qui repose sur la notion
mathématique de "relation". Dans la pratique, une relation sera représentée par une table de
valeurs.
Définitions
Une relation est un ensemble de tuples (lignes), dont l'ordre est sans importance. Les colonnes
de la table sont appelées attributs ou champs. L’ordre des colonnes est défini lors de la création
de la table.
Une clé est un ensemble ordonné d'attributs qui caractérise un tuple. Une clé primaire le
caractérise de manière unique, à l'inverse d'une clé secondaire.
On dit qu'un attribut A est un déterminant si sa connaissance détermine celle de l'attribut B (B
dépend fonctionnellement de A).
Caractéristiques du modèle
Schéma de données facile à utiliser : toutes les valeurs sont des champs de tables à deux
dimensions.
Améliore l'indépendance entre les niveaux logique et physique : pas de pointeurs visibles par
l'utilisateur.
Fournit aux utilisateurs des langages de haut niveau pouvant éventuellement être utilisés par
des non-informaticiens (SQL, L4G) et un ensemble d'opérateurs basé sur l'algèbre
relationnelle : union, intersection, différence, produit cartésien, projection, sélection, jointure,
division.
Optimise les accès aux bases de données
Améliore l'intégrité et la confidentialité : unicité de clé, contrainte d’intégrité référentielle
Prend en compte une variété d'applications, en gestion et en industriel
Fournir une approche méthodologique dans la construction des schémas.
8
PARTIE 2 CONCEPTION ET DEMARCHE
9
Conception et démarche
Exemple:
L'exemple porte sur un ensemble de données concernant des tests de types différents, effectuéssur les
éléments matériels d'un système de production :
R (libellé matériel, code marque, libellé marque, type de test, date du test, résultat du test) n'est
pas en 1ère forme normale car aucun attribut ne peut être clé primaire : le libellé matériel peut être identique
pour plusieurs éléments.
R (code matériel, libellé matériel, code marque, libellé marque, code type de test, libellé du test,
date du test, résultat du test) n'est pas en 1ère forme normale car on peut faire plusieurs tests sur un
même matériel, ce qui exige de répéter les informations "code type de test", "libellé du test", "date du test",
"résultat du test", dans un même tuple.
La relation doit être éclatée en deux, pour être exprimée en 1ère forme normale :
R-MATERIEL (code matériel, libellé matériel, code marque, libellé marque) R-TEST
(code matériel, code type, libellé test, date du test, résultat du test)
Les deux relations ne comportent que des attributs sans répétition. Dans R_TEST, la clé primaire est
composée de "code matériel" et "code type" : un type de test peut concerner plusieurs matériels, un matériel
peut être testé plusieurs fois, mais chaque matériel ne subit qu’une fois un type de test donné.
R-TEST(code matériel, code type, libellé test, date du test, résultat du test)
n'est pas en 2ème forme normale car l'attribut "libellé test" ne dépend que du "code type" et pas du "code
matériel" ;
La relation doit éclatée en deux, pour être exprimée en deuxième forme normale :
10
La dépendance entre "code matériel" et "libellé marque" n'est pas directe, "libellé marque" est en dépendance
fonctionnelle directe avec le "code marque".
La relation doit être éclatée en deux, pour être exprimée en troisième forme normale :
Commentaires:
N 1
MATERIEL MARQUE
TYPE TEST
1 1
TEST
N N
11
LES RESULTATS A OBTENIR
Recenser tous les résultats que votre application doit pouvoir vous fournir. Il s’agit généralement d’états à
produire. Ces états doivent contenir des données. Une maquette papier des états peut être réalisée afin de ne
rien oublier.
Si nous reprenons notre exemple, les résultats à obtenir sont :
la liste des adhérents avec leur code, nom, prénom, date de naissance, adresse, codepostal, ville et
numéro de téléphone
la liste des équipements mis à leur disposition avec le code, le nom et le tarif d’utilisation
la liste des adhérents et des équipements qu’ils utilisent, ainsi que le montant payé.
…
LE DICTIONNAIRE DES DONNEES
Il faut alors créer le dictionnaire des données c’est-à-dire recenser tous les renseignements à gérersans
distinguer ce à quoi ils se rapportent.
Nous aurons donc :
Nom adhérent
Prénom adhérent
Date de naissance
Adresse
Code postal
Ville
Numéro de téléphone
Nom activité
Tarif activité
Lieu de pratique
Droit d’entrée
LA DEFINITION DES ENTITES
L’entité peut être un individu (client, adhérent), un bien (article, dépôt, magasin, équipement…),un concept
(description d’une commande, inscription…).
Nous voyons apparaître ici trois entités : les adhérents les activités et les lieux de pratique.
Il s’agit maintenant de définir à quelle entité se rapportent les données recensées plus haut, c’est-à-dire de
quel objet ou entité elles deviennent l’attribut (ou la caractéristique).
Nous pouvons définir le schéma qui suit :
ADHERENT
Nom adhérent
Prénom adhérent ACTIVITE LIEU
Date de naissance
Adresse Nom du lieu
Code postal Nom activité Droit d’entrée
Ville
Numéro de téléphone Tarif activité
12
ADHERENT ACTIVITE
PRATIQUE
Num_adh Code_activ
Nom_adh Activ
Prén_adh Tarif
Dat_Nais_adh
Ad_adh
CP_adh UTILISE LIEU
Vil_adh Code_lieu
Num_tél_adh Lieu
Entrée
Num_adh est l’identifiant de la table ADHERENT. Ce champ sera défini comme clé primaireindexé
sans doublon.
Code_activ est l’identifiant de la table ACTIVITE. Il sera défini comme clé primaire indexé sansdoublon.
Code_lieu est l’identifiant de la table LIEU. Il sera défini comme clé primaire indexé sansdoublon.
LES REGLES DE GESTION
Ce sont les règles qui régissent notre application. Ici un adhérent peut pratiquer plusieurs activités, sur un
seul lieu. Il suffira qu’il paie le tarif des cotisations correspondant aux équipements utilisés, et le droit
d’entrée sur le lieu de pratique.
LE MODELE RELATIONNEL
Nous devons maintenant créer le modèle relationnel. Les
activités
Un adhérent peut pratiquer plusieurs ACTIVITES
Une activité peut être pratiquée par plusieurs ADHERENTS
Il y a donc une relation de plusieurs à plusieurs entre les tables ADHERENT et ACTIVITE.
Avec ACCESS, il n’est pas possible de créer un tel type de relation directement entre deux tables. Il faut
nécessairement transiter par une table intermédiaire. Pour cela, il faut remplacer l’association
matérialisée par le verbe utiliser par une nouvelle table qui servira de lien entre les2 autres tables.
Cette nouvelle table que nous appellerons PRATIQUE comprendra donc les champs suivants :
Num_adh, Code_activ
N.B Ces deux champs correspondent aux clés primaires des deux autres tables.
Nous établirons une relation de type un à plusieurs entre le champ Num_adh de la table
ADHERENT et le champ Num_adh de la table PRATIQUE.
Nous établirons une relation de type un à plusieurs entre le champ Code_activ de la table ACTIVITE et le
champ Code_activ de la table PRATIQUE.
Le lieu de pratique
Un adhérent ne pratique que sur un seul [Link] lieu
peut recevoir plusieurs adhérents.
N.B Nous avons donc une relation de un à plusieurs entre la table LIEU et la table ADHERENT.
Pour créer cette relation, nous allons devoir rajouter dans la table ADHERENT le code du lieu de pratique,
afin d’établir la relation directe entre le champ Code_lieu de la table LIEU et le champ Code_lieu de la table
ADHERENT.
Le modèle relationnel sera donc le suivant
13
III les redondances
Exemple
Il est nécessaire d’éviter les redondances dans le modèle relationnel. Prenons par exemple la table suivante
qui concerne les propriétaires de véhicules :
nom date tél n° immat marque type cv coul
Anis 10/2/88 [Link] 334419223 Renault R25 9 bleu
Ines 8/10/88 [Link] 778712025 Peugeot 405GR 7 vert
salim 7/7/89 [Link] 55418524 Volvo 245 8 blanc
Zoubir 21/4/90 [Link] 66719819 Peugeot 305 6 gris
Kamel 15/8/90 [Link] 12917825 Renault R25 9 blanc
Elle pose dans son utilisation un certain nombre de problèmes, liés à la redondance des données. Données
redondantes
La table fait apparaître une personne et ses coordonnées autant de fois qu’elle possède un véhicule.
Si Mr Salim change de N° de téléphone, il faut s’assurer que la mise à jour s’effectue bien sur les
Salim 7/7/89 [Link] Volvo 245 8 blanc
5541852
Zoubir 21/4/90 [Link] 6671981 Peugeot 305 6 gris
92
deux enregistrements le concernant.
Une autre redondance est liée à la correspondance Marque, Type, CV
10/2/88 [Link] Renault R25 9 bleu
Anis 33441922
15/8/90 [Link] 12917825 Renault R25 9 blanc
Kamel
5
Pour chaque propriétaire ayant une R25, il faudra saisir la marque et la puissance.
De plus, un même véhicule peut passer entre les mains de plusieurs propriétaires. Il faudra alorssaisir
toutes ces caractéristiques lorsqu’il changera de mains.
Solution
Les champs que nous trouvons dans cette table sont les attributs d’entités différentes. Nous allonsrattacher
ses attributs aux entités qu’ils caractérisent
Nom et Numéro de téléphone caractérisent l’entité PROPRIETAIRE
Numéro d’immatriculation, Marque, Type et Couleur caractérisent l’entité VEHICULEMarque et
Puissance caractérisent l’entité TYPE.
L’entité PROPRIETAIRE et l’entité VEHICULE sont liées par la notion de Possession. La relation est
matérialisée par le verbe Posséder : En effet, un propriétaire possède un ou plusieurs véhicules. Mais, un
même véhicule pourra avoir été possédé par plusieurs propriétaires successifs. Nous avons donc entre ces
deux entités une relation de plusieurs à plusieurs.
L’attribut Date d’achat ne caractérise pas l’une des entités mises en évidences ci-dessus. Par contre elle
caractérise le moment ou le propriétaire va posséder le véhicule.
L’entité VEHICULE et l’entité TYPE seront liées par la notion d’appartenance. La relation est matérialisée par
le verbe Appartenir. En effet un véhicule appartient à un TYPE et un seul.
La relation entre la table PROPRIETAIRES et la table VEHICULES est matérialisée par la table POSSEDE.
Celle-ci a comme attributs les deux clés primaires des deux tables et le champ Date d’achat, point de départ
de la possession du véhicule.
La relation entre la table VEHICULES et la table TYPES ne nécessite pas la création d’une table intermédiaire
puisqu’il s’agit d’une relation de un à plusieurs de la table TYPES vers la table VEHICULES.
14
PARTIE 3 CREATION ET MANIPULATION DES BASES DE DONNEE AVEC MS
ACCESS
15
Démarche :
1 : Lancez ACCESS
2 : Cliquez sur le bouton Base de
données vide pour le sélectionner
16
3 : Tapez le nom de
notre base de
5 : ...Une fois le
dossier choisi, vous
pouvez cliquer sur le
Résultat la base de données est créée. Nous pouvons commencer à créer son contenu
17
Découvrir l’interface graphique
18
CREATION ET MANIPULATION DES BASES DE DONNEE AVEC MS
ACCESS
Pour qu'une base de données Access existe, il faut au moins une table. Il peut bien évidemment y
en avoir plusieurs.
Les tables servent à emmagasiner les données stables (quand on dit données stables, cela veut
dire que leur structure est stable ; par exemple une table clients contiendra toujours des noms,
des adresses, etc. et ces éléments se retrouveront à un emplacement déterminé).
La table ressemble physiquement à une feuille de calcul Excel : il y a des colonnes, qui prennent ici
le nom de champs et des lignes qu'on appelle enregistrements.
Créer une table, c'est d'abord décider de sa structure c'est-à-dire quels champs il faut créer et quel
sera leur type de contenu (alphabétique, numérique, etc.)
Champs (colonnes)
Enregistrements
(lignes) Chaque ligne contiendra les coordonnées d’un client
(On saisira ces données plus tard)
19
Le travail va consister à décider les noms des champs puis à choisir le type de données qui figureront dedans.
(Par exemple, le nom de l'adhérent contiendra du texte exclusivement ; ce sera donc un champ de type
Texte)
Entrez les noms des champs tels qu'ils apparaissent ci-contre ; pour le moment ne touchezpas au type de données.
Vous obtenez
Jusque-là, vous travaillez sur la structure c'est-à-dire l'envers du décor. Pour visualiser ce que vousvenez de
créer, passez en mode feuille de données
20
Répondez oui à la question : la table doit d'abord être enregistrée, donnez-lui le nom
ADHÉRENTS et répondez non à la question laisser ACCESS définir une clé primaire.
Résultat (rappel : vous vous trouvez en mode feuille de données)
Pour continuer à travailler sur la structure de la table, il faut repasser en mode création.
Cliquez après le mot Texte sur la même ligne que CodeAd et choisissez Numérique. Cela veut dire que
le code de vos adhérents sera constitué de chiffres. Remarque : un champ Texte peut contenir des lettres ou
des chiffres, alors qu'un champ Numérique ne peut contenir que des chiffres.
Laissez les autres champs en texte.
Pour le CodePostal ; placez-vous sur sa ligne et limitez-le à 5 caractères en corrigeant les 50 en 5
dans la zone Taille de champ de l'onglet Général en bas
21
Cela veut dire que la zone à remplir pour le numéro de téléphone se présentera ainsi :
et que vous n'aurez pas à saisir les espaces. Il faut savoir que tout champ contenant un
masque de saisie, même s'il doit recevoir des chiffres, doit être obligatoirement un champ Texte.
Le curseur étant sur la ligne de Numtel, cliquez dans Masque de saisie puis sur les pointillés
qui vont lancer l'assistant. Laissez-vous guider par les écrans ; vous obtenez en fin de compte les
signes suivants sur la ligne Masque de saisie : 00\ 00\ 00\ 00\ 00; (remarque : en tapant ces
signes à la main, on obtiendrait le même résultat).
Ajoutez à la table ADHÉRENTS les DateAdDate/heure
, champ de type Individuel
pour saisir la date d'adhésion du membrepour savoir s'il appartient ou non à un comité d'entreprise Oui/Non
passer en mode feuille de données. pour voir le mode, cliquer sur mode création afin de voir si le masque
est actif. Repassez en mode création.
Ce serait intéressant de créer une liste déroulante pour les civilités, c'est à dire une listedans
laquelle il suffirait de choisir au lieu d'avoir à saisir.
Le curseur étant sur la ligne de Civilité, cliquez sur l'onglet Liste de choix puis sur la ligneZone
de texte et choisissez Zone de liste modifiable.
Dans un système de gestion de bases de données comme Access, pour toute table que l’on crée il
faut se poser une question : Quel est le champ qui contiendra pour chaque enregistrement
22
une caractéristique unique ?
Il est indispensable que toute table comporte un tel champ, de façon que le système puisse
identifier de manière certaine chaque enregistrement.
Dans la table ADHÉRENTS, quel champ va servir d’identifiant ?
C’est bien sûr le Code Adhérent : chaque adhérent aura le sien.
Pour indiquer au système que le champ CodeAd est l’identifiant unique, vous allez poser dessus
une clé (on dit une clé primaire).En mode création, sélectionnez la ligne declé s’insère en début de
ligne. CodeAd
cliquez sur l’icône de clé. Un symbole de Pour Access, cela signifie qu’il est impossible de donner
deux fois le même code dans latable.
Remarque : la clé est généralement posée sur un champ numérique mais techniquement rien
n'empêche de la poser sur un champ texte, dans la mesure où on est sûr que le contenu sera
unique dans la table. Il est possible aussi de poser une clé sur deux champs en même temps : à ce
moment-là ce sera l’association des deux contenus qui devra être unique.
Catégorie CodeTypeBateau
NbPersonnesMax NomBateau
NbPersonnesMin Autres champs
TarifHteSaison
TarifBsSaison
Depuis la fenêtre Base de données, dans, faites Créer une table en mode
création.
Constituez la table TYPES DE BATEAUX comme sur le modèle ci-contre. N’oubliez pas de
poser la clé sur le premier champ. Vérifiez que vous ne vous êtes pas trompé(e) de type de
données pour chaque champ. Pour les tarifs, mettez en plus de Monétaire un format DA dans
l'onglet du bas.
23
Refermez et enregistrez la table sous le nom TYPES DE BATEAUX (les données seront saisies
plus tard, de même que pour la table ADHÉRENTS)
Créez la table BATEAUX comme ci-contre en posant la clé sur ce champ. Refermez et
enregistrez la table sous le nom BATEAUX.
On pourrait aller chercher le CodeTypeBateau dans la table TYPE DE BATEAUX.
Création de la table CROISIÈRES
Créez la table CROISIÈRES comme ci-contre. Pour les champs monétaires, demandez un
format dinars.
Refermez la table.
La base comporte maintenant 4 tables : ADHÉRENTS, BATEAUX, TYPES DE BATEAUX
et CROISIÈRES.
Ainsi juxtaposées, les 4 tables ne communiquent pas entre elles. Les liaisons que vous allez établir
dans le chapitre suivant vont les rendre communicantes.
Quelles relations peut-on établir entre ces tables ? Pour trouver la réponse à cette question, on
utilise des phrases avec sujet, verbe, complément :
Le fait de réserver ou louer nous amène à créer deux autres tables : une table des réservations et
une table des locations dans laquelle seront stockés les éléments propres aux réservations ou aux
locations (exemple : la date ; celle-ci est bien une caractéristique de la réservation et non du
bateau).
24
Créez la table RÉSERVATIONS comme ci-contre.
Placez la clé sur le champ CodeResa
Pour la date, prenez un format Date, abrégé
Définition des relations
Cette partie du travail est particulièrement importante, car si vous rencontrez des problèmes ils se
répercuteront tout au long du travail. Il faut donc impérativement que les relations fonctionnent
parfaitement.
Depuis la fenêtre de la Base de données, cliquez sur l’icône Relations
Vous vous trouvez sur ADHÉRENTS ; cliquez Ajouter. Déplacez-vous sur BATEAUX, cliquez
Ajouter, et ainsi de suite sur CROISIÈRES puis LOCATIONS puis RÉSERVATIONS puis TYPES
DE BATEAUX.
Les 6 tables sont affichées. Cliquez Fermer . (Si par mégarde vous avez ajouté deux fois une
table, ôtez-la en appuyant sur la touche Suppr du clavier après l'avoir sélectionnée avec la souris)
Les tables peuvent être redimensionnées et déplacées comme n’importe quelle fenêtre Windows.
Aménagez-les pour obtenir ceci :
Remarquez que dans chaque table, le champ à clé se présente en caractères gras.
Il reste à tracer les relations.
25
Placez-vous sur CodeAd de la table ADHÉRENTS et sans lâcher le clic, tirez-le pour le déposer
sur le champ CodeAd de la table RÉSERVATIONS.
Dans la fenêtre qui apparaît, cochez Appliquer l’intégrité référentielle puis cliquez sur Créer.
Le résultat est une ligne qui va de CodeAd de la table ADHÉRENTS jusqu’à CodeAd de la table
RÉSERVATIONS.
Signification de cette ligne
Le système retrouve l’adhérent qui a réservé grâce à son code, indiqué dans la table des
RÉSERVATIONS
1. Le chiffre 1 et le symbole (infini) signifient que pour un adhérent, plusieurs réservations sont
possibles. En revanche, une réservation ne peut être attribuée qu’à un et un seul adhérent.
2. Le sens de la relation, de 1 à indique aussi que lorsque vous saisirez les données, il faudra
d’abord saisir celles de la table du côté du 1 (en clair : il ne sera pas possible d’enregistrer une
réservation pour un adhérent qui n’existe pas encore).
Définissez les autres relations pour obtenir ceci (chaque fois il suffit de prendre le champ de
démarrage et de le déposer sur le champ d'arrivée, attention de ne pas vous tromper).
Vérifiez bien que votre écran est conforme à cette image
A partir de maintenant, le modèle est prêt. On sait quelles sont les tables, quels sont les champs
qu’elles contiennent avec quel type de données à l’intérieur, on sait où se trouvent les clés, et on
sait quelles relations unissent les tables.
26
II Saisie de donnée et création de formulaire
Saisie de données en mode table
Rappel : d'après le modèle que vous avez déterminé, la saisie des données ne peut pas se faire
dans n'importe quel ordre ; la table des réservations devra être saisie en dernier, puisque les
chiffres 1 sont tous du côté des autres tables .
Depuis la fenêtre Base de données, dans les tables, double-cliquez sur ADHÉRENTS pour ouvrir la
table en mode Feuille de données. Vous obtenez :
Vous allez saisir le premier adhérent de la liste. Cliquez dans le champ CodeAd, 1ère ligne, et
saisissez 1 puis tabulateur pour passer au champ Civilité.
Cliquez sur la petite flèche de la liste déroulante et choisissez Madame.
Continuez à saisir les données du premier adhérent. Constatez que le masque de saisie pour le
téléphone a bien fonctionné. Un petit problème se pose cependant : la date de naissance n'a pas
été prévue. Vous allez remédier à cela.
La structure de la table peut encore être modifiée si cela ne touche pas au champ qui
comporte la clé. De plus il ne s'agit que d'ajouter un champ. Cliquez sur l'équerre pour passer en
mode création.
Saisie de données en mode formulaire
Grâce aux assistants d'Access, le travail va être facile.
Depuis la fenêtre Base de données, placez-vous sur la table TYPES DE BATEAUX et développez le
menu déroulant créer Formulaire
Vous avez devant les yeux un formulaire tout prêt. Il n'y a plus qu'à entrer les données dedans et
améliorer sa présentation, mais ceci est un détail que nous verrons par la suite.
27
Création du formulaire CROISIÈRES
De la même manière que précédemment, créez à partir de la table CROISIÈRES un
formulaire instantané et saisissez les données des croisières.
Pour les descriptifs, utilisez une forme abrégée.
Quand il n'y a qu'un tarif, mettez-le même pour adultes et enfants.
Pour la Formule, mettez 0 dans tarif adulte.
Refermez le formulaire en acceptant le nom CROISIÈRES proposé par le système.
Vous allez vérifier que les données saisies dans le formulaire sont bien présentes dans les tables.
28
Sélectionnez le champ NomAd ; cliquez sur l’icône A/Z. Immédiatement, la table est triée.
Constatez que les données de la ligne entière ont suivi le nom de l’adhérent.
Remarque : sous Excel, il peut arriver que les données soient déstructurées, si vous avez fait une
sélection malencontreuse ; avec Access, cela ne peut pas arriver.
Recherche
Vous recherchez l’adhérent Layouni Cliquez sur l’icône qui représente des jumelles.
Remplissez la fenêtre dialogue comme suit.
Vous voulez ressortir uniquement les adhérents qui habitent Annaba
Cliquez l’icône Filtrer par formulaire Placez-vous dans le champ Ville et choisissez Annaba
dans la petite liste. Ensuite, cliquez sur Appliquer le filtre
Vous avez devant les yeux la liste des adhérents de Annaba. Pour annuler le filtre, désactivez
l’icône (qui s’appelle maintenant Supprimer le filtre).
Supprimer le critère Annaba
.
Filtrez les adhérentsa nés après le 1er janvier 1965 (saisissez > 01/01/65 dans le champ
DateNaiss).
Faites d’autres essais à votre guise, n’oubliez pas d’ôter les critères entre deux essais, sinon le
système va chercher des enregistrements qui correspondent à la fois à plusieurs critères et n’aura
peut-être pas de réponse).
Améliorer la présentation d'un formulaire
Jusqu'ici nous ne nous sommes pas intéressés à la présentation car d'autres choses étaient plus
importantes… toutefois il est toujours plus agréable de travailler sur un écran convivial et c'est
pourquoi vous allez consacrer un peu de temps à améliorer votre cadre de saisie. Ceci est dans
votre intérêt personnel, mais il faut penser que, dans l'entreprise, ce sont peut-être d'autres
personnes qui devront saisir des données et qu'il est bon de leur faciliter aussi le travail.
Depuis la fenêtre Base de données, dans l'élément Tables, placez-vous sur ADHÉRENTS et
créez un formulaire instantané comme d'habitude.
Vous obtenez :
Passez en mode Création
Vous allez travailler sur « l'envers » du décor. A tout moment, vous pouvez passer en mode
Visualisation pour voir l’effet produit par vos manipulations.
Cliquez sur la zone de texte CodeAd : l’ensemble du contrôle est sélectionné.
Déplacez-le vers la droite ; vous pouvez constater que l’ensemble du contrôle se déplace.
Maintenant vous allez déplacer uniquement l’étiquette. Pour cela, cliquez précisément sur le
petit carré noir en haut à gauche de l’étiquette. Le curseur prend la forme d’une main doigt levé.
Rapprochez l’étiquette de la zone de texte. Observez bien de quelle manière apparaissent les
marques de sélection dans les différents cas.
Les étiquettes sont des emplacements où on peut écrire ce qu’on veut, alors que les zones de
textes correspondent pour le système à des champs qui ont été définis dans la base de données.
29
Ainsi vous ne pouvez changer le mot CodeAd de la zone de texte à fond blanc sans perturber le
fonctionnement. En revanche, le mot CodeAd sur fond gris de l’étiquette peut être modifié.
30
Passez en mode Feuille de données
Dans la boîte à outils, (affichez-la si nécessaire) choisissez l'outil Bouton de commande.
Dessinez un petit rectangle avec cet outil dans la zone en-tête du formulaire, à droite de
l'étiquette ADHERENTS.
Choisissez les paramètres suivants : Opérations sur formulaire et Fermer formulaire
Dans la boîte suivante, choisissez Texte Fermer Formulaire, Ok, puis donnez comme nom à
votre bouton Fermer Adhérents.
Passez en mode Affichage pour juger du résultat. Testez le fonctionnement de votre bouton.
31
Double-cliquez les champs suivants : CodeAd, NomAd, Prénom, Ville
Vous obtenez quoi.
Sur la ligne Critères du champ Ville saisissez Annaba. Vous obtenez :
Exécutez la requête en appuyant sur l’icône point d’exclamation de la barre d’outils.
Le résultat s’affiche : il y a 2 clients à Annaba..
Refermez la requête ; donnez-lui le nom
ADHÉRENT Annaba.
Requête Tri
Vous voulez disposer à tout moment d’une liste des clients triée par codes postaux puis
alphabétiquement à l‘intérieur de ce classement.
Requête, Création d’une requête en mode Création
Ajoutez la table ADHÉRENTS. Fermez.
Ajoutez les champs CodePostal, NomAd , Prénom, Adresse , Ville
Dans la ligne Tri des champs CodePostal et NomAd, choisissez tri Croissant. Un premier tri va
s’effectuer sur le code postal, premier champ rencontré par le système puis un deuxième tri
sur le champ Nom.
Exécutez la requête puis refermez-la en lui donnant le nom Liste des clients par localités.
pour le 23/06 pour 40 adultes et 11 enfants pour le 7 juillet pour 52 personnes (35 adultes
entre 3 et 12 ans et 17 enfants)
Layouni Zoubir
84 Cité Belevedere
Tour C N° 27
Tél. 02 97 45 78 12 Né le 7/3/62
Vous allez l’enregistrer dans le formulaire ADHÉRENTS ; toutefois vous avez remarqué que
vous êtes obligé de taper en majuscules le nom de famille ; il serait préférable de disposer d’un
système où la saisie serait faite en majuscules même si on tape en minuscules. Il y a une solution !
Ouvrez le formulaire en mode Création . Placez-vous sur le champ NomAd, ouvrez la fenêtre
des propriétés, onglet Format. Sur la ligne Format , saisissez simplement le caractère > (il forcera
l’affichage en majuscules dans ce champ).
Repassez en mode Affichage pour saisir votre nouvel adhérent et constatez que votre
manipulation a porté ses fruits.
Enregistrez la location dans le formulaire LOCATIONS.
Vous allez donc créer une requête qui procédera automatiquement à l’augmentation des prix.
Dans l’élément Requêtes de la fenêtre Base de données, créez une requête en mode Création.
Ajoutez la table TYPES DE BATEAUX, affichez tous les champs sauf les nombres de
personnes.
Cliquez sur le menu Requête et choisissez Requête Mise à jour, ce qui aura pour effet
d’ajouter une ligne Mise à jour dans vos champs.
Saisissez comme ci-dessous les expressions de calcul dans les champs des tarifs (attention,
pas d’erreur de saisie, sans quoi cela ne marchera pas)
Exécutez la requête. Attention, ne faites la manœuvre qu’une seule fois ! Si vous la lancez
plusieurs fois, les prix seront augmentés plusieurs fois de 10 %, et à chaque fois… sur la base déjà
augmentée… Il faudra alors calculer le coefficient capable de ramener les choses à leur état initial.
Donc vous l’exécutez une seule fois et vous cliquez sur Feuille de données pour voir le résultat.
Requête Somme/Regroupement
Vous aimeriez disposer d’un moyen permanent de connaître ce qu’a rapporté globalement chaque
type de croisière
Créez une requête en mode Création, ajoutez la requête Pour formulaire RÉSERVATIONS,
affichez les champs Coût et [Link].
Cliquez l’icône de la barre d’outils qui aura pour effet d’ajouter une ligne Regroupement
dans vos champs.
Dans cette ligne pour le champ Coût, déroulez la liste et choisissez Somme. Pour le deuxième
champ, laissez Regroupement.
Exécutez la requête. Fermez la requête et enregistrez-la sous le nom Chiffre d’affaires
croisières. Vous pourrez à tout moment lancer cette requête et connaître ainsi votre chiffre
d’affaires croisières.
Requête sélection.
Vous souhaiteriez disposer à moments réguliers de la liste des clients ayant loué un bateau et de
celle des clients ayant réservé une croisière. Cela pourra être édité sous forme d’état, ce que vous
allez étudier dans le chapitre suivant. Mais il faut déjà disposer de la requête qui fait l’extraction de
données.
Créez une requête en mode Création, ajoutez les tables ADHÉRENTS, RÉSERVATIONS,
CROISIÈRES.
Affichez les champs : Nom , Prénom, Ville, Individuel de la table ADHÉRENTS, NbAd et NbEnf
de la table RÉSERVATIONS, NomCrois de la table CROISIERES.
Pour connaître le nombre total de personnes de chaque croisière, créez un champ calculé sur
le premier champ vierge, ainsi paramétré :
Nb Total :[NbAd]+[NbEnf]
Exécutez la requête.
Vous voudriez que la liste soit triée par ordre alphabétique des clients. Que pouvez-vous modifier
dans la requête pour l’obtenir ?
35
PARTIE 4 TRAVAUX D'APPLICATION
36
Travaux d'application
Introduction
Les travaux d’applications sont conçu pour être une synthèse des acquis théorique vue dans le
modules 5 « manipulation de base de données », ils sont poses sous forme d’atelier enchaîner qui
abouti a l’élaboration d’une application de base de donnée touchant la totalité des fonctionnalités d’un
SGBDR Tel que MS Access. Le projet est porté sur la GESTION D’UN FOURNISSEUR DE
PHARMACIES.
1 Création de tables
Objectifs : Créer une base de donnée sous MS Access
Créer des tables sous MS Access
Définir des Clés
Un laboratoire de médicaments désire informatiser la gestion de stock des médicaments ainsi que
la gestion des commandes, et les médicaments périmés et d’autres opérations manuelles.
1) Créer une nouvelle base de données sur le disque dur, en précisant le nom de la base « gestion
d’un Laboratoire de médicaments ».
2) Créer la table « médicaments » pour le stockage des informations concernant tous les
médicaments.
Sur la 1ère colonne, vous préciserez les noms des champs,
Sur la 2ème colonne, vous préciserez les types des champs,
Sur la 3ème colonne, vous donnez les descriptions des champs.
La liste des champs de la table « médicaments » est la suivante :
4) Une fois les noms des champs spécifiés, vous devez définir la clé primaire pour la table en
utilisant l’icône .
5) Créer la table Catégorie de médicament nommée (Catégorie)
La liste des champs de la table « Catégorie » est la suivante :
Entrez les données des médicaments dans la table « médicaments », en cliquant sur le bouton
table puis ouvrir.
37
Informations à saisir dans la table médicaments :
…. ……
Après avoir défini chaque nouveau format, basculez du mode création vers le mode feuille
de données pour tester le format que vous venez de créer
1. Référence médicament doit être numérique
2. Le Libellé du médicament doit avoir une entrée indispensable, sachant qu’une chaîne vide
est interdite
3. La quantité min doit avoir une valeur par défaut « 10 ».
4. Le libellé du médicament doit être saisi en majuscule et affiché en bleu
5. Le tel domicile doit comporter uniquement des chiffres
6. La date de péremption doit être supérieure à la date du système
7. La Quantité min doit être comprise entre 10 et 100
8. Pour la date de péremption, elle doit être comprise entre date système +1 jour et la date
système + 5ans.
9. Lorsque vous entrez une date qui ne respecte pas la règle de validité, Access ouvre une
boîte de dialogue affichant un message d’erreur. Modifiez le message de cette boîte de
dialogue.
10. Créer une règle de validité qui permet de contrôler si la quantité en stock est supérieure à
la quantité min. (Propriété de la table). Afficher un message d’erreur personnalisé.
38
4- Les Requêtes
[Link]éer une requête permettant l’affichage de la liste des pharmacies se trouvant à Annaba.
[Link]éer une requête permettant l’affichage de la liste des pharmacies se trouvant à Annaba
et dont le numéro de téléphone commence par le 77.
[Link]éer une requête permettant l’affichage du nombre total d’achat par pharmacie pendant
une année.
[Link]éer une requête permettant l’affichage du nombre total de médicaments par catégorie
donnée comme paramètre.
[Link]éer une requête paramétrée permettant d’afficher le montant minimum d’achat
d’une pharmacie.
[Link] le prix de médicament le plus cher d’une catégorie donnée.
[Link]éer la requête qui affiche les noms des médicaments dont la date de péremption
est aujourd’hui.
[Link] de 10% le prix des médicaments dont le prix est supérieur à 100.
[Link]ête Suppression
Requête suppression permettant de supprimer un médicament quelconque dans la
table médicament.
Requête suppression permettant de supprimer les achats passés avant le
(01/01/2021).
Requête suppression permettant de supprimer les achats d’une pharmacie donnée.
5- Les Formulaires
2. Utilisez les boutons de navigation, situés en bas du formulaire, pour passer d’un
enregistrement à un autre.
3. Créez un deuxième formulaire mode création de la table Catégorie.
4. Modifiez le format de votre formulaire en basculant en mode création.
5. Créez un formulaire de la table « médicament» dans le formulaire (représentantles
valeurs en lignes et colonnes comme un tableau d’une feuille).
6. Insérez dans votre formulaire un graphique Excel représentant les données suivantes :
40
Choisissez le menu Insertion / Objet.
Cherchez le nom du fichier à insérer à partir du bouton Parcourir.
Spécifier le chemin de recherche et appuyer sur Ouvrir.
Créer un nouveau formulaire de la table Pharmacie en insérant le nouveau champ
« logo ».
7- Les Etats
Objectifs : Créer et imprimer les états basant sur des tables et des requêtes
Créer des de regroupement
Mettre en forme les états
41
Cliquez sur Etat puis sur le bouton Nouveau ;
Cliquez sur Assistant Etiquette ;
Choisissez la table pharmacie ;
Choisissez la mise en forme de vos étiquettes et le format de vos étiquettes ;
Placez les champs
Cliquez sur le bouton Terminer pour visualiser le résultat.
5. On vous propose la réalisation d'un état où les médicaments seront regroupés par ordre
alphabétique.
6. Créez un état l'Assistant Etat en vous basant sur la table médicaments ;
Placez les champs nécessaires pour obtenir un état;
Choisissez le champ Nom médicament comme champ de regroupement ;
Choisissez un type de présentation, puis un style et cliquez sur le bouton Terminer.
7. Créer un état de la table médicament basé sur une mise en forme conditionnelle
permettant de sélectionner les prix de médicament >50 DA.
8. Créer un état basé sur une mise en forme conditionnelle permettant de sélectionner les
médicaments dont la quantité stock < à la quantité minimal.
9. Créer l’état qui permet d’afficher la somme des achats de chaque pharmacie par page.
[Link]éer l’état qui permet de regrouper les médicaments par ordre alphabétique (Utiliser
l’option trier et regrouper) et changer la propriété de la zone (Gauche$([libelle
médicament] ;
[Link]éer l’état qui affiche à partir d’une requête croisé dynamique le nombre de médicaments
par catégorie et par date de péremption.
8- Les Macros
Objectifs : Consulter des données dépendants dans deux formulaires, en Utilisant les macros.
Gérer et naviguer entre les différents objets de MS Access en utilisantles macros.
Travail effectuéavec:
Un micro-ordinateur pour 2 étudiants
Un logiciel de base de données MS ACCESS
Une imprimante
1. Comment synchroniser l’affichage de deux formulaires après ouverture via une macro
Exemple (Liste des médicaments par catégorie).
2. Créer des formulaires de la table médicament à plusieurs pages via le contrôle saut de
page et d’une Macro ?
42
Exemple
43
3. Définissez la clé primaire de chaque table.
4. Entrez les données dans les tables pour pouvoir effectuer des tests d’extractions au niveau
des requêtes.
Tables Clients
Tables Commandes
5. Créez :
Une requête permettant l’affichage des commandes passées entre le 01/2020 et le
12/2020
Une requête paramétrée permettant l’affichage des commandes entre une date de
début et une date de fin.
6. Créez une requête permettant l’affichage du nombre de commandes par client à Annaba.
7. Créer une requête permettant l’affichage de tous les clients étrangers.
8. Créer la requête qui permet de sélectionner les clients dont le pays est le Algérie ou dont la
ville est Alger.
9. Créez une requête permettant l’affichage de l’entête d’une commande c’est-à-dire
(l’ensemble des informations de la commande et le client qui a passé la commande).
[Link]éez une requête permettant l’affichage du détail de la commande C’est-à-dire pour
chaque ligne commande (code ligne commande, libellé article, prix unitaire, quantité
commandée et une expression de calcul permettant de calculer le montant de ligne
commande).
[Link]éez une requête permettant l’affichage du pied de commande c’est-à-dire pour chaque
44
commande, le montant total des lignes commande.
[Link]éer un formulaire qui permet l’affichage des informations de la table article en accordant
une remise de prix pour chaque article de 0,75.
[Link]éer le formulaire qui permet d’afficher la liste des bons de commandes par client.
[Link]éez un formulaire permettant l’affichage d’une commande.
45
PARTIE 5 EXERCICES D’APPLICATIONS (LANGAGE SQL)
Gestion d’une bibliothèque.( l’énoncé complet du problème est sur la
Plateforme, E-learning : [Link] :
Exercice 1 :
Select nom_éditeur, ville, région
from éditeurs
Exercice 2 :
SELECT nom_employé, pn_employé, date_embauche, position_employé
FROM employé
WHERE (nom_employé LIKE 'L%') AND (date_embauche LIKE '%1990%') AND (position_employé
BETWEEN 10 AND 100)
Exercice 3 :
nom_employé id_éditeur
Barizam 0736
Iskander 0736
Jordanien 0736
Karabaghli 0736
Lechheb 0736
Menaceur 0736
Odaifia 0736
Salhi 0736
Senhadji 0736
…etc … (43 ligne(s) affectée(s))
Exercice 4 :
SELECT nom_auteur, pays, adresse
FROM auteurs
WHERE pays IN ('FR','CH', 'BE')
Exercice 5 :
SELECT position_employé, count(*), MIN(date_embauche),MAX(date_embauche)
FROM employé
GROUP BY position_employé
Position employé
Exercice 6 :
SELECT id_titre, MAX(droits)
FROM droits_prévus
GROUP BY id_titre
id_titre
BU1032 12
BU1111 24
BU2075 24
BU7832 24
MC2222 20
MC3021 24
..etc… (16 ligne(s) affectée(s))
Exercice 7 :
select ville, nom_éditeur, count(*)
from éditeurs
GROUP BY ville, nom_éditeur
HAVING ville LIKE '%L%' OR ville LIKE '%B%'
ville nom_éditeur
Exercice 8 :
SELECT droits, id_titre, minimum, maximum
FROM droits_prévus
ORDER BY droits
47
droits id_titre minimum maximum
10 BU1032 0 5000
10 PC1035 0 2000
10 BU2075 0 1000
10 PS2091 0 1000
….etc…
count
========
16
Exercice 9 :
SELECT nom_auteur, titre, prix
FROM auteurs a, titres t, titreauteur ta
WHERE (ville = 'Annaba') AND (a.id_auteur = ta.id_auteur) AND (ta.id_titre = t.id_titre)
Exercice 10
SELECT nom_éditeur, nom_auteur, titre, qt
FROM auteurs a,titreauteur ta, titres t, éditeurs e, ventes v
WHERE (a.id_auteur = ta.id_auteur) AND (ta.id_titre = t.id_titre) AND (t.id_éditeur = e.id_éditeur)
AND (t.id_titre = v.id_titre)
ORDER BY nom_éditeur
COMPUTE SUM(qt) BY nom_éditeur
Exercice 11
Exercice 12
SELECT nom_auteur, pn_auteur
FROM auteurs a
WHERE id_auteur IN (SELECT id_auteur FROM titreauteur) /* l’auteur doit avoir écrit au moins
un livre */
AND 100 = ALL (SELECT droits_pourcent
FROM titreauteur
WHERE a.id_auteur = id_auteur)
ORDER BY nom_auteur
48
nom_auteur pn_auteur
selmi zoubir
Senhadji abesse
Chettah mohamed
Chergrouche Ali
(4 ligne(s) affectée(s))
Exercice 13 :
SELECT titre, prix
FROM titres
WHERE prix = (SELECT MAX (prix)
FROM titres )
titre prix
Exercice 14 :
Afficher la liste des titres et le cumul de leurs ventes, tous magasins confondus, classés par ordre
croissant des ventes
SELECT titre, somme = (SELECT SUM (qt)
FROM ventes v
WHERE t.id_titre = v.id_titre)
FROM titres t
ORDER BY somme
Titre somme
Exercice 15 :
Afficher le titre du livre le plus vendu de tous les magasins, et le nom de ce magasin
SELECT titre, nom_mag
FROM titres t, ventes v, magasins m
WHERE t.id_titre = v.id_titre
AND [Link] = ( SELECT MAX(qt)
FROM ventes)
AND v.id_mag = m.id_mag
titre nom_mag
49
La colère : notre ennemie ? Librairie spécialisée
Exercice 16 :
Rentrez vos noms, prénoms, dans la table auteurs, avec un identificateur qui n'existe pas déjà
Exercice 17 :
Recopier toutes les caractéristiques d'un auteur en lui donnant un nouvel identificateur, et un
nouveau nom
INSERT auteurs (id_auteur, nom_auteur, pn_auteur, téléphone, adresse, ville, pays, code_postal,
contrat)
SELECT '100-00-1200', 'toto', pn_auteur,téléphone, adresse, ville, pays, code_postal, contrat
FROM auteurs
WHERE nom_auteur = 'Layouni'
Exercice 18 :
Augmenter de 10% tous les prix des livres de l’éditeur « data Infosystems». Vérifier l’opérationpar
une commande Select adéquate avant et après l’augmentation.
SELECT titre, prix
FROM titres t, éditeurs e
WHERE t.id_éditeur = e.id_éditeur
AND nom_éditeur = "data Infosystems"
AND prix is not NULL
UPDATE titres
SET prix = 1.10 * prix
WHERE prix is not NULL
AND id_éditeur = (SELECT id_éditeur
FROM éditeurs
WHERE nom_éditeur = "data Infosystems")
Exercice 19 : Détruire les lignes crées dans la tables auteur, dans les exercices 16 et 17
DELETE auteurs
FROM auteurs
where nom_auteur ='Layouni'
50
EVALUATION (Solution donnée sur la plateforme E-learning)
La compagnie NUMIDIA Travel de transport envisage d’intégrer dans son site web la
gestion des réservations et paiement en ligne des voyages planifiés. A cet effet, le
directeur de la compagnie veut implanter au préalable la nouvelle gestion des réservations
et paiement enligne sous Access et par la suite la migrer vers SQL Server .
Table Client
Nom de champ Signification Type Taille/Format
CINClient CIN de Client Texte 10
NomClient Nom de Client Texte 20
PrénomClient Prénom de Client Texte 15
TelClien Téléphone de Client Texte 12
Table Billet
Nom de champ Signification Type Taille/Format
NumBillet Numéro de Billet Numérique Entier long
CINClient CIN Client Texte 10
CodeVoyage Code Voyage Numérique Entier
DateBillet Date de Billet Date et heure Abrégé
NumPlace Numéro de Place Numérique Octet
Réglé Reglé Oui/Non
EtatPlace Etat de Place Texte 7
51
Table Voyage
Nom de champ Signification Type Taille/Format
CodeVoyage Code de Voyage Numerique Entier
HeureDepartVoyage Heure de Départ de Voyage Date et heure Heure Abrégé
Ville_Départ Ville de départ de voyage texte 15
HeureArrivéVoyage Heure d’Arriver de Voyage Date et heure Heure Abrégé
VilleArrivéVoyage Ville d’Arriver de Voyage Texte 15
PrixVoyage Prix de Voyage Monetaire Dh
Table Place
Nom de champ Signification Type Taille/Format
NumPlace Numéro de la place Numérique octet
Travail demandé
1. Pour chaque table ci-dessus, créer sa structure. Utiliser les mêmes clés primaires
indiquées dans le MLD ci-dessus et créer les relations entrer ces tables
2. Saisie les enregistrements donnés dans l’annexe ci-dessus pour chaque table de la base
donnée.
3. Créer une requête qui affiche les informations sur un client en introduisant son CIN et
l’entreprise sous R_CIN_client
4. Créer une requête qui affiche les informations sur un voyage planifié en introduisant la
ville de départ et la ville d’arriver puis l’enregistrer sous R_Client_CIN
5. Créer un formulaire base sur la requête R_Client_CIN et l’enregistrer sous
F_Client_CIN
6. Créer une requête qui affiche les informations sur le billet + voyage et l’enregistrer
sous R_Réservation
7. Créer un formulaire base sur la requête R_voyage et l’enregistrer sous
F_Voyage
8. Créer un formulaire base sur la table voyage (Ajouter/modifier/Supprimer) et
l’enregistrer sous F_Voyage
9. Créer un formulaire base sur la requête R_Réservation et l’enregistrer sous
F_Réservation comme est montre dans la figure suivante :
52
Réservation
N° Billet Date
CIN
Code Voyage
Billet
Le bouton affiche les information sur un voyage a choisir et remplir les champ de voyage
dans ce formulaire
Le bouton nouvelle réservation vide tous le champs
Le bouton billet imprime le billet de la place réservé
Le bouton menu retourne vers le formulaire ci-dessus
10. Créer l’état qui fait sortir des billes payées par un client donné dans une date de
voyage comme le montre la figure suivante et l’enregistrer sous E_billets et le lier au
bouton « Billet » du formulaire du Réservation. (6 Pts)
SARL NUMIDIATravel
N° : 0012500254 Date :01/01/21
53
Recueil d’exercices :
b- La class description doit être de cette forme « BAC3, BAC2, BIT1, et PAC2... >>
ou les trois 1er caractères sont alphabétiques et en majuscules, le dernier caractère est un nombre, toutes les caractère
sont obligatoire .
c- La description de Matière prend une valeur de la liste suivante (math, Access, droit, économie, comptabilité), ou
Access est la valeur défaut.
e- L’élève numéros de téléphone est de la forme (00961) 06/123456, ou le zip code n’est pas obligatoire a saisir.
Questions
1- Définir les clés primaires de toutes les tables, en justifiant votre choix pour la 4eme table.
2- Ajouter le champ « class_id >> a une des tables pour que chaque élève possède une class.
3- Détérminer les relations existantes entre les tables et montrer leurs cardinalités.
4- Ecrire les propriétés suivantes (nom champ, type de données, propriétés de champ) pour les champs mentionnés
dans les contraintes précédentes.
Requête 1: Affiche en ordre décroissent les noms des élèves qui habite a << blida >> Requête 2: Affiche les matières
description, ou la matière coefficient est plus grande que 10. Requête 3: Affiche en ordre croissant la class description de
chaque élève.
Requête 5: Affiche les noms des élèves de la classe << BAC3 >> et << BAD3 >>.
Requête 6: Affiche les notes et les noms des élèves de la class << BAD2 >> pour la matière << Math >> en 17/3/2008.
Requête 7: Affiche les noms des élèves qui se terminent avec la lettre “A >>.
Requête 8: Affiche test_id des tests qui sont faites avant 5/5/2007.
Requête 9: Affiche les noms des élèves qui ont réussi pour la classe << BAC2 >> en 13/4/2008. N.B : l’élève réussi
quand il a 1000 et plus comme note final.
Pour chaque Requête indiquer les tables nécessaires avec les relations entre ces tables.
Affichez la masse salariale des employés embauchés en 1993 repartit par lieu de travail.
54
* Utilisation de l'opération Où.
Affichez le nombre de personnes pour l'entreprise par lieu de travail et par occupation.
* Utilisation de l'opération Compte.
Déterminez le nombre de vendeurs "champions" ayant récolté une commission de 45 000 DA ou plus.
* Utilisation des opérations Compte et Où.
Affichez la somme de la masse salariale de la compagnie divisée par lieu de travail et par poste.
Il s'agit aussi d'une requête qui a besoin d'une opération (somme). Il faut ajouter encore plus de détails que les deux
dernières requêtes. Dans ce cas, il faut ajouter les champs Bureau et poste en plus de calculer les revenus.
Tri:
Afficher : X X X
Critère :
Ou :
Résultat
Plus que vous ajoutez de champs, plus que la réponse sera détaillée. À l'exercice 11, il y avait seulement un champ pour
le total des revenus. À l'exercice 12, il y avait en plus du champ des revenus celui des postes. Le résultat de la requête
est plus détaillé qu'auparavant. Avec cette question et trois champs à l'affichage, le résultat est encore plus détaillé.
Affichez la masse salariale des employés embauchés en 2020 repartit par lieu de travail.
Vous avez remarqué dans les trois derniers exercices qu'à chaque fois que vous ajoutez un champ à la requête que la
réponse devient de plus en plus détaillée. Mais, que faire lorsqu'il faut faire une opération avec des critères sans détailler
sur ceux-ci ? Il existe une opération pour régler cette situation. L'opération "Où" est utilisée lorsqu'on veut ajouter une
condition à une requête sans pour autant détaillé la réponse sur cette condition. Pour l'exemple, le champ Embauche est
utilisé pour trouver les employés qui ont été embauché en 1993. Cependant, le revenu n'est pas distribué pour chacune
des dates d'embauche de cette année.
55
Critère
Tri:
Afficher : X X
Ou :
Résultat
Bureau Revenus
Annaba 88 000 DA
Si vous n'aviez pas utilisé l'opération "Où", et laissé à l'opération regroupement pour le champ Embauche, le résultat
aurait affiché le cumulatif des revenus par bureau et par date d'embauche des employés de la compagnie.
Affichez le nombre de personnes pour l'entreprise par lieu de travail et par occupation.
Cet exercice est pour vous démontrer le fonctionnement de l'opération Compte. Cette opération, comme le nom l'indique,
compte le nombre d'enregistrements qui répondent aux critères demandés. Aussi, comme pour toutes les opérations, à
chaque fois que vous ajoutez un champ à la requête, la réponse devient de plus en plus détaillée.
Critère
Afficher : X X X
Critère :
Ou :
Résultat
Annaba Gérant 1
Constantine Vendeur 3
Annaba Gérant 1
56
Constantine Vendeur 2
Afficher : X X X
Critère :
Ou :
Résultat
Annaba Gérant 0
Annaba Vendeur 3
Constantine Gérant 0
Constantine Vendeur 2
Il n'y a plus de gérants! Pourquoi y a-t-il une différence? Access n'ajoute pas les enregistrements dont le contenu du
champ est vide. Comme vous l'avez vu à l'exercice 7, le contenu du champ commentaire est vide pour les gérants de
l'entreprise. Il est donc fortement suggéré de toujours utiliser avec l'opération Compte un champ dont on est certain qu'il
y a un contenu. Vous pouvez l'un des autres champs de la requête ou le champ qui sert de clé primaire de la table. Par
définition, celui-ci ne peut jamais être vide.
Déterminez le nombre de vendeurs "champions" ayant récolté une commission de 45 000 DA ou plus.
L'exercice consiste à utiliser l'opération Compte pour connaître le nombre de personnes qui répondent aux critères
mentionnés ci-dessus. Cet exercice ressemble beaucoup à exercice précédent. La différence est que cet exercice utilise
l'opération Compte au lieu de l'opération Somme. Puisque les gérants de l'entreprise n'ont pas de commissions, le champ
Poste est inutile pour compter seulement les vendeurs.
Opération : Compte Où
Tri:
Afficher : X
Critère : >=45000
Ou :
57
Résultat
Nombre
Critère
Tri :
Afficher : X X X
Critère :
Ou :
Résultat
Anis Layouni 10
Dounia Layachi 10
Salim Riad 9
halim Bennacer 9
ilhem houda 9
salhi Lechheb 9
bilel Gedyira 9
58
Il y a aussi d'autres fonctions du groupe Date/Heure qui pourrait vous intéresser. Il y a la fonction maintenant() qui
donne non seulement la date mais aussi l'heure de l'ordinateur. Donc, au lieu d'avoir juste le 98-01-01 avec la
fonction date(), il est possible d'avoir avec la fonction maintenant() 98-01-01 [Link] . Il y d'autres fonctions tel
que jour(), joursem(), mois() et plusieurs autres qui sont disponibles dans la catégorie Date/Heure. Il ne faut pas
oublier qu'Access vous offre 176 fonctions distribuées dans 16 catégories.
Note sur les champs de type Date/Heure.
Bien qu'Access affiche l'information sous forme de date ou d'heure, les informations sont conservées dans le logiciel sous
forme numérique. Par exemple, le chiffre 37222 équivaut au 27 novembre 2020. Donc 37222,5 équivaut à midi le 27
novembre 2020.
2- Affichez à côté du prénom et du nom des employés de l'entreprise le texte "champion" pour ceux qui ont
une commission de 45 000 DA ou plus. Placez le texte "Désolé" à côte de ceux qui ne répondent pas au
critère précédent.
Cet exercice est pour vous démontrer la fonction Vraifaux pour afficher du texte. Elle fonctionne sur le même principe que
la fonction =Si d'Excel. Elle lui faut trois informations, ou trois "paramètres", pour fonctionner correctement: la condition,
que faire si vrai et que faire si faux. Ces paramètres sont séparés par un point-virgule (;). On vous demande ici d'écrire le
texte "Champion" si la personne a une commission de 45 000 DA ou plus. Sinon, il faut afficher le texte "Désolé".
Critère
Tri:
Afficher : X X X
Critère :
Ou :
Résultat
Pour cet exercice, la fonction Vraifaux a été utilisée pour afficher du texte. Vous pouvez aussi l'utiliser pour aussi afficher
des chiffres comme dans le prochain exercice.
3- Affichez la commission des vendeurs si on donnait une prime de 5 000 DA à ceux ayant une commission de
45 000 DA ou plus.
C'est dans ce genre de situation de la fonction vraifaux est vraiment avantageuse. Elle s'applique seulement si les
conditions requises sont remplies. Dans l'exercice précédent, la fonction Vraifaux() était utilisée avec du texte. Ici la
fonction est utilisée pour calculer un chiffre.
59
Critère
Tri:
Afficher : X X X
Critère :
Ou :
Résultat
Riad Latreche 0
Riad Dafri 0
Pouvez-vous préparer une requête qui démontrait la différence à la masse salariale avec et sans cette prime? Vous
devriez être capable si vous avez bien compris les exercices précédents.
Il y a une fonction très puissante qui n'a pas été couverte jusqu'à présent: les opérations de regroupement. Il est possible
avec les opérations de regrouper les enregistrements pour pouvoir les additionner, les compter, trouver la moyenne, le
plus petit, le plus grand et plusieurs autres. C'est aussi une opportunité de revoir les champs calculés pour déterminer la
masse salariale de l'entreprise. On utilise encore une fois un champ calculé pour déterminer le revenu (salaire +
commission) de chaque employé.
-De la barre d'outils, appuyez sur le bouton S OU du menu Affichage, sélectionnez l'option Opérations.
Une nouvelle ligne s'est insérée en dessous de la ligne des champs. C'est la ligne des opérations. Access vous permet
d'accomplir des opérations mathématiques sur les enregistrements d'une requête. Si vous regardez les opérations
possibles, vous retrouverez parmi d'autres la somme, la moyenne, le plus petit (min), la plus grande (max) etc.
60
Critère
Opération: Somme
Tri:
Afficher : X
Critère :
Ou :
Résultat
Revenu
295 000 DA
Il y a aussi une autre manière de réaliser la requête en utilisant la fonction somme. Voici à quoi elle ressemblerait.
Critère
Tri:
Afficher : X
Critère :
Ou :
Dans ce cas, elle n'est pas vraiment plus pratique que l'opération somme. Elle est cependant plus pratique lorsqu'elle est
utilisée dans un champ calculé avec d'autres fonctions. Par exemple: somme([commission] +
[salaire])/compte([bureau]). En passant, cette dernière formule est l'équivalent de moyenne([salaire] + [commission]).
- De la barre d'outils, appuyez sur le bouton S .OU du menu Affichage, sélectionnez l'option Opérations.
Critère
Tri:
Afficher : X X
Critère :
Ou :
61
Résultat
Poste Revenu
Gérant 93 000 DA
La masse salariale de l'entreprise est maintenant réparti selon le poste de travail: gérant ou vendeur. Pour l'exemple, il y
a seulement deux postes. S'il y aurait eu plus que cela, chaque poste serait affiché avec son revenu équivalent.
2- Affichez le prénom, nom de toutes les personnes dont le nom de famille commence par la lettre " L ".
* Comme * .
3- Affichez le prénom, nom et salaire des personnes ayant un salaire supérieur à 45 000 DA.
* , =,<, ,=,<, = et type numérique .
5- Affichez le prénom et le nom des employés ayant la permanence selon l'ordre alphabétique de nom de famille et de
prénom.
* type logique et tri des enregistrements.
1- Affichez le prénom et le nom des personnes ayant pour prénom " RIAD ".
1. Choisir la ou les tables et les requêtes nécessaires.
-Créer une nouvelle requête en utilisant le mode création.
-De la liste des tables et requêtes, sélectionnez la table Employés.
2. Choisir le type de requête.
-Assurez-vous d'avoir la requête de type sélection .
62
Critères
Tri :
Afficher : X X
Ou :
Vous n'êtes pas obligé de mettre les guillemets. Access va les mettre pour indiquer que le champ est de type "texte". De
plus, vous n'êtes pas obligé de mettre l'opérateur " = ". Il est mis par défaut si aucun autre opérateur n'est choisi. En
plus, vous n'êtes pas obligé de mettre le texte en majuscules ou en minuscules. Access ne fait pas la différence lors de la
recherche. Il faut cependant écrire le critère correctement. Par exemple, vous ne trouverez personne si vous avez écrit
"RIIIIIIAD" .
Pour les champs de type Date/Heure, Access placera automatiquement devant et après la date le caractère " #". Donc,
vous n'êtes pas obligé de le mettre. Tout cela est pour être capable de différencier les types de champs; "" pour texte, #
pour Date/Heure et rien pour les chiffres (monétaire ou numérique).
7. Exécuter la requête.
-Appuyez sur le bouton !.
Voici le résultat.
Résultat
Prénom Nom
RIAD CHAMI
RIAD SALHI
2- Affichez le prénom, nom de toutes les personnes dont le nom de famille commence par la lettre " L ".
Cette requête sert à voir les caractères spéciaux tel que " * " et "? ". Le caractère "?" est utile pour remplacer
un caractère dans la requête. Par exemple, une recherche sur b?lle pourrait donner les résultats suivants: balle, belle,
bille, bulle. En plus d'être utile pour les champs de type texte, il peut aussi être utilise avec les champs de type
Date/Heure. Par exemple, #98-??-01# pourrait afficher tous les enregistrements du premier jour de chaque mois.
Le caractère "*" sert à remplacer une série indéterminée de caractères. On connaît le début mais pas la fin. Par exemple,
une recherche en utilisant bal* pourrait donner le résultat suivant: balade, balai, balance, balcon, baleine, balise, balle,
ballerine, ballet ...
Access se chargera d'écrire Comme pour indiquer que les enregistrements recherchés commencent par la lettre "l".
Critères
Tri :
Afficher : X X
Critère : Comme l*
Ou :
63
Résultat
Prénom Nom
RIAD LAYOUNI
TOUFIK LAYACHI
ILHEM LASKRI
3- Affichez le prénom, nom et salaire des personnes ayant un salaire supérieur à 45 000 DA.
Cette requête démontre les possibilités d’utiliser les opérateurs , = pour les champs de type numérique ou monétaire.
Pour cet exercice, le critère de recherche utilise un champ de type monétaire. Les autres types de champs peuvent aussi
être utilisés avec ces opérateurs.
Critères
Tri :
Afficher : X X X
Critère : >45000
Ou :
Résultat
Faîtes attention en lisant la question. Est-ce qu’on vous demande supérieur à X ou égale et supérieur à X? C’est un petit
piège que plusieurs ne font pas attention.
Critères
Tri :
Afficher : X X X
Ou :
64
Résultat
Dépendant des options sélectionnées dans Windows et Access, il se peut que le format de la date soit différent. Vous
devrez probablement mettre le mois devant et jour et l’année. Faîtes quelques essais en changeant l’ordre de l’année, du
mois et de la journée.
5- Affichez le prénom et le nom des employés ayant la permanence selon l'ordre alphabétique de nom de
famille et de prénom.
Cette requête regarde les possibilités avec le champ de type logique Oui/Non et aussi de trier le résultat de la requête. De
plus, on utilise le champ Permanence pour filtrer les enregistrements. Mais celui-ci n'est pas affiché lors de la
présentation de l'information. Assurez-vous que la case Afficher soit désactivée pour ce champ.
Critère
Afficher : X X
Critère : Oui
Ou :
Rappelez-vous. La priorité des tris va au champ trié le plus à la gauche; même si celui-ci n'est pas affiché
Résultat
Prénom Nom
Selmi Reda
ilhem Laskri
Reda Chami
ilhem Layachi
Sassi Gendelou
65
Critère
Tri :
Afficher : X X
Ou :
Résultat
Prénom Nom
Selmi Reda
ilhem Laskri
Note: Il y a une caractéristique des champs de type Oui/Non que vous devriez savoir. Bien qu'il soit affiché Oui/Non,
Vrai/Faux à l'écran, l'information est conservée dans la table sous forme numérique. Access inscrit 0 (zéro) lorsque faux
et -1 lorsque vrai. Avec un peu d'imagination, vous pouvez vraiment prendre avantage de cette situation.
Travaux Pratiques.
Un service financier réalise un audit de données bancaires. Le schéma relationnel de ces données est le suivant :
2- Relier les tables et reproduire les tables de la base de données sur votre feuillede réponse.
Nom du champ
Afficher le contrôle
Contenu
Colonne liée
Nbre de colonnes
66
4-réaliser les requetes suivantes :
a. Le nom et prénom des clients dont le numéro de client est inférieur strictement à 1000 et qui sont nés strictement
après 1968;
b. Les numéros de compte dont le solde est strictement supérieur à 1000 DA, et dont le propriétaire a pour nom ’Saadi’ ;
Compte idcompte
Action idaction
2- Relier les tables et reproduire les tables de la base de données sur votre feuille de réponse.
Contenu Client
Colonne liée 1
Nbre de colonnes 3
4- Réaliser les requêtes suivantes en respectant le modèle ci-dessous :
a. Le nom et prénom des clients dont le numéro de client est inférieur strictement à 1000 et qui sont nés strictement
après 1968;
67
b. Les numéros de compte dont le solde est strictement supérieur à 1000 Dirhams, et dont le propriétaire a pour nom ’Saadi’ ;
68
EXERCICES CORRIGÉS DE LANGAGE SQL
Exercice 1 :
Soit la base de données d’un festival de musique : Dans une représentation peut participer un ou plusieurs musiciens. Un
musicien ne peut participer qu’à une seule représentation.
Representation (Num_Rep , titre_Rep , lieu)
Musicien (Num_mus , nom , Num_Rep #)
Programmer (Date , Num_Rep # , tarif)
Exercice 2 :
Soit la base de données suivante :
Départements:( DNO, DNOM, DIR, VILLE)
Employés: ( ENO, ENOM, PROF, DATEEMB, SAL, COMM, DNO#)
Exercice 3 :
Soit le modèle relationnel suivant relatif à la gestion simplifiée des étapes du Tour de France 97, dont une des étapes de
type "contre la montre individuel" se déroula à Saint-Etienne :
Quelle est la composition de l'équipe Festina (Numéro, nom et pays des coureurs) ?
Quel est le nombre de kilomètres total du Tour de France 97 ?
Quel est le nombre de kilomètres total des étapes de type "Haute Montagne"?
Quels sont les noms des coureurs qui n'ont pas obtenu de bonifications ?
Quels sont les noms des coureurs qui ont participé à toutes les étapes ?
Quel est le classement général des coureurs (nom, code équipe, code pays et temps des coureurs) à l'issue des 13
premières étapes sachant que les bonifications ont été intégrées dans les temps réalisés à chaque étape ?
Quel est le classement par équipe à l'issue des 13 premières étapes (nom et temps des équipes) ?
Exercice 4 :
Soit le modèle relationnel suivant relatif à la gestion des notes annuelles d'une promotion d'étudiants :
ETUDIANT(N°Etudiant, Nom, Prénom)
MATIERE(CodeMat, LibelléMat, CoeffMat)
EVALUER(#N°Etudiant, #CodeMat, Date, Note)
69
Remarque : les clés primaires sont soulignées et les clés étrangères sont marquées par Exprimez en SQL les requêtes
suivantes :
Exercice 5 :
Ci-après, on donne la représentation textuelle simplifiée d’une base de données concernant un cycle de formation destiné
à des étudiants. Il regroupe un ensemble de matières. On considère que chaque enseignant n’enseigne qu’une seule
matière et qu’à la fin du cycle de formation, une note par matière, est attribuée à chaque étudiant. D’autre par, les
étudiants peuvent ne pas suivre les mêmes matières.
Les informations relatives aux étudiants (Code, Nom et Date de naissance) selon l’ordre alphabétique croisant du nom
Les noms et les grades des enseignants de la matière dont le nom est ‘BD’.
La liste distincte formée des noms et les coefficients des différentes matières qui sont enseignées par des enseignants de
grade ‘Grd3’.
La liste des matières (Nom et Coefficient) qui sont suivies par l’étudiant de code ‘Et321’.
Le nombre d’enseignants de la matière dont le nom est ‘Informatique’
Exercice 6 :
Soit la base de données intitulée « gestion_projet » permettant de gérer les projets relatifs au développement de
logiciels. Elle est décrite par la représentation textuelle simplifiée suivante :
D’afficher les noms et les prix des logiciels appartenant au projet ayant comme titre « gestion de stock », triés dans
l’ordre décroissant des prix
D’afficher le total des prix des logiciels du projet numéro 10. Lors de l’affichage, le titre de la colonne sera « cours total
du projet ».
Afficher le nombre de développeurs qui ont participé au projet intitulé « gestion de stock »
Afficher les projets qui ont plus que 5 logiciels
Les numéros et noms des développeurs qui ont participés dans tous les projets.
Les numéros de projets dans lesquelles tous les développeurs y participent dans sa réalisation.
Exercice 7 :
On considère la base de données BD_AIR_MAROC suivante :
PILOTE (NUMPIL, NOMPIL, VILLE, SALAIRE)
AVION (NUMAV, NOMAV, CAPACITE, VILLE)
VOL (NUMVOL, #NUMPIL, #NUMAV, VILLE_DEP, VILLE_ARR, H_DEP, H_ARR)
Donnez la liste des avions dont la capacité́ est supérieure à 350 passagers.
Quels sont les numéros et noms des avions localisés à Alger ?
Quels sont les numéros des pilotes en service et les villes de départ de leurs vols ?
Donnez toutes les informations sur les pilotes de la compagnie.
Quel est le nom des pilotes domiciliés à Annaba dont le salaire est supérieur à 20000 DA?
Quels sont les avions (numéro et nom) localisés à Alger ou dont la capacité́ est inferieure à 350 passagers ?
Quels sont les numéros des pilotes qui ne sont pas en service ?
Donnez le numéro des vols effectués au départ de Alger par des pilotes de Annaba ?
Quels sont les vols effectués par un avion qui n'est pas localisé à Alger ?
Quelles sont les villes desservies à partir de la ville d'arrivée d'un vol au départ de Guelma ?
70
Exercice 8 :
Soit le schéma relationnel suivant :
Departement (NomD, N_Dep, Directeur)
Employe (Matricule, Nom, Prénom, DateNaissance, Adresse, Salaire, #N_dep, superieur)
Projet (NomP, N_pro, Lieu, #N_Dep)
Travaille (#Matricule, #N_Proj, Heures)
L’attribut supérieur dans la relation Employe contient le matricule du supérieur direct de l’employé. Chaque employé
appartient à un département et travaille sur zéro, un ou plusieurs projets. Chaque projet est rattaché à un département
qui peut être différent de celui des employés travaillant sur ce projet. Exprimer en SQL les requêtes suivantes :
Exercice 9 :
Soit le schéma relationnel suivant qui représente la base de données d’une agence de voyage en ligne.
CLIENT (NumCli, Nom, Prénom, e-mail, NumCB )
VOYAGE (CodeVoyage, Destination, Durée, Prix )
RESERVATION (#NumCli, #CodeVoyage, DateRes )
Exercice 10 :
Soit la base de données « cinéma » dont le schéma relationnel est donné ci-dessous :
Titre des films dont la durée est supérieure ou égale à deux heures
Nom des villes abritant un cinéma nommé « MGM »
Nom des cinémas situés à Meknès ou contenant au moins une salle de plus 100 places
Nom, adresse et ville des cinémas dans lesquels on joue le film « Hypnose » la semaine 18
Numéro d’exploitation des films projetés dans toutes les salles
Titre des films qui n’ont pas été projetés
Exercice 11 :
À partir du système d’information de l’entreprise. le service des ressources humaines peut extraire et analyser les
informations relatives à tous les personnels. Celui-ci lui permet en particulier d’exercer un suivi dans le domaine de la
formation. Un extrait de ce domaine est présenté sous forme d’un schéma relation :
71
Construire les requêtes en langage SQL permettant de répondre aux questions suivantes :
quel est le nombre de formations suivies par catégories de salariés ayant débuté au cours de la période du 01/06/2011 au
31/12/2011 ?
quelles sont les catégories pour lesquelles le nombre d’heures de formation est supérieur à la moyenne du nombre
d’heures des formations suivies par l’ensemble des personnels ?
le responsable des ressources humaines souhaite intégrer dans la base de données une nouvelle formation liée au
sertissage des boîtes de conserve. les nouvelles données à insérer sont les suivantes : "FORM587, sertissage niveau 1,
25j, perfectionnement, 12, 525 " Ecrire la requête permettant de mettre à jour la base.
Exercice 12
La société X utilise le logiciel de gestion de base de données Access pour gérer ses clients et ses représentants.
Table représentants :
NUM REP NOM REP ADR REP CP REP VIL REP AGE REP
1 TAYAR Rue bel vue 23000 Annaba 22
2 BELAHCEN Rue tiers 24000 Guelma 27
3 TOUMI Rue du marché 16000 Alger 23
4 RAHEB Rue des écoles 25000 Constantine 19
5 MAOUI Rue malek 31000 Oran 30
6 SAKER Rue djaout 17000 Tlemcen 40
Table Courir
Table département :
Table client :
Afficher la liste des clients appartenant à la catégorie tarifaire n°1, classée par ordre alphabétique.
Afficher la liste des clients (code, nom de client) rattachés au représentant Toumi .
Afficher la liste des clients bénéficiant d’une remise de 10%.
Afficher la liste des représentants (Numéro et nom) dépendant du chef de secteur .
Afficher la liste des départements (code, nom, chef de secteur).
Afficher la liste des chefs de secteur
Exercice 13 :
Le responsable du SAV d’une entreprise d’électroménager a mis en place une petite base de données afin de gérer les
interventions de ces techniciens. Le modèle relationnel à la source de cette base de données est le suivant :
La lite des produits (référence et désignation) classées du moins cher au plus cher.
Le nombre d’intervention du technicien n°2381.
La liste des clients ayant demandé une intervention pour des produits d’un prix supérieur à 300 DA.
Les interventions effectuées par le technicien : ‘Mentri Mohamed’ entre le 1er et le 31 août 2009.
Par ailleurs il vous informe que le produit référencé 548G a vu son prix augmenter (nouveau prix = 320 DA). Vous
apprenez également par le directeur des ressources humaines qu’un nouveau technicien a été recruté : son code est le
3294, il s’appelle ‘El hadi Ridha’ et est rémunéré à un taux horaire de 15 DA.
Exercice 14 :
La représentation textuelle suivante est une description simplifiée d’une base de données de gestion de facturation
d’uneentreprise commerciale.
On suppose que Numcli, Numprod, Idvendeur et Numcom sont de type numérique. Le nom, le prénom et l’adresse
des clients ainsi que les vendeurs sont des informations obligatoires, le mail peut ne pas être indiqué. La valeur par
défaut de la quantité en stock des produits (qte_stock) est égale à 0 Exprimer en SQL les requêtes suivantes :
73
Exercice 15 :
Soit la base de données suivante :
Exercice 16 :
Afin d’assurer la qualité des produits attendues par les Clients, l’entreprise cherche à optimiser la gestion des pannes
pouvant survenir dans les infrastructures de production nécessaires à la fabrication du Ciment. Voici un extrait de la base
de données :
Rédiger la requête SQL permettant d’obtenir la liste par ordre alphabétique des noms et prénoms des techniciens ayant
réalisé une intervention sur la Machine identifiée par Ber001.
Rédiger la requête SQL permettant d’obtenir la liste des phases ayant connue un incident de "sur-chauffage" pour le mois
Mai 2013.
Rédiger la requête SQL permettant d’obtenir le nombre d’incidents non clôturés.
Rédiger la requête SQL permettant d’obtenir la liste des noms des stations ayant eu plus de dix incidents.
Exercice 17 :
Soit la base de données gestion des ventes :
Donner la requête qui permet d’obtenir le chiffre d’affaire mensuel de l’année en cours.
Donner la requête qui calcule le taux de vente de chaque produit.
Donner la requête qui affiche le produit le plus vendu du mois en cour.
La table produit concurrent est composée des informations sur les produits vedettes des concurrents ; Donner la requête
qui permet d’ajouter tous les produits du concurrent « Alu » à la table Produits.
74
Exercices Corrigés
SQ SQL
Exercice 1
Soit la base de données d’un festival de musique : Dans une représentation peut participer un ou plusieurs musiciens.
Un musicien ne peut participer qu’à une seule représentation.
— Representation (Num_Rep , titre_Rep , lieu)
— Musicien (Num_mus , nom , #Num_Rep)
— Programmer (Date,#Num_rep, tarif)
—
Ecrire la commande SQL permettant de rechercher :
3. La liste des noms des musiciens et des titres et les titres des représentations auxquelles ils participent.
1 S EL E C T M . nom , R . titre FROM M u sici e n M INNER JOIN R e p r e s e nta ti on R ON R .
2 N um _ r e p = M . N u m _ r e p
4. La liste des titres des représentations, les lieux et les tarifs du 25/07/2008.
1 S EL E C T R . titre , R . lieu ,P . tarif FROM P r og r amme r P IN NER JOIN R e p r e s e n t ati on R ON P .
2 N um _ r e p = R . N u m _ r e p WHERE P . date = " 25 -07 - 20 0 8 "
Exercice 2
Soit la base de données suivante :
— Départements :( DNO, DNOM, DIR, VILLE)
— Employés : ( ENO, ENOM, PROF, DATEEMB, SAL, COMM, #DNO)
Exprimez en SQL les requêtes suivantes :
1. Donnez la liste des employés ayant une commission
1 S EL E C T * FROM Emplo y es WHERE COMM NOT NUL L
2. Donnez les noms, emplois et salaires des employés par emploi croissant, et pour chaque emploi, par
salaire décroissant
1 S EL E C T ENOM , PROF , SAL FROM Emplo y es ORDER BY PROF ASC , SAL DESC
8. Donnez le ou les emplois ayant le salaire moyen le plus bas, ainsi que ce salaire moyen
1 S EL E C T PROF FROM Emp loy e s GROUP BY PROF
2 H AV I N G AVG ( SAL )=( SE LE C T AVG ( SAL ) as moy FROM Empl oy es GROUP
3 BY PROF ORDER BY moy ASC L IMIT 1)
Exercice 3
Soit le modèle relationnel suivant relatif à la gestion des notes annuelles d’une promotion d’étudiants :
— ETUDIANT(NEtudiant, Nom, Prénom)
— MATIERE(CodeMat, LibelléMat, CoeffMat)
— EVALUER(#NEtudiant, #CodeMat, Date, Note)
Remarque : les clés primaires sont soulignées et les clés étrangères sont
marquées par # Exprimez en SQL les requêtes suivantes :
1. Quel est le nombre total d’étudiants ? SELECT count(*) FROM ETUDIANT
2. Quelles sont, parmi l’ensemble des notes, la note la plus haute et la note la plus basse ? SELECT
MIN(Note) as ’plus basse note’, MAX(Note) as ’plus haute note’ FROM EVALUER
3. Quelles sont les moyennes de chaque étudiant dans chacune des matières ? SELECT [Link],
[Link], [Link]énom, [Link]éMat, [Link], AVG([Link]) AS MoyEtuMat FROM EVALUER EV,
MATIERE M, ETUDIANT E WHERE [Link] = [Link] AND [Link] = [Link]
GROUP BY [Link], [Link]éMat
4. Quelles sont les moyennes par matière ? Avec la vue MGETU de la question 3 ( MOYETUMAT)
1 S EL E C T L ibelle Mat , AVG ( Mo y Et u Ma t ) FROM M OYE T UM A T G ROUP BY L i b el l e M a t
5. Quelle est la moyenne générale de chaque étudiant ? Avec la vue MGETU de la question 3 (
MOYETUMAT)
1 S EL E C T NEtudiant , Nom , SUM ( M oy E tu M at * C o eff M at )/ SUM ( C o eff Mat ) AS MgEtu FROM
2 M OYE T U M A T G ROUP BY NEtudi ant
7. Quels sont les étudiants qui ont une moyenne générale supérieure ou égale à la moyenne générale
de la promotion ? Avec la vue MGETU de la question 5
1 S EL E C T NEtudiant , Nom , Prenom , MgEtu FROM MGE TU WHE RE
2 MgEtu >= ( SEL EC T AVG ( MgEtu ) FROM MGET U )
Exercice 4
Soit la base de données intitulée "gestion_projet" permettant de gérer les projets relatifs au développement de
logiciels.
Elle est décrite par la représentation textuelle simplifiée suivante :
— Developpeur (NumDev, NomDev, AdrDev, EmailDev, TelDev)
— Projet (NumProj, TitreProj, DateDeb, DateFin)
76
— Logiciel (CodLog, NomLog, PrixLog, #NumProj)
— Realisation (#NumProj, #NumDev) Ecrire les requêtes SQL permettant :
1. D’afficher les noms et les prix des logiciels appartenant au projet ayant comme titre « gestion de
stock », triés dans l’ordre décroissant des prix .
1 S EL E C T L . NomL og , L . P r ix L og FROM L ogi ci e l L INNER JOIN P r o je t P ON L .
2 N u m P r oj = P. N um P ro j WHERE P . Ti t r e P roj = " g estio n ␣ de ␣ stock " ORDER BY L .
3
P ri x L og DESC
2. D’afficher le total des prix des logiciels du projet numéro 10. Lors de l’affichage, le titre de la
colonne sera « cours total du projet ».
1 S EL E C T SUM ( P r ix L og ) as " cout ␣ total ␣ du ␣ p r oje t " FROM L og ici e l WHERE N u m P Ro j =10
3. Afficher le nombre de développeurs qui ont participé au projet intitulé « gestion de stock »
1 S EL E C T count (*) FROM D e v e lo pp e u r D INNE R JOIN R e a lis at io n R
2 ON D . N u mD e v = R . N u mD e v INNER JOIN P r oj e t P ON P. N u m P ro j = R . N um P ro j
4. Afficher les projets qui ont plus que 5 logiciels SELECT NumProj, TitreProj FROM PRojet P INNER
JOIN Logiciel L ON [Link]=[Link] GROUP BY NumProj HAVING count(*)>5
5. Les numéros et noms des développeurs qui ont participés dans tout les projets.
1 S EL E C T NumDev , No mD e v FROM D e v e lo pp e u r D INNE R JOIN R e a li sat io n R ON D . Nu m D ev
2 = R . Nu m D ev G ROUP BY N um D e v H AVI N G
3 count (*)=( SEL EC T COU N T (*) FROM Pr o je t )
6. Les numéros de projets dans lesquelles tous les développeurs y participent dans sa réalisation.
1 S EL E C T NumProj , Tit r e P r oj FROM P r oj e t P INNER JOIN R e a lis ati on R ON P . N um
2 P ro j = R . N um P ro j GROUP BY N um P roj H A VI N G
3 count (*)=( SEL EC T COU N T (*) FROM D e v e l op p eu r )
Exercice 5
Ci-après, on donne la représentation textuelle simplifiée d’une base de données concernant un cycle de
formation destiné à des étudiants. Il regroupe un ensemble de matières. On considère que chaque
enseignant n’enseigne qu’une seule matière et qu’à la fin du cycle de formation, une note par matière,
est attribuée à chaque étudiant. D’autre par, les étudiants peuvent ne pas suivre les mêmes matières.
— ETUDIANT(CodeEt, NomEt, DatnEt)
— MATIERE(CodeMat, NomMat, CoefMat)
— ENSEIGNANT(CodeEns, NomEns, GradeEns, #CodeMat, note)
— NOTE(#CodeEt, #CodeMat, Ecrire les requêtes SQL permettant ’afficher :
1. Les informations relatives aux étudiants (Code, Nom et Date de naissance) selon l’ordre alphabétique
croisant
S EL E C T *duFROM
nomE T U DI A N T ORDER BY NomEt ASC
1
2. Les noms et les grades des enseignants de la matière dont le nom est ‘BD’.
1 S EL E C T E. NomEns , E . G rad e En s FROM E NS EI G N A N T E IN NER JOIN M A T I E RE M
2 ON M . C o d e M at = E. C od e M a t WHERE M . N o mMat = " BD "
3. La liste distincte formée des noms et les coefficients des différentes matières qui sont enseignées
par des enseignants de grade ‘Grd3’.
1 S EL E C T DIS TI N C T ( M . N o mMat ) , M . Co e f Mat FROM E N SE I G N A N T E
2 IN NER JOIN M A T I E R E M ON M . C o d e M at = E. C od e M at WHERE E . G r ad e En s = " Grd3 "
4. La liste des matières (Nom et Coefficient) qui sont suivies par l’étudiant de code ‘Et321’.
1 S EL E C T M . NomMat , M. C o ef Ma t FROM M A T IE RE M INN ER JOIN NOTE N
2 ON M . C o d e M at = N . C od e M a t INNER JOIN E T U D I A N T E ON E . Cod eE t = N . C od eEt WHERE E .
3 C od eE t = " Et32 1 "
5. Le nombre d’enseignants de la matière dont le nom est ‘Informatique’ SELECT COUNT(*) FROM
ENSEIGNANT E INNER JOIN MATIERE M ON [Link]=[Link] WHERE
77
[Link]= ‘Informatique’
Exercice 6
On considère la base de données BD_AIR_Algerie suivante :
— PILOTE (NUMPIL, NOMPIL, VILLE, SALAIRE)
— AVION (NUMAV, NOMAV, CAPACITE, VILLE)
— VOL (NUMVOL, #NUMPIL, #NUMAV, VILLE_DEP, VILLE_ARR, H_DEP, H_ARR)
1. Donnez la liste des avions dont la capacité est supérieure à 350 passagers.
1 S EL E C T * FROM AVION W HERE C AP ACITE > 35 0
3. Quels sont les numéros des pilotes en service et les villes de départ de leurs vols ?
1 S EL E C T NUMPIL , VIL L E _ DE P F ROM VOL
5. Quel est le nom des pilotes domiciliés à Meknès dont le salaire est supérieur à 20000 DA ?
1 S EL E C T NO MPI L F ROM PI L O TE WHERE VIL L E = ’ A n n a b a ’ AND SAL AIRE >2 0 00 0
6. Quels sont les avions (numéro et nom) localisés à Alger ou dont la capacité est inférieure à 350
passagers ?
1 S EL E C T NUMAV , NOM AV FROM AVION W HE RE VIL L E = ’ A lg e r ’ AND C AP ACI TE <35 0
7. Quels sont les numéros des pilotes qui ne sont pas en service ?
1 S EL E C T N U MPI L F ROM PI LO T E
2 WHERE N U M PI L NOT IN ( SEL EC T DIS TI N C T NU M P IL FROM VOL )
8. Donnez le numéro des vols effectués au départ de Alger par des pilotes de Annaba ?
1 S EL E C T DIS TI N C T V . N U MVO L F ROM VOL AS V , PIL OTE AS P
2 WHERE V . N U M PI L = P. N U M PIL AND V . VIL L E _ DE P = ’ A l g e r ’ AND P . VIL L E = ’ A n n a b a ’
Ou
1 S EL E C T DIS TI N C T N U MVO L FROM VOL WHERE V . V IL L E_ D E P = ’ A l g e r ’ AND N UM P I L NOT IN
2 ( SE LE C T N U MPIL FROM PI LO T E WHERE VIL L E = ’ A n n a b a ’)
9. Quels sont les vols effectués par un avion qui n’est pas localisé à Alger ?
1 S EL E C T DIS TI N C T V . N U MVO L F ROM VOL V , AVION A WHERE A . N UM AV = V . NU M AV
2 AN D A . VIL L E != Alger ’
[Link] sont les villes desservies à partir de la ville d’arrivée d’un vol au départ de Constantine ?
1 S EL E C T DIS TI N C T VIL L E _ A R R FROM VOL WHERE VIL L E _ DE P = ’ C o n st a n t i n e ’ AND
2 VIL L E _ DEP != VIL L E _ A R R
Exercice 7
Soit le schéma relationnel suivant :
— Departement (NomD, N_Dep, Directeur)
— Employe (Matricule, Nom, Prénom, DateNaissance, Adresse, Salaire, #N_dep, superieur)
— Projet (NomP, N_pro, Lieu, #N_Dep)
— Travaille (#Matricule, #N_Proj, Heures)
78
L’attribut supérieur dans la relation Employe contient le matricule du supérieur direct de l’employé. Chaque
employé appartient à un département et travaille sur zéro, un ou plusieurs projets. Chaque projet est rattaché à
un département qui peut être différent de celui des employés travaillant sur ce projet. Exprimer en SQL les
requêtes suivantes :
1. Date de naissance et l’adresse de Tahar Layouni.
1 S EL E C T Dat e N a issanc e , Ad r e ss e FROM Empl oy e WHERE Nom = ’ L ayou n i AND Pr e n om
2 = ’ Tahar ’
4. Nom des employés qui travaillent plus de 10heures sur un projet à Constantine
1 S EL E C T E. Nom FROM Employ e as E , T r availl e as T , P r o jet P WHERE E .
2 M at r icul e = T . M a t ric ul e
3 AN D T . N_ p r oj = P . N _p r oj AND T . heures >=1 0 AN D P . L ieu = ’ C o n st a n t i n e ’
5. Nom des projets sur lesquelles travaillent Taha Lamharchi et Dounia Mahmoud.
1 S ELE C T T. N _pr oj FROM T r av aille as T , Employe as E WHERE T . Mat ric ule = E . Mat ric ule
2 AND E . Nom = ’ L ayo un i ’ AND E . Prenom = ’ Tahar ’
3 INT ERSE CT
4 S ELE C T T. N _pr oj FROM T r av aille as T , Employe as E WHERE T . Mat ric ule = E . Mat ric ule
5 AND E . Nom = ’ Mah m oudi ’ AND E . Prenom = ’ D ounia ’
79
8. Nom des employés qui ne travaillent pas sur un projet à Constantine.
1 S EL E C T Nom FROM Emplo y e WHERE
2 M at r icul e NOT IN ( SEL E CT T . M at r icul e FROM T r a vai ll e as T , P r oj e t as P WHERE T .
3 N _ p ro j = P. N _ p roj AND P . L ieu = ’ C o n st a n t i n e ’)
Exercice 8
Soit le schéma relationnel suivant qui représente la base de données d’une agence de voyage en ligne.
— CLIENT (NumCli, Nom, Prénom, e-mail, NumCB )
— VOYAGE (CodeVoyage, Destination, Durée, Prix )
— RESERVATION (#Numcli, #CodeVoyage,DateRes)
3. Destination et liste des clients ayant réservés pour un voyage de plus de 10 jours et coûtant moins de
1000 DA.
1 S EL E C T C . Nom , C . Prenom , V . D e st in ati on FROM C L I EN T as C , VOY AG E as V , RES E RV A T IO N as R
2 WHERE C . N u m Cl i = R . N um Cl i and V . C od e V oy ag e = R . C o d e V o yag e
3
AN D Duree >= 10 AN D Prix <10 00
4
4. Numéros de tous les clients ayant réservés sur tous les voyages proposés.
1 S EL E C T Nu mCl i F ROM R ESE R V A T IO N GROUP BY Num Cli H AVI N G
2 count (*)=( SE LE C T count (*) FROM VOY AG E )
Exercice 9
Soit la base de données « cinéma » dont le schéma relationnel est donné ci-dessous :
— VILLE (CodePostal, NomVille )
— CINEMA (NumCine, NomCine, Adresse, #CodePostal )
— SALLE (NumSalle, Capacité, #NumCine )
— FILM (NumExploit, Titre, Durée)
— PROJECTION(#NumExploit, #NumSalle, NumSemaine,Nbentrees)
3. Nom des cinémas situés à Annaba ou contenant au moins une salle de plus 100 places
1 S EL E C T No m Cin e FROM C I NE M A WHERE C o d e P ost al =( SEL EC T Co d e Po sta l FROM
2 VIL L E WHERE N om Vill e = ’ A n n a b a ’)
3 OR N um C in e IN ( SE LE C T N um C in e FROM SAL L E WHER E Capacite > = 1 00 )
80
4. Nom, adresse et ville des cinémas dans lesquels on joue le film « Hypnose » la semaine 18
1 S EL E C T C . NomCine , C . Adresse , V . No m Vi ll e FROM C I N EM A as C , VIL L E as V WHER C .
2 C o d e Po sta l = V. C o d e Pos ta l
3 AN D C . N u m Cin e IN ( S EL E CT S . N u m Cin e FROM SAL L E as S , FIL M as F , P R OJE C T IO N as P
4 WHERE P . N u m Exp loi t = F. N u m E xp loi t AND P . N um Salle = S . N u m Sal l e AND F .
Tit re = ’ H ypnos e ’ AND P . N u m S e ma in e =18)
5
Exercice 10
Soit le modèle relationnel suivant relatif à la gestion simplifiée des étapes du Tour de France 97, dont une des
étapes de type "contre la montre individuel" se déroula à Saint-Etienne :
3. Quel est le nombre de kilomètres total des étapes de type "Haute Montagne" ?
1 S EL E C T SUM ( Nbkm ) FROM ETAPE A , T Y P E _E T A P E B
2 WHERE A . C o d e T y p e = B . C od e T yp e And L ib e ll e T y p e = " H A UTE ␣ M O N T A G N E "
4. Quels sont les noms des coureurs qui n’ont pas obtenu de bonifications ?
1 SELECT Nom Coureur FROM COUREUR
2 WHERE N u m e r o C ou r e u r NOT IN ( SEL EC T Nu m e r o C ou r e u r FROM A T T R I B U E R _ B O N I FI C A T I O N )
5. Quels sont les noms des coureurs qui ont participé à toutes les étapes ?
1 S EL E C T N om C ou r e u r FROM P A R T I C IPE R A , CO U RE U R B
2 WHERE A . N u m e r o C ou r e u r = B . N um e r o C ou r e u r GRO UP BY
3 N um e r o Co u r eu r , N om C ou r e u r
4 H AV I N G COU N T (*) =( SE LE C T COU N T (*) FROM ET APE )
6. Quel est le classement général des coureurs (nom, code équipe, code pays et temps des
coureurs) à l’issue des 13 premières étapes sachant que les bonifications ont été intégrées dans les
temps réalisés à chaque étape ?
81
1 S EL E C T NomCou r eur , Cod eEquipe , CodePays , SUM ( T e m p s R e a lis e ) AS Total FROM
2 P A R T I C IPE R A , CO U RE U R B
3 WHERE A . N u m e r o C ou r e u r = B . N um e r o C ou r e u r and Nume roEtape <= 13 G RO UP BY
A . N u m e r o Cou r eu r , NomCour eu r , CodeEquipe , C o d e Pay s ORDER BY Total
4
5
7. Quel est le classement par équipe à l’issue des 13 premières étapes (nom et temps des équipes) ?
1 S EL E C T NomEquipe , SUM ( T e mp s R e a lis e ) AS Total FROM
2 P A R T I C IPE R A , CO U RE U R B , E QUIP E C
3 WHERE A . N u m e r o C ou r e u r = B . N um e r o C ou r e u r And B . Co d e Equ ip e = C . C o d e E qu ip e And
4 Num eroEtap e < =1 3
5 G ROUP BY B . CodeEquipe , N o m Eq uip e ORDER BY Total
Exercice 11 :
À partir du système d’information de l’entreprise. le service des ressources humaines peut extraire et analyser
les informations relatives à tous les personnels. celui-ci lui permet en particulier d’exercer un suivi dans le domaine
de la formation. Un extrait de ce domaine est présenté sous forme d’un schéma relation :
Construire les requêtes en langage SQL permettant de répondre aux questions suivantes :
1. quel est le nombre de formations suivies par catégories de salariés ayant débuté au cours de la
période du 01/06/2011 au 31/12/2011 ?
1 S EL E C T L ib e ll ecat e go ri e , count ( dist inc t Cod e fo r m ) FROM SUIVRE , SAL ARIE ,
2 C A T E GO RI E WHERE S U IV R E . M at r ic ul es al = S A L A RIE . Ma t ri cu l es al AND S AL A R IE .
3 c od e ca t eg o ri e = C A T E GO R IE . co d ec at e go r i e
4 AN D D a t ed eb ut BE TWEE N " 0 1 / 0 6 / 2 0 1 1 " AN D " 3 1 / 1 2 / 2 0 1 1 "
5 G ROUP BY L ib e ll e ca t ego r i e
2. quelles sont les catégories pour lesquelles le nombre d’heures de formation est supérieur à la
moyenne du nombre d’heures des formations suivies par l’ensemble des personnels ?
1 S ELE C T L ib ellec at egorie FROM SUIVRE , SALARIE , CATEGORIE , FO R MATIO N
2 WHERE S UI VR E . Mat r ic ules a l = SA LARI E . Mat r ic ules al AND
3 SA LARI E . c od ec a t egor ie = C ATEGORI E . co d ec at egori e AND
4 FOR MA TIO N . C od efor m = S UI V RE . C od efor m
82
GROUP5 BY L ib ell ec at egor ie
H AVI NG
6 SUM ( D ur eef orm ) > ( S E LE CT AVG ( D ur eeform ) SUIVRE , FOR MA TIO N
WHERE7 S UI VR E . C od efor m = FOR MATI ON . C od eform )
Exercice 12
La société X utilise le logiciel de gestion de base de données Access pour gérer ses clients et
ses représentants. Voici la liste des tables crées dans Access :
Ecrire les requêtes suivantes
1. Afficher la liste des clients appartenant à la catégorie tarifaire n°1, classée par
ordre alphabétique
2. Afficher la liste des clients (code, nom de client) rattachés au représentant Sony
S EL E C1T CODE_CL T , N O M _ C L T FROM client , r e p r e s en tan t WHERE c li en t .
N U M _ R 2E P = r e p r e s e nt ant . N U M _ RE P AND N O M _ R EP = " S o n y "
Exercice 13
Le responsable du SAV d’une entreprise d’électroménager a mis en place une petite base de
données afin de gérer les interventions de ces techniciens. Le modèle relationnel à la source de
cette base de données est le suivant :
83
— Client (Codecl, nomcl, prenomcl, adresse, cp, ville)
— Produit (Référence, désignation, prix)
— Techniciens (Codetec, nomtec, prenomtec, tauxhoraire)
— Intervention (Numéro, date, raison, #codecl, #référence, #codetec)
1 s elect nomcl from C lient clt , Prod uit prod , I nt er v ent ion int where clt . cod ecl = int . cod ecl
2 and prod . R ef er enc e = int . R ef er enc e and prod . prix >300
5. Par ailleurs il vous informe que le produit référencé 548G a vu son prix
augmenter (nouveau prix = 320 DA).
u pda t1e P rodu it set prix =32 0 whe r e R e f e r e nc e = " 548 G "
Exercice 14
La représentation textuelle suivante est une description simplifiée d’une base de données de
gestion de facturation d’une entreprise commerciale.
— Client (Numcli, Nomcli, Prenomcli, adressecli, mailcli)
— Produit (Numprod, désignation, prix , qte_stock)
— Vendeur (Idvendeur, Nomvendeur, adresse_vend)
— Commande (Numcom, #Numcli, #Idvendeur, #Numprod, date_com,
qte_com)
84
Exprimer en SQL les requêtes suivantes :
1. Créer les tables : Client, Produit, Vendeur et Commande. create table Produit(
Numprod int primary key , designation varchar(30), prix float , qte_stock int
default 0 ) create table commande( Numcom int primary key , Numcli int ,
idvendeur int , Numprod int date_com date qte_com int FOREIGN
KEY(Numcli) REFERENCES Client(Numcli), FOREIGN KEY(idvendeur)
REFERENCES Vendeur(idvendeur), FOREIGN KEY(Numprod) REFERENCES
Pro- duit(Numprod) )
2. la liste des clients de Alger.
s el ec1t * from C l ien t where a d r e ss e cl i like " %Alger % "
3. la liste des produits (Numprod, désignation, prix) classés de plus cher au moins
cher.
s el ec1t N ump ro d , d es ign ati on , prix from P ro dui t orde r by prix ASC
4. noms et adresses des vendeurs dont le nom commence par la lettre ‘M’.
s el ec1t Nomvend eur , a d r e ss e _ v e n d from V end e u r whe re N o m v en d eu r like " M % "
Exercice 15
Soit la base de données suivante :
Ecrire les commandes SQL permettant de rechercher :
1. La liste de tous les étudiants.
s el ec1t * from Etudi ant
3. Les numéros des cartes d’identité des étudiants dont la moyenne entre 7 et 12.
85
s el ec1t n um e r o _ c a r t e _ e t ud ia nt from Note , Mat i er e mat where Note .
c od e _2ma ti e r e = Mat . c od e _ ma ti e r e
group3 by nu m e r o _ ca r t e _ e t u di an t
h avi ng4 ( sum ( no t e _ e xa m e n * c o e ffi ci e nt )/ sum ( co e ff ic i en t )) b etw e e n 7 and 12
8. Afficher les noms et les coefficients des matières étudier par l’étudiant
"20/01234568".
s el ec1t no m _m ati e r e , co e ffi ci e nt from Note , M ati e r e whe r e
Note . 2n um e r o _ c a r t e _ e t ud ia nt = " 20/0 1 2 3 4 5 6 8 "
Exercice 16
Afin d’assurer la qualité des produits attendues par les Clients, l’entreprise cherche à optimiser
la gestion des pannes pouvant survenir dans les infrastructures de production nécessaires à la
fabrication du Ciment.
86
3. Rédiger la requête SQL permettant d’obtenir le nombre d’incidents non clôturés.
s el ec1t count (*) from I N CI DE N T where d a t e H e u r e C l ot u r e is NUL L
4. Rédiger la requête SQL permettant d’obtenir la liste des noms des stations
ayant eu plus de dix incidents.
s el ec1t nom from S T A TIO N st , M A C HI N E mch , I N CID E N T inc where inc . idm ac h = mch . idma ch and st .
idst at2 = mch . i dst at
G ROUP 3 by nom hav in g count (*) >10
Exercice 17
Voici un extrait de la base de données gestion des ventes :
— Produit (Ref , Designation, PrixUnitaire, Dimension, #code_Machine)
— Vente (Ncom, Ref, Qte , DateLiv)
— Commande (Ncom, DateCmd, #CodeClt,#Code_Salarie)
— Produit_concurrent (Ref, Designation, PrixUnitaire, PrixUnitaire,Dimension,
#code_Machine,Nom_Concurrent)
1. Donner la requête qui permet d’obtenir le chiffre d’affaire mensuel de l’année en
cours.
s el ec1t sum ( Qte * P r i x U ni tai r e ) , MONTH ( D a t e C m d ) from Produit , Vente , Co mmand e whe re
P ro duit
2 . Ref = Vente . Ref and Vente . Ncom = C o mmand e . Ncom and
YEAR ( 3D a t e C md )= YEAR ( NOW ()) group by MON TH ( D a t e C m d )
87
Exemple d’application
Application : Gestion des stages au sein de la faculté.
Ce projet traite la gestion des stages au niveau de la faculté des sciences de l’ingénieur, cette
gestion passe par plusieurs procédures ou a la dernière année d’étude, l’étudiant peut
demander un stage au sein d’une entreprise. le responsable des stages au sein de la faculté
organise et affecte des étudiants à faire des stages dans des organismes d’accueils afin de
préparer un rapport de fin d’étude.
Ce responsable établi des conventions avec les entreprises, informe et affecte les étudiants
selon leurs spécialités. Ce stage peut être accepté ou refusé selon les cas.
Au début l’étudiant commence par demander un stage et consulte les possibilités offertes, le
responsable prend contacte avec un organisme d’accueil et établi des conventions en accord
avec l’étudiant et l’entreprise. s’il ya un désaccord l’étudiant annule son stage. Dans le cas
favorable l’inscription au stage est faite et l’étudiant est affecté.
-Etude de l'existant sur les problèmes de la gestion des stages au sein de la faculté
-Elaborer une solution automatisé qui facilité le traitement de la gestion des stages
-Conception d'un système d'information
-Réalisation d'une application avec Access qui permettra de tracer un modèle entité association
- Etablir des requêtes suivant les demandes de l’utilisateur
Etapes a suivre:
La gestion des stages au sein de la faculté est très importante pour alléger le travail du
responsable des stage et garder des traces des affectation des étudiants et des conventions qui
sont établis au fur et a mesure, cela permettra d’avoir une base de données complète
concernant les organismes qui permettent aux étudiants de faire des stages dans leur locaux et
apprendre les principes opérationnelles.
1.2- Objectifs.
Le projet consiste a la mise au point d’une solution informatique qui permettra de gérer les
stages automatiquement pour gagner du temps et simplifier les procédures, l’objectif principale
de l’application est l’affectation des étudiants dans des organisme d’accueils ( généralement des
entreprises économiques ) pour les besoins d’apprentissage.
L’application en Access permettra de gérer les étudiants ainsi que leurs affectation et voir la
conventions établis.
88
[Link] d’activité
Le diagramme d'activité nous permet de modéliser les tâches qui doivent être effectuées par les
acteurs et le système et leur ordonnancement. Les dépendances entre les tâches des activités
et leurs dépendances.
89
90
91
Diagramme de classe.
Les diagrammes de classes sont l'un des types de diagrammes UML les plus utiles, car ils
décrivent clairement la structure d’un système particulier en modélisant ses classes, ses
attributs, ses opérations et les relations entre ses objets.
92
4. Diagramme de séquence
93
Les informations utilisées ont été collectées au travers des entretiens et des documents
utilisés.
Organisme d’acceuil (cod_org, libellé_org, adresse, code postal, ville, Tel, Fax,
secteur activité, nom_ coodinateur)
Section section AN
groupe groupe AN
departement département A
Cod_org Code organisme N
d’acceuil
Libellé_ent Libellé entreprise A
tel Téléphone N
fax Fax N
94
responsable Responsable A
tuteur Tuteur A
Pren_resp Prénom du A
responsable
Pour la modélisation conceptuelle des données nous utilisons le modèle Entité-Association qui
est fondé sur les concepts d'Entité, Association, Propriété et cardinalité.
95
5.3. Le Modèle Relationnel
Organisme d’acceuil (cod_org, libellé_ent, adresse, code postal, ville, Tel, Fax, secteur
activité, responsable)
Stage (mat_etud, cod_org, année, date_début stage, dat_fin stage, nom responsable, tuteur,
secteur stage)
5.Réalisation de l’application
L'application que nous avons réalisée avec l'outil Access nous a permis d'automatiser le système
d'information sur agence de voyage
Nous présentons les formulaires que nous avons conçu, les patterns de requêtes utiles et les
états demandées par les utilisateurs.
SOLUTION :
96
1- créations des requêtes en mode créations.
97
3- Création d’un état ( plus un état récapitulatif)
98
5- Création d’un état situation de l’étudiant par rapport a son stage.
99
7- Autres états (a la demande)
8- Requête affichage.
100
9- Liste des conventions par requêtes.
101
10 – liste des organismes d’accueils
102
BIBLIOGRAPHIE
4. DATE Chris. SQL and relational theory: how to write accurate SQL code.
O'Reilly, 2011, 2ème édition, 450 pages,
103