Vous êtes sur la page 1sur 137

1

SYSTEME D INFORMATION
METHODE MERISE

ADIL LAOUFI
2
Systèmes d’Information
Systèmes d’Information
L’information dans l’entreprise :
L’information dans l’entreprise :
des données,
! données,
des clients,quantité
clients, quantité en
enstock,...
stock,...mais aussi,
mais aussi,
!  des dépendances entre informations, facture produit,...
des la circulation d’informations,
! dépendances entre informations, facture ⇒ produit,...
la circulation d’informations,
commande → entrepôt →liste produits livrés → service ,
facturation → …. liste service
commande → entrepôt → → ...
produits livrés facturation
!  des règles de gestion. facture client,...
des règles de gestion. facture ⇒ client,...
flux entrant flux sortant
système de pilotage

décisions infos
flux entrant flux sortant
système opérant
3
Systèmes d’Information
Le système d’information est l’interface entre le système décisionnel et le
système opérationnel. Systèmes d’Information
Lesystème
Le systèmed’information
d’informationest laest la mémoire
mémoire de l’entreprise
de l’entreprise ; il sertentre
; il sert d’interface
le système décisionnel
d’interface et le système
entre le système opérationnel.
décisionnel et le système opérationnel :

informations résultat de
économiques système de pilotage l’entreprise
décisions infos traitées
infos système d’information infos

décisions infos collectées


matières produits
premières système opérant finis

Retenir de ce schéma, la place d’interface du système d’information


4
Systèmes d’Information

axée sur la production, la mémorisation et le traitement des données de l’activité de


L’informatique des l’entreprise : Informatique ́opérationnelle.
années 80
Informatique Opérationnelle : production et traitement de données : paie, comptabilité,
commandes, factures, …
marque le développement de l’Informatique Décisionnelle.
L’informatique des Informatique Décisionnelle : Les données sur l’activité sont filtrées, historisées et traitées pour
années 90 faciliter la prise de décision. Développement d’Infocentres renommés en Datawarehouse.

L’informatique des l’avénement du réseau.


années 2000 Croissance du volume des données, Internet, modèle multi tiers

Système d’Information de Gestion

Le système d’information d’une entreprise est l’ensemble des informations qui y


circulent ainsi que l’ensemble des moyens mis en œuvre pour les gérer.
L’objectif d’un système d’information est de restituer l’information à la personne
concernée, sous la forme appropriée et en temps opportun pour prendre une
décision ou effectuer un travail.
5

Les fonctions du système d’information

On peut distinguer 4 fonctions principales du système d’information :

1- Recueillir l’information (saisie )

2- Mémoriser l’information (stockage dans des fichiers ou bases de


données)

3- Exploiter l’information (traitement)

a. Consulter
b. Organiser
c. Mettre à jour
d. Produire de nouvelles informations par des calculs

4- Diffuser l’information (édition)


6

Rôles
Rôles du du système
système d’information
d’information :

Le système d'information a donc pour rôle de traiter, collecter, mémoriser, diffuser l'
Le système d'information a donc pour rôle de traiter, collecter, mémoriser, diffuser l’information...
information…
7

Qualités d’un système d’information informatisé


Pour être efficace, le système d’information informatisé devra assurer :

•  La rapidité et la facilité d’accès aux informations.

•  La fiabilité, la pertinence et l’intégrité des informations

•  la sécurité et la confidentialité des informations.


8

Notion de Système

Système = ensemble auto-réglable et interagissant avec


l’environnement qui fonctionne en vue d’un objectif précis
Information = donnée enrichie d’un modèle d’interprétation

Matériels
Ensemble d'éléments
Autres (hommes, règles, ...)
9

Exemple de système

Essence Voiture Déplacement

Contrôlée par un autre système de pilotage : conducteur


10

• Organisations : Entreprises ...


• Réalisation d'objectifs

Règlements fournisseurs Règlements clients

Entreprise
Produits achetés Produits vendus
11

Exemple : Gestion Commercial

Service commercial

Stat. ventes Nouveaux Produits

Système d'information
Bons de commandes
Bons livraison
Factures Pièces règlement

Service expéditions
Livraisons
Cmdes / Règlements
Clients
12

Aspects du SI

Statiques : Mémoire de l'organisation


• Enregistrement des faits : base d'information
• Enregistrement des structures de données, règles, ...
Modèle des données

Dynamiques
• M à J des données
• Changement de règles, structures et contraintes de l'U. ext.
• Processeur d'informations
Exemple :
13
Exemple :
Sous-systèmes et échanges
Sous-systèmes de flux dans
et échanges deune
fluxentreprise.
dans une entreprise.

LeLe système
système d’information
d’information peut doncpeut donc
être défini êtreétant
comme défini comme
l’ensemble desétant l’ensemble
flux d’information
des flux
circulant dansd’information circulant
l’organisation associé dansmis
aux moyens l’organisation associé
en œuvre pour les gérer. aux moyens
mis en œuvre pour les gérer.
14
Du réel
Du au
réel modèle
Du réel au ...…
modèle
au modèle …

Un modèle
Un est est
Unmodèle
modèleune abstraction
est
une du réel du réel
une abstraction
abstraction du réel
Un modèle peut être défini comme étant une image de la réalité. Toute réalité complexe a
A* estbesoin
un
A*modèle
est
d’êtreun de A pour
modèle
représentée de
pour un observateur
Acomprise
être pour un 0 ssi A* 0aide
observateur
et maîtrisée. à ssi A* O àaide O
répondre aux questions
répondre qu'il se pose
aux questions surpose
qu'il se A.(Minsky 1968) 1968)
sur A.(Minsky
Qu’est ce qu’un modèle de données ?
C'est une représentation simplifiée des informations pertinentes d'une réalité sur
laquelle on veut des renseignements
15
Les modèles des SI

Dans le contexte des systèmes d'information, on peut construire des modèles


selon divers points de vue :

•  modèle de données

•  modèle de traitement

•  modèle événementiel

•  modèle organisationnel

•  modèle de processus

•  ..

L’important dans un modèle est la notation utilisée et les explications fournies


avec le modèle pour relever les détails non représentables sur le modèle.
16

Réalité Schéma Conceptuel


Modélisation

Transformation
Miroir
Codage
Image

Base de
Données
17

Objectif

Informa(ser+un+système+d informa(on+

"  Permet le passage d un système non informatisé à un système d information


automatisé

"  C est une méthode de conception et de développement des systèmes


d informations

Deux+versions+de+MERISE+

"  MERISE 1 : Conception et développement des bases de données relationnelles


"  MERISE 2 : Conception et développement des bases de données avec l aspect
Orienté Objet : Notion d héritage,…
BTS CGO 1ére année Chapitre 5 - Cours
P10
18
L'analyse des données - Introduction Page 2 / 4
L'analyse des données
2 L'analyse des données
Le but de l’analyse des données est d’obtenir un schéma de l’organisation
Le but de l’analyse des données est d’obtenir un schéma de l’organisation des données
des données
stable stable
et invariantetpermettant
invariant permettant
de construire une solutionde construire
physique, une
c'est à dire solution
la base de
données.
physique, c'est à dire la base de données.
Pour parvenir à ce résultat, on procède par étapes :

Chaque étape conduit à la création de documents qui permet de formaliser les


spécifications, et de communiquer avec les acteurs du système à informatiser.
précédemment la premiére phase à l'informatisation d'un SI (ou d'un domaine d'un SI). Cette phase est
également appelée recueil d'information.
19

Cette phaseLededictionnaire des données


recueil est effectuée : le étapes
en plusieurs résultat
: de la phase de collecte des données
20

La localisation des informations

Le premier problème à résoudre est de trouver l’information. On recherchera dans :


• Les documents
• Les règlements
• Les normes, les procédures,
• Les bases de données, les fichiers •...
Certaines informations sont difficiles à mettre en évidence car elles ne sont pas
formalisées. Il faudra alors rechercher dans des domaines similaires le besoin
d'information.

Les techniques de recueil


Pour recenser les informations, on utilise essentiellement :
• L’étude de documents
• Les entrevues
• Parfois les questionnaires
21

Classification des données


On peut distinguer :

• Les données élémentaires : l’information se confond avec la valeur prise par


la donnée. Par exemple, un nom, une date... Ces données doivent être
recensées de manière exhaustive.

• Les données calculées ou déduites: elles sont obtenues par l’application d’un
traitement mathématique ou logique. Ces données sont associées à des règles
de calcul (règles de gestion). Il faut penser à bien identifier et conserver la règle
de gestion qui permet d’arriver au résultat. Cette règle permettra ensuite par
traitement d'obtenir le résultat désiré.

• Les données composées : certaines données sont regroupées en une même


entité sémantique (par exemple une adresse). Ces informations doivent être
décomposées en données élémentaires. Toutefois, s’il est montré qu’une donnée
composée n’est jamais décomposée dans la chaîne de traitement de
l’information, on peut envisager de la conserver telle quelle.
22

Typologie des données

Notion de domaine
On appelle domaine l’ensemble des valeurs prises par une donnée,
indépendamment du contexte de son utilisation.

Exemples :
•  domaine exhaustif : permis de conduire (A, A1, B, C, D, C1, E, F)
•  domaine borné : notes (min 0, max 20)
•  domaine typé : noms (30 caractères alphabétiques)
Types de données
le type est une contrainte physique liée à la manière dont sera stockée la donnée
dans le système d’information

Les principaux types à retenir sont :


•  Alphanumérique (AN) (on cherchera à déterminer la taille maximale)
•  Numérique (on peut préciser entier, réel, monétaire...)
•  Date (Date/Heure, Date, Heure )
•  Logique ou booléen (L ou B)
23
Le dictionnaire des données
Formalisme
Les données sont présentées dans un tableau.
Nom Description Domaine ou Commentaire
Contraintes, règles de
symbolique (rôle) type s
calcul

NoClient N° de client N (entier) N° séquentiel Automatique

Nom ou raison
sociale, format
Nom du : tout en
NomClient AN 50 Obligatoire
client
majuscules

Prix unitaire
HT du Format :
PrixCde N (monétaire) Obligatoire
produit 9999,99 EUR
commandé

Quantité
QteCde commandée N (entier) Obligatoire, > 0

Montant HT
Format : Somme (PrixCde *
MntCde de la N (monétaire)
9999,99 EUR QteCde)
commande

!
5 RueClient X
6 VilleClient X
7 NumRep No représetant X X
DF élémentaire et directe
8 NomRep Nom représentant X 24
L'analyse des dépendances 9
10
RefProduit
LibProduit
Référence Produit
Nom Produit
X X X C
X
11 PrixProd PrixProduit X
12 QteComm Qte Commandée X
Elle a pour but de rechercher les liens entre les NumBon
différentes
! DatComm, NumClient,données
NumRep également
NumClient ! Nomclient, RueClient, Villeclient DF partie gauche composée

appelés les dépendances. NumRep ! NomRep


RefProduit ! LibProd, PrixProd
NumBon, RefProd ! QteComm
, elle produira comme document un diagramme ou un graphe des dépendances.

NumBon RefProduit

DatComm NumRep NumClient LibProd PrixProd


QteComm

Méthodologie Merise - Cours du cycle B du Cnam.doc


NomRep Nomclient RueClient VilleClient
______________________________________________________________________________

L’exemple suivant illustre cette technique sur l’exemple classique de gestion des
commandes d’une entreprise.

1 2 3 4 5 6 7 8
1 NoCommande 1 NoClient NomClient
2 DateCommande 1 1
3 NoClient 1 1
4 NomClient 1 1 1
5 RefProduit 1
6 Designation 1 1
7 PrixUnitaire 1 1
8 QtéCommandée 1

Cette première phase met en évidence deux types de propriétés :

les propriétés identifiantes repérées dans la matrice par des colonnes qui
comportent au moins deux « 1 ». Dans l’exemple ci-dessus les propriétés 1, 3 et 5
sont sources de dépendances fonctionnelles et joueront donc le rôle d’identifiant
d’entités dans le modèle conceptuel.

les propriétés qui ne sont destination d’aucune dépendance fonctionnelle et qui


ont donc, dans la matrice des dépendances fonctionnelles, leur ligne vide. Dans
l’exemple ci-dessus, les propriétés TauxTVA et QtéCommandée ont ces
caractéristiques. Parmi ces propriétés il convient alors de distinguer :
- les propriétés paramètres telles que le taux de TVA
- les autres propriétés pour lesquelles ont doit rechercher les dépendances
fonctionnelles ayant des sources multi-attributs qui permettent de les atteindre.

La source de ces dépendances sera constituée d’un sous-ensemble des rubriques


identifiantes repérées à l’étape précédente. Ainsi, la propriété QtéCommandée, est déterminée
à partir d’un numéro de commande et d’une référence produit ce qui revient à écrire la
dépendance fonctionnelle suivante : RefProduit, NoCommande QtéCommandée

Ces nouvelles dépendances fonctionnelles sont alors ajoutées à la matrice des dépendances
25
Matrice des dépendances fonctionnelles
Méthodologie Merise - Cours du cycle B du Cnam.doc
______________________________________________________________________________
Une matrice des dépendances fonctionnelles admettant une ligne et une
colonne par propriétés du dictionnaire. Un « 1 » placé à l’intersection de la
L’exemple
ligne i et suivant
de la illustre
colonnecettej technique
indique sur l’exemple classique
la présence d’une de gestion des
dépendance
commandes d’une entreprise.
fonctionnelle entre la propriété Pj et Pi (Pj#Pi).
1 2 3 4 5 6 7 8
1 NoCommande 1 NoClient NomClient
2 DateCommande 1 1
3 NoClient 1 1
4 NomClient 1 1 1
5 RefProduit 1
6 Designation 1 1
7 PrixUnitaire 1 1
8 QtéCommandée 1

Cette
Cette première phase
première phase metmet
en évidence deux types
en évidence deuxde propriétés
types de: propriétés :
les propriétés
!  qui les propriétésidentifiantes
identifiantes repérées dans
repérées dans la la matrice
matrice par par
des des colonnes
colonnes qui
comportent
comportent au moins deux « 1 ». Dans l’exemple ci-dessus les propriétés 1, 3 et 5les
au moins deux « 1 ». Dans l’exemple ci-dessus
propriétés 1, 3deetdépendances
sont sources 5 sont sources de etdépendances
fonctionnelles joueront donc lefonctionnelles
rôle d’identifiant et
d’entités
joueront donc dans
le le modèle
rôle conceptuel.d’entités dans le modèle conceptuel.
d’identifiant
les propriétés qui ne sont destination d’aucune dépendance fonctionnelle et qui
ont donc, dans la matrice des dépendances fonctionnelles, leur ligne vide. Dans
l’exemple ci-dessus, les propriétés TauxTVA et QtéCommandée ont ces
caractéristiques. Parmi ces propriétés il convient alors de distinguer :
26
Les propriétés qui ne sont destination d’aucune dépendance fonctionnelle
et qui ont donc, dans la matrice des dépendances fonctionnelles, leur ligne
vide. Dans l’exemple ci-dessus, la propriété QtéCommandée a ces
caractéristiques. Parmi ces propriétés il convient alors de distinguer :
- les propriétés paramètres telles que le taux de TVA
- les autres propriétés pour lesquelles ont doit rechercher les dépendances
fonctionnelles ayant des sources multi-attributs qui permettent de les
atteindre.

La source de ces dépendances sera constituée d’un sous-ensemble des rubriques


identifiantes repérées à l’étape précédente. Ainsi, la propriété QtéCommandée, est
déterminée à partir d’un numéro de commande et d’une référence produit ce qui revient à
écrire la dépendance fonctionnelle suivante : RefProduit, NoCommande#QtéCommandée
Les notions de dépendances fonctionnelles 27

Il s’agit de mettre en évidence les liens qui existent entre les données. Deux données
X et Y sont en dépendance fonctionnelle lorsque la connaissance de X entraîne de
façon unique la connaissance de Y.

Soient A et B les ensembles de valeurs prises par deux données. Il y a dépendance


fonctionnelle entre A et B lorsque, connaissant une valeur de A, quelque soit
cette valeur, on détermine une et une seule valeur de B.

Dans ce qui suit, dépendance fonctionnelle sera abrégée par DF


On symbolise la dépendance fonctionnelle par A → B où
• A est appelé source de la DF (on dit aussi déterminant ou partie gauche)
• et B la cible (on dit aussi but, déterminé ou partie droite) de la DF.
Exemple :

•  NumClient → NomClient

•  NumCLient → AdresseClient

•  RefProduit → LibProduit
28
Dépendance fonctionnelle forte et faible

Définition stricte → DF forte :


•  La DF associe à chaque valeur de A une et une seule de B: il y a unicité au départ
•  La DF est vérifiée pour toutes les valeurs de A : il y a totalité au départ (toutes les
valeurs de A ont une image dans l’ensemble d’arrivée B)

Exemple :
la dépendance fonctionnelle NumCommande → NumClient est une DF forte car il n’y a
pas de commande sans client.

Définition large → DF faible :


•  Il y a dépendance fonctionnelle entre A et B lorsque, connaissant une valeur de A,
quelque soit cette valeur, on détermine au plus une valeur de B.
•  Cette définition supprime la contrainte de totalité au départ. On parle de DF faible.
Certaines valeurs de A n'ont pas de valeurs de B
29

•  Une dépendance fonctionnelle est forte si à


une valeur de X correspond une et une seule
valeur de Y.

•  Une dépendance fonctionnelle est faible, si à


une valeur de X correspond 0 ou 1 valeur de
Y.
30

Dépendance fonctionnelle à partie gauche composée

Une dépendance fonctionnelle peut comporter dans sa partie gauche plusieurs


attributs. On parle dans ce cas de dépendance fonctionnelle à partie gauche
composée.
Pour connaître une valeur de l’ensemble d’arrivée C, il faut connaître un couple
(ou plus) de valeurs provenant de A et de B.
Ce type de DF est noté : (d , d ) → d
1 2 3

Exemples :
(NoFacture, CodeProduit) → QtéFacturée,
(NoElève, Matière, Date) → Note
31
Dépendance fonctionnelle élémentaire

Une dépendance fonctionnelle est élémentaire s’il n’existe aucune donnée ou


sous-ensemble de données de la partie gauche assurant une dépendance
fonctionnelle vers le même but. Autrement dit, il ne doit pas y avoir de propriété
superflue dans la source de la DF.
Par définition les dépendance fonctionnelle à deux rubriques (A#B) sont
toujours élémentaires.

Exemples :
•  RefProduit → LibProduit est élémentaire (deux rubriques)
•  (NumFacture, RefProduit) → QtéFacturée est élémentaire (ni la référence
produit seule, ni le numéro de facture seul permettent de déterminer la
quantité)
•  (NumFacture, RefProduit) → LibProduit n’est pas élémentaire puisque la
référence du produit suffit à déterminer le libellé.
32

Dépendance fonctionnelle directe

•  Une dépendance fonctionnelle d → d est directe s’il n’existe aucune donnée


1 2
d qui engendrerait une dépendance fonctionnelle transitive telle que
3
d →d →d
1 2 3
•  Si on a A → B → C, il est inutile d’indiquer sur le diagramme que A → C, cette
relation n’apporte aucune information supplémentaire.

Par exemple, soient les dépendances fonctionnelles :


NumFacture → NumReprésentant et NumReprésentant → NomReprésentant

NumFacture → NomReprésentant n’est pas une dépendance fonctionnelle


directe puisqu’elle est obtenue par transitivité. Il conviendra alors de ne considérer
que la premiére DF.
33

Dépendances fonctionnelles symétriques

Certaines dépendances fonctionnelles sont symétriques, c’est à dire que la


partie gauche détermine la partie droite et inversement.

Par exemple :
NoSérieVéhicule → NoImmatriculation et NoImmatriculation →
NoSérieVéhicule

Dans ce cas, il faut choisir de privilégier une des dépendances fonctionnelles,


en fonction des règles de gestion.

S'il s'agit d'assurer le suivi du véhicule tout au long de sa vie, le no


d'Immatriculation pouvant changer, on choisira la premiére DF
(NoSérieVéhicule → NoImmatriculation).
34
La recherche et la formalisation des dépendances fonctionnelles

La recherche passe par deux phases, à savoir quels sont les objets du
domaine de gestion observé, quels éléments du dictionnaire des données sont
rattachés à cet objet, puis ensuite l'analyse des DF entre ces éléments. Le tout
sera ensuite formalisé dans un diagramme ou un graphe des DF.

La recherche des objets

Un objet est un élément du système d’information pourvu d’une existence propre,


conforme aux règles de gestion de l’organisation.

Le repérage des objets de gestion permet ensuite de faciliter la recherche des DF


et la construction du diagramme des DF.

Exemple :

Les véhicules .... font l'objet d'un suivi dans des garages ...

Ce texte fait apparaître 2 objets qui sont VEHICULE et GARAGE.


3.3 La représentation des dépendances fonctionnelles
35
La recherche des dépendances
Cette représentation se fait à l'aide de deux fonctionnelles
outils qui sont la matrice ou le graphe des DF. Le graphe
des DF permettant de mieux représenter les liens, et surtout les DF à partie gauche composée.
Un objet est représenté par une donnée particulière : l’identifiant.
Exemple à partir d'une gestion de commande réduite (Matrice puis graphe des DF)

l’identifiant
1
est
NumBon
en
No Propriété dépendance
Signification fonctionnelle
1 2
No Bon Commande X X X
3 4 5avec
6 toutes
7
X
8 9les10autres
11 12 propriétés de
C
l’objet. 2 DatComm DateCommande X
3 NumClient No de Client X X X X
4 NomClient X
Repérer5 lesRueClient
objets du système d’information X permet d’avancer très vite dans
6 VilleClient X
l’étude des
7 dépendances
NumRep fonctionnelles. La démarche
No représetant X Xconsistera alors à partir du
DF élémentaire et directe
dictionnaire
8 des données
NomRep et du repérage
Nom représentant des identifiants
X à rechercher les DF
9 RefProduit Référence Produit X X X C
élémentaires et directes
10 LibProduit Nom Produit X
11 PrixProd PrixProduit X
12 QteComm Qte Commandée X
Exemple :
NumBon ! DatComm, NumClient, NumRep
Les véhicules sont repérés par leur numéro d'immatriculation
NumClient ! Nomclient, RueClient, Villeclient
et caractérisé par
DF partie gauche composée
une couleur...
NumRep ! NomRep
RefProduit ! LibProd, PrixProd
Le dictionnaire des!données
NumBon, RefProd QteComm comprendra comme information Immat et couleur.
Immat étant repéré comme un identifiant, on en déduira la DF Immat# Couleur

NumBon RefProduit

DatComm NumRep NumClient LibProd PrixProd


QteComm

NomRep Nomclient RueClient VilleClient


36

MCD : Il permet de « dessiner » la structure des données du système


d’information à implanter.
37
Concepts et formalisme
Le formalisme retenu est le modèle Entité-Association (MEA), mais on parlera
souvent de MCD (Modèle Conceptuel des Données).

Les entités
Elles correspondent aux objets du système d’information. Par exemple, l’entité
CLIENT rassemble toutes les informations communes aux clients de l’entreprise.
• Les entités sont nommées.
• Leur nom est unique dans le modèle et s'écrit en majuscule
Occurrence
Dans le système d’information, l'entité CLIENT représentera l'ensemble des
clients. Chaque client constitue alors une occurrence de l’entité. Une occurrence
représente un « exemplaire » de l’objet.
38
Propriétés
Une entité possède toujours au moins une propriété. Chacune de ces
propriétés doit pouvoir être valorisée de manière unique.
Les propriétés des entités sont issues du dictionnaire des données.
Identifiant
s Parmi les propriétés d’une entité, il y en a une qui joue un rôle particulier :
L’identifiant
ours au moins uned’une l’entité est
propriété. une propriété
Chacune de cestellepropriétés
qu’à chaque valeur
doit de la être
pouvoir
propriété corresponde une et une seule occurrence de l’entité.
Par conséquent
s sont issues :
du dictionnaire des données.
• on ne peut trouver deux occurrences d’une entité ayant le même identifiant
• l’identifiant se confond avec l’entité: l’entité existe si on peut valoriser
nt
l’identifiant
ne entité, •ilsiyl’entité
en a une qui joue
ne possède un rôle
qu’une particulier
propriété, :
cette propriété est l’identifiant
une propriété
• toutestellelesqu’à chaquesont
propriétés valeur de la propriété
en dépendance corresponde
fonctionnelle élémentaireune et
et directe
une
conséquent
avec: l’identifiant
occurrences d’une entité
• L’identifiant ayant le souligné
est représenté même identifiant
dans le modèle.
d avec l’entité : l’entité existe si on peut valoriser

’une propriété, cette propriété est l’identifiant


t en dépendance fonctionnelle élémentaire et directe avec l’identifiant
• • L’identifiant est
•L’identifiant estreprésenté
L’identifiant est souligné
représenté
représenté dans
souligné
souligné le modèle.
dans
dans le modèle.
le modèle.

39
2.22.2 2.2Les
Les Les Les associations
associations
associations
associations
Une association est lien
un lien entre des entités.Contrairement
Contrairement aux
aux entités,
entités, les
les associations n'ont pas
neassociation
association
Une est
est un
un
associationlien entre
entre
est des
des
un entités.
entités.
lien Contrairement
entre des aux
entités. entités, les
Contrairement associations
associations
aux n'ont
n'ont
entités, lespas pas
d’existence
istence propre propre mais elles peuvent porter
desdes propriétés.
existence propremais
maiselles
ellespeuvent
peuvent porter
porter des propriétés.
propriétés.
associations
Les associationsn'ont
• associations pas d’existence
sont nommées, propreà l’aide
généralement mais elles peuvent
d’unverbe
verbe porter des propriétés.
d’action.
• • Les Les associationssontsontnommées,
nommées, généralement
généralement ààl’aide
l’aided’un
d’un d’action.
verbe d’action.
• • Une
• Une
Une •association
Les associations
association
association peut
peutlier sont
peut lier
lierplus
plus de
denommées,
plus généralement à l’aide d’un verbe d’action.
de deux entités.
deux entités.
entités.
Exemples• Une
: association peut lier plus de deux entités.
xemples
mples : :
Association binaire : binaire :
Association
ociation binaire : :
ssociation binaire

Association porteuse de
propriétéAssociation
ssociation
ociation
porteuse porteuse
: porteuse de
de
de
opriété : propriété :
riété :

Association ternaire :
Association ternaire :
ssociation ternaire :
ociation ternaire :
40
Rôles d’une association

Chaque
2.2.2« patte
Rôles»d’une
d’uneassociation
association vers une entité représente le rôle joué par
Chaque «l’association.
patte » d’une Ces rôles peuvent
association vers une être
entiténommés, cela
représente peut joué
le rôle aiderparà l’association.
clarifier le Ces rôle
modèle
peuvent être danscela
nommés, certaines situations
peut aider complexes.
à clarifier le modèle dans certaines situations complexes.

Cardinalités
Les rôles sont généralement faciles à identifier sur des associations binaires, ce n’est pas le cas de
associations
La n-aires.
cardinalité représente le nombre d’occurrences minimum et maximum d’une
association par rapport à une entité.
2.3• La Cardinalités
cardinalité minimale représente le nombre de fois « au minimum » où une
2.3.1 de
occurrence Définition
l’association participe aux occurrences de l’entité. Cette cardinalité
La cardinalité représente
est choisie parmi le 0nombre
ou 1. d’occurrences minimum et maximum d’une association par rapport
une entité.
• La cardinalité maximale représente le nombre de fois « au maximum » où une
• La cardinalité minimale représente le nombre de fois « au minimum » où une occurrence d
occurrenceparticipe
l’association de l’association participe
aux occurrences deaux occurrences
l’entité. de l’entité.
Cette cardinalité Cette cardinalité
est choisie parmi 0 ou 1.
• Laestcardinalité
choisie parmi
maximale1 ou représente
n où n indique une cardinalité
le nombre maximale
de fois « au maximum supérieure
» où une àoccurrence
1 d
mais non quantifiée.
l’association Si laoccurrences
participe aux valeur de ndeest connue,
l’entité. on cardinalité
Cette peut la mentionner.
est choisie parmi 1 ou n où
indique une cardinalité maximale supérieure à 1 mais non quantifiée. Si la valeur de n est connue, o
peut la mentionner.
41
2.3.2 Formalisme
Formalisme
es cardinalités sont mentionnées par couple du côté de l’entité à considérer. La cardinalité mini
Les cardinalités sont mentionnées par couple du côté de l’entité à considérer.
eprésentée en premier, la maximale en second.
La cardinalité minimale est représentée en premier, la maximale en second.
xemple :

• un employé
un employé peutpeut suivre
suivre (0) (0)
ou ou plusieurs
plusieurs (n)(n) affaires
affaires
• une affaire est suivie
• une affaire par unpar
est suivie (etunun(etseul) employé
un seul) employé
• une affaire est passée avec un (et un seul) client
• une affaire est passée avec un (et un seul) client
• un client passe une (sinon ce n’est pas un client) ou plusieurs (n) affaires
• un client passe une (sinon ce n’est pas un client) ou plusieurs (n) affaires
a cardinalité
Laminimale
cardinalitéàminimale
1 ou à 0 àdépend
1 ou à des règles des
0 dépend de gestion.
règles deSigestion.
sur le schéma
Si sur leprécédent,
schéma on ad
auche une cardinalité 0,n cela voudrait dire qu'il existe des clients n'ayant pas passé d'affaire.
précédent, on admettait à gauche une cardinalité 0,n cela voudrait dire qu'il existe
des clients n'ayant pas passé d'affaire.
2.4 Associations réflexives
Ce sont des associations qui relient deux fois la même entité.
42
Cardinalités d’une Association
E1 E2 E1 E1 E2
Assoc E2 Assoc
Assoc

0,1 1,1 1,1 1,1 1,1


E1 E2 0,N
Assoc
Cardinalités mini :
0 : Certaines occurrences de l entité peuvent ne pas participer à l assoc
1 : Toute occurrence de l entité participe obligatoirement à l association
Cardinalités maxi :
1 : Toute occurrence de l entité participe au plus une fois à l association
N : Toute occurrence de l entité peut participer plusieurs fois à l assoc
0,N 1,N

Conclusion
•  La cardinalité mini traduit la capacité d une occurrence à exister
indépendamment ou non des occurrences de l association.
•  La cardinalité maxi traduit la capacité associative de l association pour
l entité considérée
• un client passe une (sinon ce n’est pas un client) ou plusieurs (n) affaires
43
cardinalité minimale à 1 ou à 0 dépend des règles de gestion. Si sur le schéma précédent, on admettai
uche une cardinalité 0,n cela voudrait dire qu'il existe des clients n'ayant pas passé d'affaire.
Associations réflexives
Ce sont des associations qui relient deux fois la même entité.
2.4 Associations réflexives
sont des associations qui relient deux fois la même entité.

e pièce (en mécanique par exemple) est composée de 1 ou plusieurs pièce.

Dans
ns les associations les associations
réflexives, la notionréflexives, la notion
de rôle prend de rôle
tout son prend tout son sens.
sens.

2.5 Petit aparté sur les contraintes d’intégrité fonctionnelle


Quand on détermine une association présentant une cardinalité maximale à 1, on est en présen
44
Démarche de construction du MCD
On peut les repérer intuitivement ou s’aider du
1- Repérage des entités
graphe des dépendances fonctionnelles.

2- Repérage des associations

3- Placement des cardinalités

4- Vérification du modèle

Toutes les propriétés doivent être élémentaires (non décomposables)


• Chaque entité possède un et un seul identifiant, rôle joué par une seule propriété.
• Les propriétés d’une entité doivent être en dépendance fonctionnelle avec l’identifiant.
• Les propriétés d’une association doivent être en dépendance fonctionnelle élémentaire avec
l’identifiant implicite de l’association.
• Une propriété ne peut figurer qu’une fois dans le modèle (pas de redondance)
• Une propriété d’une entité ne peut être en dépendance fonctionnelle avec une autre propriété non
identifiant de cette entité (pas de transitivité).
• Une propriété portée d’une association doit être en dépendance fonctionnelle élémentaire avec la «
concaténation » des identifiants des entités participant à l’association.
45

Normalisation des entités


Première forme normale (1FN) : toutes les propriétés sont élémentaires et il existe au
moins une clé. Si une clé est unique, elle sera
prise comme identifiant
Deuxième forme normale (2FN) : toute propriété doit dépendre de la clé par une DF
élémentaire
Troisième forme normale (3FN) : toute propriété doit dépendre de la clé par une DF
élémentaire directe
Forme normale de Boyce-Codd (BCFN) : si une entité possède un identifiant concaténé, un des
éléments de cet identifiant ne doit pas dépendre d'une
autre propriété.
Exemples :

CLIENT

Nom, adresse

Pas FN1 car pas de clé et adresse pas élémentaire (concaténée)


Le but de ce chapitre n'est pas l'étude du modèle relationnel qui a été vu dans le cours
précédent sur les bases de données mais de donner les règles qui permettent la mise en œuvre
de la quatrième étape de l'analyse des données, à savoir la traduction logique. Cette étape a 46
Le MLD
pour (Modèle Logique
but de fournir des Données
le modèle relationnel àou MRD
partir du (Modèle relationnel
modèle conceptuel. des phase
Si cette données)
est
réalisée en automatique par les outils de modélisation (Power Amc, Windesign, Analyse SI),
il n'est pas inutile d'en connaître les règles, ne serais-ce que pour en comprendre les modes de
Cettetraduction.
étape a pourCette but
étapede
defournir le modèle
traduction correspondrelationnel à partir
à la quatrième phasedu modèledes
de l'analyse conceptuel.
données

Le MLDLe (Modèle Logique


MLD (Modèle des des
Logique Données
Donnéesouou MRD
MRD (Modèle relationneldes
(Modèle relationnel des données)
données) reste reste
indépendant du SGBD
indépendant utilisé.utilisé.
du SGBD
relationnel.
47

Les Règles de passage


2.1 Le traitement des entités
Le traitement des entités
• Chaque entité du MCD est transformé en table
!  Chaque• entité du MCD
Les propriétés deest transformé
l'entité deviennenten table de la table
les attributs
!  Les propriétés de l'entité
• L'identifiant deviennent
de l'entité devient cléles attributs de la table
primaire

!  L'identifiant de l'entité devient clé primaire


Exemple :

AUTEUR
LIVRE
num_auteur
num_livre
nom_auteur
titre_livre
date_naissance

AUTEUR (Num_Auteur, Nom_Auteur, Date_Naissance)


LIVRE (Num_Livre, Titre_Livre)

!  AUTEUR (Num_Auteur, Nom_Auteur, Date_Naissance)


!  LIVRE (Num_Livre, Titre_Livre)
Cette association correspond à une paire de cardinalité 1,1 et 0,n ou 1,n. Ce cas48est ég
dénommé sous le vocabulaire de CIF (Contrainte d'Intégrité Fonctionnelle).
Les associations
d'association binairesappelée association 1,n
est également
Association binaire 1,1 – (0,n ; 1,n)
Dans ce cas, la table issue de l'entité coté cardinalité 1,1 reçoit comme clé étrangè
Dans ce
primaire decas, la table
l'entité liée.issue de l'entité coté cardinalité 1,1 reçoit comme clé
étrangère la clé primaire de l'entité liée.
Exemple :

AUTEUR
LIVRE
num_auteur 1,n écrit 1,1 num_livre
nom_auteur
titre_livre
date_naissance

AUTEUR (Num_Auteur, Nom_Auteur, Date_Naissance)


!  AUTEUR (Num_Auteur,
LIVRE Nom_Auteur,
(Num_Livre, Date_Naissance)
Titre_Livre, Num_Auteur#)
!  LIVRE (Num_Livre, Titre_Livre, Num_Auteur#)

Explication : Dans l'exemple ci-dessus, un livre est écrit par un et un seul auteur. Il
normal de retrouver l'auteur associé au livre dans la table livre.
2.2.2 Association binaire 0,1 -1,1
49
Cette association correspond à une paire de cardinalité 1,1 et 0,1. Dans ce cas, il y a plusieurs
Association
solution, une binaire
bonne et 0,1 -1,1 bonne. Je vous les cite toutes les deux dans la mesure où
une moins
vous êtes susceptibles de retrouver les deux possibilités.
Cette association correspond à une paire de cardinalité 1,1 et 0,1.
Dans ce cas,
Exemple : il y a plusieurs solution, une bonne et une moins bonne.

MICRO CD_ROM
0,1 équiper 1,1
num_micro num_cd
marque_micro marque_cd

La meilleure solution est que la table CD_ROM reçoivent comme clé étrangère
Cet exemple illustre le fait qu'un Micro est équipé de 0 ou 1 CD-Rom. Les nos
Num_Micro. Car un àCD_Rom
correspondent des numéros est
de affecté
série. à un et un seul micro.
Ce qui donne :
!  MICRO (Num_Micro,
La meilleure Marque_Micro)
solution est que la table CD_ROM reçoivent comme clé étrangère Num_Micro.
!  CD_ROM (Num_Cd,
Car un CD_Rom Marque_Cd,
est affecté à un et un Num_Micro#)
seul micro. Ce qui donne :

Une autre solution àMICRO


proscrire est l'échange
(Num_Micro, des clés primaires entre les 2 tables,
Marque_Micro)
ce qui donnerait : CD_ROM (Num_Cd, Marque_Cd, Num_Micro#)

!  MICRO (Num_Micro, Marque_Micro, Num_Cd#)


Une autre solution à proscrire est l'échange des clés primaires entre les 2 tables, ce qui
!  CD_ROM
donnerait(Num_Cd,
: Marque_Cd, Num_Micro#)

Dans ce cas, un micro pouvant ne pas avoir de CD_Rom, la clé étrangère num_CD
peut être nulle, ce qu'il faut éviter au maximum.
2.2.3 Association binaire 0,1 -0,1
50
Association
Exemple : binaire 0,1 -0,1

MICRO CD_ROM
équiper
num_micro num_cd
0,1 0,1
marque_micro marque_cd

Partant qu'une clé étrangère ne peut être nulle, la seule solution est de créer une
table
Cetintermédiaire qui illustre
exemple illustre le faitle que
fait que l'on mémorise
certains CD_Romles cas d'association
n'équipent entre(cas de vent
pas de micro
l'on ne sait connaît pas la destination du cd-rom.
un lecteur de CD-Rom et un Micro.
Ce cas d'association nécessite
En reprenant la création
le modèle d'uneetautre
relationnel, table
partant (ici EQUIPER)
qu'une prenant
clé étrangère ne peut être nu
seuleclé
comme solution estlade
primaire créer une table
composition intermédiaire
des clés qui autres
primaires des illustretables
le faitdevenant
que l'on mémorise l
d'association entre un lecteur de CD-Rom et un Micro. Ce cas d'association nécess
clé étrangère dans la table COMPOSER:
création d'une autre table (ici EQUIPER) prenant comme clé primaire la composition de
MICRO (Num_Micro,
!  primaires Marque_Micro)
des autres tables devenant clé étrangère dans la table COMPOSER:

!  CD_ROM (Num_Cd, Marque_Cd)

!  EQUIPER (Num_Micro#, Num_Cd#) Marque_Micro)


MICRO (Num_Micro,
CD_ROM (Num_Cd, Marque_Cd)
EQUIPER (Num_Micro#, Num_Cd#)
Il existe plusieurs solutions, et de la même façon que précédemment l'une meille
l'autre.
51
• La premiére solution
Association binaire 0,1 -0,n ou 1,n
assimile la cardinalité 0,1 à une cardinalité 1,1 et don
migration de la clé primaire de la table coté 1,n vers la table coté 0,1 ce qui
Il existe plusieurs solutions, et de la même façon que précédemment l'une meilleure
que l'autre.
possibilité d'une valeur nulle pour la clé étrangère.
• La deuxième
• La première condition
solution assimile consiste 0,1
la cardinalité à créer une
à une table intermédiaire
cardinalité 1,1 et donc ilavec
y a une clé
migration decomposée.
la clé primaire de la table coté 1,n vers la table coté 0,1 ce qui laisse la
possibilité d'une valeur nulle pour la clé étrangère.
• La deuxième
Exemple : condition consiste à créer une table intermédiaire avec une clé primaire
composée.

EQUIPE RESPONSABLE
diriger num_responsable
nom_equipe
0,1 1,n nom_responsable

Solution 1 : !  RESPONSABLE (Num_Responsable, Nom_Responsable)


Cet exemple illustre le fait qu'une équipe est dirigée par un responsable mai
!  EQUIPE
peut n'être dirigée (Nom_Equipe, Num_Responsable#)
par personne.

Solution
Solution2 :1 :
EQUIPE (Nom_Equipe)
!  RESPONSABLE (Num_Responsable, Nom_Responsable)
RESPONSABLE
!  EQUIPE (Num_Responsable,
(Nom_Equipe, Nom_Responsable)
Num_Responsable#)
!  DIRIGER (Nom_Equipe#, Num_Responsable#)
Solution 2 :
EQUIPE (Nom_Equipe)
Le modèle relationnel Page 6 / 8
52
Association binaire x,n - x,n
Ce cas regroupe toutes les associations
2.2.5 Association où-x,n
binaire x,1 la cardinalité maximale de part et
d'autre est à n, la cardinalité minimale pouvant être 0 ou 1.
Ce cas regroupe toutes les associations où la cardinalité maximale de part et d'autre est à n, la
Dans ce cas, cardinalité minimale
la règle pouvantetêtre
est simple 0 ou 1. à la création d'une table issue de
consiste
Dans ce cas, la règle est simple et consiste à la création d'une table issue de
l'association, cette table
l'association, recevant
cette comme
table recevant clé clé
comme étrangère
étrangère les clésprimaires
les clés primaires
des 2des 2 tables.
autres
La clé primaire de cette table résultant de l'association étant la composition des deux clés
autres tables. La clé primaire de cette table résultant de l'association étant la
étrangères.
composition des deux clés étrangères.
Exemple :

MICRO PERIPHERIQUE
num_micro 0,n équiper 0,n
type_periph
marque_micro marque_periph

Dans l'exemple ci-dessus, un micro est équipé d'un ou plusieurs type de périphérique (disque
!  MICRO dur,
(Num_Micro, Marque_Micro)
cd rom, souris …) et dans l'autre sens, un type de périphérique équipe plusieurs micro.

!  PERIPHERIQUE (Type_Periph,
La transformation devient : Marque_Periph)
MICRO (Num_Micro, Marque_Micro)
!  EQUIPER (Num_Micro#, Type_Periph#)
PERIPHERIQUE (Type_Periph, Marque_Periph)
EQUIPER (Num_Micro#, Type_Periph#)
2.2.6 Association binaire x,1 -x,n et porteuse de données 53
Association binaire x,n-x,n et porteuse de données
Ce cas est une extension du cas précédent, la propriété portée par l'assoc
Ce cas est une extension du cas précédent, la propriété portée par
attribut de la table issue de l'association
l'association devient un attribut de la table issue de l'association
Exemple :

PRODUIT COMMANDE
1,n figurer 1,n
num_produit num_cde
qte_cde
nom_produit date_cde

PRODUIT (Num_Produit, Nom_Produit)


COMMANDE (Num_Cde, Date_Cde)
LIGNE_CDE
!  PRODUIT (Num_Produit, (Num_Cde#, Num_Produit#, Qte_Cde)
Nom_Produit)

!  COMMANDE (Num_Cde, Date_Cde)

!  LIGNE_CDE (Num_Cde#, Num_Produit#, Qte_Cde)


Le modèle relationnel
54
Associations n-aires 2.3 Associations n-aires
Associations ternaires
2.3.1 Associations ternaires
Le traitement de ce type d'association est en fait une généralisation du cas
Le traitement de ce type d'association est en fait une généralis
précédent. L'association génère une table, cette
L'association génèretable reçoit
une table, entable
cette clé reçoit
étrangère
en clé étrangère le
des autres tables, la composition de chaque clés étrangères devenant
les attributs clés primaires des autres tables,
des trois laSicomposition
attributs. l'association estde chaque
porteuse clés les donné
de données,
étrangères devenant la clé primaire
attributs decomposée des trois attributs. Si
la table composée.

l'association est porteuse de données,


Exempleles
: données portées deviennent des
attributs de la table composée.
ECURIE SAISON
0,n engager 0,n
nom_ecurie id_saison

0,n
PILOTE
num_pilote
!  SAISON (Id_Saison) nom_pilote

!  PILOTE (Num_pilote, Nom_pilote)


Cet exemple peut se lire : Une écurie engage un ou plusieurs pilo
!  ECURIE (Num_Ecurie, Nom_Ecurie)
saison. Ce qui peut se lire dans tous les sens de l'association. Le mo
est donc :
!  ENGAGER (Id_Saison#, Num_Ecurie#, Num_Pilote#)
SAISON (Id_Saison)
PILOTE (Num_pilote, Nom_pilote)
55

Associations n-aires
Ce cas n'est qu'une généralisation du traitement de
l'association ternaire. La table issue de l'association est
composée des identifiants de toutes les entités participant à
l'association comme clé étrangère et comme clé primaire
composée. Les propriétés portées par l'association devenant
des attributs de cette table.
2.4 Associations réflexives 56

Associations réflexives
Ces associations sont en en fait des associations binaires, leur traitement dép
Cescardinalités.
associations sont en en fait des associations binaires,
leur traitement dépend donc des cardinalités.
Exemple

mari
0,n
PERSONNE épouser
num_personne date_mariage
nom_personne
0,n
femme

PERSONNE (Num_Personne, Nom_Personne)


!  PERSONNE (Num_Personne, Nom_Personne)
EPOUSER (Num_Mari#, Num_Femme#, Date_Mariage)
!  EPOUSER (Num_Mari#, Num_Femme#, Date_Mariage)
57

Règles de gestions

Contraintes d'intégrité du modèle (lois de l'univers réel modélisé dans le SI)


Contraintes statiques
Portent sur : - une propriété (liste de valeurs possibles ...)
- plusieurs pptés d'une même relation ou entité
cde(no,date-cde,date-livr) avec date-cde < dte-livr
- les cardinalité
- les dépendances fonctionnelles

Contraintes dynamiques : règles d'évolution


ex: un salaire ne doit pas baisser
58

Exemple

RG1 : Tout enseignant enseigne en principe au moins une matière, mais certains d entre
eux peuvent être dispensés d enseignement en raison de leur travaux de recherche

RG2 : Toute matière est enseignée dans au moins une classe

RG3 : Toute classe a au moins trois enseignements

1,n MATIERE
0,n
ENSEIGNANT ENSEIGNE
3,n
CLASSE
59
Les Contraintes d Intégrité :

Elles représentent un ensemble de règles fondamentales dont l application permet de garantir


la cohérence du schéma relationnel d une base de données .

Ces règles contrôlent la cohérence des valeurs prises par :

* les attributs par rapport à leur domaine de valeurs (contrainte d intégrité de


domaine)
Exemple : Si l attribut N° Client est défini sur un domaine de valeurs numériques , il ne
peut pas contenir de lettres .

* les clés primaires des relations ( contraintes d intégrité de relations )


L intégrité de relation concerne les valeurs d une clé primaire qui doivent être uniques
( pas de doublons ) et non nulles ( toujours spécifiées ) .

* les clés étrangères des relations ( contraintes d intégrité référentielles )


L intégrité référentielle stipule qu une clé étrangère ne peut prendre que les valeurs définies
dans le domaine primaire de la clé primaire à laquelle elle est associée .
60

Exemples

Ligne-Commande
Pas FN2 car Df avec clé n'est pas élémentaire
N°cde,Réf, Dés, Qté

Commande 1,n Concerne 0,n Produit

N°cde Qté Réf, Dés

Client
Pas FN3 (Pas de transitivités)
Codecli,nomcli, codecaté, nomcaté

Client 1,n Appartient à 0,n Catégorie

Codecli, nomcli Codecaté, nomcaté


61

Exemples

COURS
N'est pas BCFN
Matière, N°classe, Code-prof

PROF Fait cours CLASSE


1,n 1,n

Code-prof , matière N°classe


62
Construction du Modèle Logique de Données Relationnel
4 ) Application : Schéma relationnel d un service clientèle dans un café

SERVEUR MLDR
1# 1,N 0,N CALENDRIER
AFFECTER
2 SERVEUR ( 1 # , 2 )
9#

CALENDRIER ( 9 # )
1,N 1,N

0,N AFFECTER ( 1 #, 9 # , 3 # )
SUIVRE 1,N TABLE
3#
CONCERNER TABLE ( 3 # )
1,1 TRAITER
1,1 COMMANDE ( 11 #, 12, 10 ,
1,1
COMMANDE 1 #, 3 #, 9 # )
11 # CONSOMMATION
FIGURER 1,N FIGURER ( 11 # , 4 # , 7 , 8 )
12 1,N 4 #
10 5
7 CONSOMMATION ( 4#, 5 , 6 )
8 6

Dictionnaire de données

1 - N° de serveur 7 - Quantité d une consommation commandée


2 - Nom de serveur 8 - Montant d une ligne de commande
3 - N° de table 9 - Date de commande
4 - N° de consommation 10 - Heure de la commande
5 - Libellé consommation 11 - N° de la commande
6 - Prix unitaire consommation 12 - Montant total de la commande
63

CREATION D UNE BASE DE DONNEES


64

Qu’est-ce qu’une base de données ? ( BD )

Une base de données ( BD ) est un ensemble structuré de données enregistrées avec le minimum de redondance
sur un support de stockage informatique et accessibles à plusieurs utilisateurs de manière sélective et simultanée
au moyen d un système de gestion de base de données ( SGBD ) .

Un SGBD permet de répondre simultanément aux interrogations ( requêtes ) de plusieurs utilisateurs exprimées
sur une même base de données déployée sur un réseau informatique .

Exemple : Base de données d une compagnie aérienne


Les requêtes sont très variées , par exemple :

- Une réservation : « Liste des passagers qui ont réservé un vol déterminé ? »

- Un équipage : « Quel est le pilote du vol Royal Air Maroc Casablanca – Londres du 15 Octobre
Départ 15 H 30 ? »

- Un appareil : « Quelle est la date de la dernière révision de l avion N ° 97 ? »


65
Un Système de Gestion de Bases de Données

offre la possibilité à l utilisateur de manipuler les représentations abstraites des données


( métadonnées ) indépendamment de leur organisation et de leur implantation sur les supports
physiques .

Fonctions principales d un SGBD

-  Décrire et organiser les données sur les mémoires secondaires


( disques, bandes magnétiques , etc… )
- Rechercher, sélectionner et modifier les données

Fonctions complémentaires d un SGBD

-  Sécurité : vérifier les droits d accès des utilisateurs sur les données

-  Intégrité : définir des règles qui maintiennent une cohérence entre les données
compte tenu de leur structure ( contraintes d intégrité )

-  Concurrence d accès : détecter et traiter les cas où il y a conflit d accès entre


plusieurs utilisateurs et les traiter correctement .
66

Requêtes SQL
67

Qu'est-ce-que le SQL ?

•  Structured Query Language = Langage d'interrogation structuré


•  Permet de consulter une base de données (requêtes sélection) et aussi de
créer, modifier, supprimer tables et enregistrements
•  Langage normalisé
•  mais implémentations parfois différentes (dialectes)
•  L4G (langage de quatrième génération)
•  Langage déclaratif, non procédural (procédural : C, Pascal...)
•  Inspiré du modèle d'algèbre relationnel de E.F. Codd (1970)
•  Utilisé sur Oracle, MySQL, PostGreSQL, Access...
68
LE LANGAGE DE REQUETES SQL

Les 3 niveaux du langage SQL

* Langage de définition de données ( LDD ) : Il permet de spécifier un schéma


conceptuel de BD
CREATE , ALTER et DROP ( tables , indexes et vues )

* Langage de manipulation de données ( LMD ) : Il permet d interroger et de manipuler


les données
SELECT , INSERT , UPDATE , DELETE , OPEN , FETCH , CLOSE , etc…

* Langage de contrôle de données ( LCD ) : Il permet de gérer la sécurité des données,


les transactions et les accès concurrents
GRANT et REVOKE , BEGIN et END TRANSACTION , COMMIT et ROLLBACK, etc…
69
Les Ordres SQL

Les ordres LMD sont des instructions SQL créées à partir des commandes suivantes :
Commande Rôle
SELECT Interroger une base de données en vue d extraire les enregistrements qui répondent à
des critères particuliers
INSERT Insérer ( charger ) des lots de données dans la base de données en une seule opération
UPDATE Modifier ( mettre à jour ) des valeurs d attributs dans une table ou bien des valeurs
d enregistrements entiers répondant à des critères particuliers
DELETE Supprimer des enregistrements dans une table de base de données sélectionnés après
un critère donné .

Chaque commande peut utiliser une ou plusieurs clauses obligatoires et des clauses optionnelles .
Les clauses permettent de définir l origine et la nature des données qu il faut sélectionner ou manipuler .
Clause Rôle
FROM Nommer une ou plusieurs tables ou vues à partir desquelles les enregistrements
doivent être sélectionnés
WHERE Spécifier des conditions de jointure et / ou de sélection sur les enregistrements
GROUP BY Spécifier les attributs de regroupement lors d une opération de calcul et / ou
regroupement
HAVING Spécifier des conditions de sélection sur les enregistrements obtenus après une
opération de regroupement
ORDER BY Trier les enregistrements sélectionnés pour être projetés dans un ordre particulier
70
COMMANDE SELECT

SELECT [ALL/DISTINCT] < liste d attributs de projection simples , calculés ou renommés>


FROM < liste de tables ou vues >
[WHERE < critère de jointure naturelle, théta-jointure, jointure externe > ]
[ AND < critère de sélection simple > ]
[ AND < critère de sélection complexe appelant une sous-requête > ]
[GROUP BY < liste d attributs de regroupement > ]
[HAVING < critère de sélection sur des attributs calculés ou regroupés > ]
[UNION / INTERSECT / EXCEPT ( autre requête SELECT ) ]
[ORDER BY < liste d attributs de tri avec ordre de tri > ]

Critère de sélection simple


* arithmétique ( = , < , > , <= , >= , <> )
* textuel ( LIKE )
* sur intervalle ( BETWEEN )
Critère de sélection complexe ( imbrication d ordres SELECT )
* clause IN ou NOT IN , EXISTS ou NOT EXISTS
* clauses ALL , ANY , etc…
* sous-requêtes dépendantes ou corrélées
71

SELECT [ALL / DISTINCT] nom_attribut1 [, nom_attribut2, ......]


FROM nom_table1 [, nom_table2, ....]
WHERE <condition de recherche> ;

•  L’option ALL est l’option par défaut qui permet de sélectionner l’ensemble des lignes satisfaisant
à la condition de recherche.

•  L’option DISTINCT permet de ne conserver que des lignes distinctes, en éliminant les doublons.

•  La liste des attributs indique la liste des colonnes choisies, séparées par des virgules. Pour
sélectionner l’ensemble des colonnes d’une table, il est possible d’utiliser l’option *.

•  La liste des tables indique l’ensemble des tables (séparées par des virgules) sur lesquelles
portent les opérations.

•  La condition de recherche permet d’exprimer des critères de recherche complexes à l’aide


d’opérateurs logiques et/ou de comparateurs arithmétiques.
72

Construction d'une requête SQL

Le raisonnement est le suivant :

Quoi ? quelles informations obtenir ?


Où ? dans quelles tables ?
Comment ? (jointures, restrictions…)
73
La projection
Une projection est une instruction permettant de
sélectionner un ensemble de colonnes dans une table.

Notation :
R2 = PROJECTION R1(Nom-Champ, Nom-Champ...)

Requête :

Afficher la liste des adhérents (Nom, Prénom,


Code postal, Ville)

En langage algébrique :
R1 = PROJECTION FILM(Nom_adh, Prénom_adh,
Cp_adh, Ville_adh)

Quoi ? SELECT Nom_adh, Prénom_adh, Cp_adh, Ville_adh


Où ? FROM ADHERENT
74
La restriction

Une restriction consiste à sélectionner les lignes satisfaisant à une condition logique
effectuée sur leurs attributs.

En SQL, les restrictions s'expriment à l'aide de la clause WHERE suivie d'une


condition.

Afficher la liste des adhérents (numéro, nom, prénom, index) dont l index est
inférieur à 20

Quoi ? SELECT Num_adh, Nom_adh, Prénom_adh, Index_adh


Où ? FROM ADHERENT
Comment ? WHERE Index_adh < 20
FILM
Exemple :
no-film titre durée production code-cat
Soient les tables FILM et CATÉGORIE qui permettent de gérer une vidéothèque.
10 Camille Claudel 150 Gaumont COMD
75
20 Fenêtre sur cour 120 FILM Pathé COMD
Les jointures 25 no-filmSueurs
titrefroides 115
durée Pathé
production COMD
code-catég
50 10 Cendrillon
Camille Claudel 140
150 UGC
Gaumont DESA
COMD
La jointure consiste à combiner deux tables ligne à ligne en vérifiant la concordance
64 20 Super Mondet
Fenêtre II
sur cour 10
120 Universal
Pathé DOCU
COMD
65 25 La vie des froides
Sueurs coccinelles 60.
115 UGC
Pathé DOCU
COMD
entre certaines colonnes des deux tables. Autrement dit, cela permet de relier deux
71 50 Cendrillon
La guerre des étoiles I 140
120 UGC
Paramounth DESA
COMD
... 64 ... Super Mondet II …10
Universal DOCU
...
tables
Exemple :
ayant un champ commun et de faire65 correspondre
La vie des les lignes
coccinelles 60. qui ont une
UGC DOCU
Soient les tables FILM et CATÉGORIE qui permettent de gérer une vidéothèque.71 La guerre des étoiles I 120 Paramounth COMD
même valeur. ... ...
CATÉGORIE
… ...
FILM
code-catégorie libellé-catégorie
no-film titre durée production code-catégorie
COMD comédie dramatique
CATÉGORIE
10 Camille Claudel 150 Gaumont COMD DESAcode-catégorie dessin animé
libellé-catégorie
20 Fenêtre sur cour 120 Pathé COMD DOCUCOMD documentaire
comédie dramatique
25 Sueurs froides 115 Pathé COMD ... DESA ...
dessin animé
50 Cendrillon 140 UGC DESA DOCU documentaire
64 Super Mondet II 10 Universal On souhaiterait
DOCU avoir le titre des ... films ainsi que les
... libellés de leurs catégories (et no
65 La vie des coccinelles 60. UGC DOCU
71 La guerre des étoiles I 120 Paramounth On souhaiterait
En langage algébrique avoir
COMD : le titre des films ainsi que les libellés de leurs catégories (et non
... ... … R1 = FILM ... CATÉGORIE (FILM.code-catégorie = CATÉGORIE.code-catégorie)
En langage algébrique :
R2 = R1
PROJECTION
= FILM
R1(titre, libellé-catégorie)
CATÉGORIE (FILM.code-catégorie = CATÉGORIE.code-catégorie)
CATÉGORIE
R2 = PROJECTION R1(titre, libellé-catégorie)
En langage algébrique : code-catégorie libellé-catégorie
Traduction en SQL :
COMD comédie dramatique
SELECT FILM.titre, CATÉGORIE.libellé-catégorie
Traduction en SQL :
R1 = FILM CATÉGORIE (FILM.code-catégorie = CATÉGORIE.code-catégorie)
DESA dessin animé
FROMSELECT
FILM, CATÉGORIE
FILM.titre, CATÉGORIE.libellé-catégorie
DOCU documentaire
WHEREFROM FILM, CATÉGORIE = CATÉGORIE.code-catégorie;
FILM.code-catégorie
R2 = PROJECTION R1(titre, libellé-catégorie)
... ... WHERE FILM.code-catégorie = CATÉGORIE.code-catégorie;

On souhaiterait avoir le titre des films ainsi que les libellés de leurs catégories (et non leur code…). RÉSULTAT REQUÊTE
RÉSULTAT REQUÊTE
titre libellé-catégorie
titre libellé-catégorie
Traduction en SQL :
En langage algébrique : Camille Claudel
Camille Claudel
comédie dramatique
comédie dramatique
R1 = FILM CATÉGORIE (FILM.code-catégorie = CATÉGORIE.code-catégorie) Fenêtre sur cour comédie dramatique
Fenêtre sur cour comédie dramatique
SELECT FILM.titre, CATÉGORIE.libellé-catégorie
R2 = PROJECTION R1(titre, libellé-catégorie) Sueurs froides
Sueurs froides comédie dramatique
comédie dramatique
Cendrillon
Cendrillon dessin animé
dessin animé
Traduction en SQL :
FROM FILM, CATÉGORIE
SELECT FILM.titre, CATÉGORIE.libellé-catégorie
Super
SuperMondet
MondetIIII documentaire
documentaire
FROM FILM, CATÉGORIE La La
vievie
des des coccinelles
coccinelles documentaire
documentaire
WHERE FILM.code-catégorie = CATÉGORIE.code-catégorie;
WHERE FILM.code-catégorie = CATÉGORIE.code-catégorie; La La guerre
guerre desdesétoiles
étoilesII comédie
comédie dramatique
dramatique

RÉSULTAT REQUÊTE Remarque n°1 :


Remarque n°1 :
titre libellé-catégorie Il est bien évidement possible de faire plusieurs jointures, autant qu’il y a de tables à relie
Il est Equijointure
bien évidement possible de faire plusieurs jointures, autant qu’il y a de tables à r
: le pivot utilise l’opérateur = (jointure naturelle)
Camille Claudel comédie dramatique
Equijointure : le pivot utilise l’opérateur = (jointure
Thétajointure : le pivot utilise les opérateurs <, <=,naturelle)
>, >=, != ou <>
Fenêtre sur cour comédie dramatique
Thétajointure : le pivot utilise les opérateurs <, <=, >, >=, != ou <>
76

Remarque n°1 :
Il est bien évidement possible de faire plusieurs jointures, autant qu’il y a de tables
à relier entre elles.

•  Equijointure : le pivot utilise l’opérateur = (jointure naturelle)

•  Thétajointure : le pivot utilise les opérateurs <, <=, >, >=, != ou <>

Remarque n°2 :
Il est possible d’utiliser des alias (pour simplifier) pour nommer une table
différemment dans la requête.

Par exemple :

SELECT F.titre, C.libellé-catégorie


FROM FILM F, CATÉGORIE C
WHERE F.code-catégorie = C.code-catégorie;
77
Jointure simple en SQL de base
COMMANDES (CNUM, CNOM, PNOM, QUANTITE)
Jointure simple en SQL de base Jo
FOURNISSEUR (PNOM, FNOM, PRIXA)
COMMANDES (CNUM, CNOM, PNOM, QUANTITE)

•  Requête:FOURNITURE
nom, prix dʼachat, fournisseur
(PNOM, FNOM, PRIXA) des Produits commandés par Paul
Algèbre : ! Requête: nom, prix dʼachat, fournisseur des Produits commandés par Paul

Algèbre : !PNOM, PRIX, FNOM ( "CNOM= ʻPAULʻ (COMMANDES) (FOURNITURE))


En SQL de base :
En SQL de base :
SELECT COMMANDES.PNOM, PRIXA, FNOM
FROM COMMANDES, FOURNITURE
SELECT COMMANDES.PNOM,
WHERE CNOM = ’PAUL’ PRIXA,
AND FNOM
COMMANDES.PNOM = FOURNITURE.PNOM R
FROM COMMANDES,
En utilisant lesFOURNITURE
alias :
WHERE CNOM = ’PAUL’
SELECT AND COMMANDES.PNOM
COMMANDES.PNOM, PRIXA, FNOM = FOURNITURE.PNOM
FROM COMMANDES C, FOURNITURE F
WHERE CNOM = ’PAUL’ AND C.PNOM = F.PNOM
Remarques :
Remarques : R1

1- Cette requête
1- Cetteest équivalente
requête à une jointure
est équivalente naturelle.
à une jointure LesLes
naturelle. attributs
attributsde
de jointure sont
jointure sont
explicités.
explicités. 2- SELECT COMMANDES.PNUM, PRIXA, FNUM FROM COMMANDES, FOURNITURE équivaut
à un produit cartésien des 2 tables, suivi dʼune projection.
2- SELECT COMMANDES.PNUM, PRIXA, FNUM
FROM COMMANDES,
Bernard ESPINASSE FOURNITURE
- Le langage SQL 13 Berna

Équivaut à un produit cartésien des 2 tables, suivi d'une projection.

Jointure en SQL2 : « INNER JOINT » Jo


78

La clause INNER JOIN a fait son apparition avec la version 2 de SQL, parce que le besoin
s'était fait sentir de préciser à quel type de jointure appartenait une relation.

Plus précisément, on distingue :

•  la jointure interne (INNER JOIN) : Ne sont incluses dans le résultat final que les lignes
qui se correspondent dans les deux tables.

•  la jointure externe gauche (LEFT OUTER JOIN) : Toutes les lignes de la première
table sont incluses dans le résultat de la requête, même s'il n'existe pas de ligne
correspondante dans la seconde table ;

•  la jointure externe droite (RIGHT OUTER JOIN) Toutes les lignes de la seconde table
sont incluses dans le résultat de la requête, même s'il n'existe pas de ligne
correspondante dans la première table.
79

Dans Access, la syntaxe des jointures gauche et droite est simplifiée en LEFT
JOIN et RIGHT JOIN, comme le montrent les deux exemples suivants :

SELECT Nom, Prénom, Adresse, commune, [code postal]


FROM Personnes LEFT JOIN Communes ON Communes.code_commune =
Personnes.Code_commune;

SELECT Nom, Prénom, Adresse, commune, [code postal]


FROM Personnes RIGHT JOIN Communes ON Communes.code_commune =
Personnes.Code_commune;

La jointure peut également être précisée dans la fenêtre graphique de définition


d'une requête.
80
Jointures dans SQL2
J o i n t u r e s d a n s S Q LOpérations
2 de Jointure :
Opérations de Jointure :

SQL2 Opération Algèbre


R1 CROSS JOIN R2 produit cartesien R1 X R2
R1 JOIN R2 ON prédicat R1 R1.A<R2.B R2
théta-jointure
(R1 JOIN R2 ON R1.A<R2.B)

R1 FULL/LEFT/RIGHT OUTER R1 R2
R1.A<R2.B
JOIN R2 ON prédicat
théta-jointure
R1 R1.A<R2.B R2
externes
R1 R1.A<R2.B R2
R1 NATURAL JOIN R2 jointure naturelle R1 R2
R1 NATURAL FULL/LEFT/RIGHT R1 R2
OUTER JOIN R2 jointure externes R1 R2
R1 R2

Bernard ESPINASSE - Le langage SQL 14


81
Jointure en SQL2 : « INNER JOINT »
COMMANDES (CNUM, CNOM, PNOM, QUANTITE)
FOURNITURE (PNOM, FNOM, PRIXA)

Requête: nom, prix dʼachat, fournisseur des Produits commandés par Paul

En SQL2 :
SELECT COMMANDES.PNOM, PRIXA, FNOM
FROM COMMANDES INNER JOINT FOURNITURE ON COMMANDES.PNOM =
FOURNITURE.PNOM
WHERE CNOM = ’PAUL’

Remarques :
• INNER est facultatif dans la plupart des SGBDR
• Cette notation rend plus lisible la requête en distinguant clairement les conditions
de jointures, derrière ON, et les éventuelles conditions de sélection ou restriction,
derrière WHERE.
• L'oubli du ON empêche l'exécution de la requête (évite de lancer un couteux
produit cartésien en SQL de base)
82

Jointure « naturelle »:
Jointure naturelle
Jointure
•  but: créer toutes naturelle
les combinaisons significatives entre tuples de deux

• but: créer toutes les combinaisons significatives


relations.

• entre tuples =deportent


significatives deuxla relations
même valeur pour les attributs de même
– domaine
significatives
! = portent la même valeur pour les
attributs deles
même domaine ! au moins un attribut de même
•  précondition: deux relations ont
• précondition:
domaine les deux relations ont au moins un
attribut de même domaine
• exemple :
R A B S B C D R|X|S
a b b c d A B C D
b c a a b a b c d
c b d a c c b c d
83
Jointure naturelle
Jointure naturelle
Exemple de jointure naturelle :
Table EMP : Table DEPT :
EMPNO DEPNO SAL DEPNO DNOM LOC
Tom 1 10000 1 Commercial Marseille
Jim 2 20000 2 Administration Paris
Karim 3 15000 4 Technique Paris

Jointure naturelle : les tuples qui ne peuvent pas être joints sont éliminés :
EMPLOYE DEPT

Résultat :
EMPNO DEPNO SAL DNOM LOC
Tom 1 10000 Commercial Marseille
Jim 2 20000 Administration Paris

Bernard ESPINASSE - Le langage SQL 16


Exemple de jointure naturelle :
84
Table EMP : Table DEPT :
EMPNO Jointure
DEPNOen SQL2
SAL: « NATURAL JOINT
DEPNO» (1) DNOM LOC
Tom 1 10000 1 Commercial Marseille
Jim 2 20000 2 Administration Paris
Tables :
Karim 3 15000 4 Technique Paris
EMPLOYE (EMPNO, ENOM, DEPTNO, SAL)
DEPT (DEPNO, DNOM, LOC)
Jointure naturelle : les tuples qui ne peuvent pas être joints sont éliminés :
EMPLOYE DEPT

Requête: Noms des départements avec les noms de leurs employés :


En SQL de base : Résultat :
SELECT DNOM,
EMPNO ENOM DEPNO SAL DNOM LOC
FROM DEPTTomNATURAL JOIN1 EMP 10000 Commercial Marseille
Jim 2 20000 Administration Paris
Remarques :
1. Comme en algèbre DEPT NATURAL JOIN EMP fait la jointure naturelle (sur lʼattribut DEPNO)
2. lʼattribut DEPNO nʼapparaît quʼune seule fois dans la table résultat.
Bernard ESPINASSE - Le langage SQL 16
85
Jointure en SQL2 : « NATURAL JOINT » (2)
Tables :
COMMANDES (CNUM, CNOM, PNOM, QUANTITE)
FOURNITURE (PNOM, FNOM, PRIXA)

! Requête: nom, prix dʼachat, fournisseur des Produits commandés par Paul
En SQL de base :

SELECT COMMANDES.PNOM, PRIXA, FNOM


FROM COMMANDES, FOURNITURE
WHERE CNOM = ’PAUL’ AND COMMANDES.PNOM = FOURNITURE.PNOM

On a une jointure naturelle car les attributs de jointure ont le même nom

En SQL2 :
SELECT COMMANDES.PNOM, PRIXA, FNOM
FROM COMMANDES NATURAL JOINT FOURNITURE WHERE CNOM = ’PAUL’

Remarque :
• Il est possible de restreindre ou préciser le ou les attributs de jointure avec USING PNOM
• Il est p

86
Bernard ESPINASSE - Le langage SQL 17 Bernard ESP
Auto-Jointure (1)

- Il est possible de joindre une table sur elle-même dans une jointure réflexive
- nécessite l'utilisation de synonymes pour les relations
Auto-Jointure (1) Auto
Table
Table EMPLOYE
EMPLOYE (EMPNO,
(EMPNO, ENOM,
ENOM, DEPTNO,
DEPTNO, SAL) SAL) Table
! Requête: Nom et Salaire des Employés gagnant plus que l'employé de numéro 12546
! Requête:
AlgèbreNom
: et Salaire des Employés gagnant plus que lʼemployé de numéro 12546 ! Requê
Algèbre :
En SQL
R1 := !SAL ( "EMPNO=12546 (EMPLOYE) Récupération Salaire
SELE
R2 := !ENOM, EMPLOYE.SAL (EMPLOYE) ((EMPLOYE.SAL>R1.SAL) (R1))
FROM
WHER
PREM
EndeSQL
En SQL basede: base :
Remarq
SELECT
SELECT E1.ENOM,
E1.ENOM, E1.SAL
E1.SAL
FROM EMPLOYE E1, EMPLOYE E2
FROM
WHERE EMPLOYE
E2.EMPNO E1, EMPLOYE
= 12546 AND E2 1. PR
E1.SAL > E2.SAL
WHERE E2.EMPNO = 12546 AND E1.SAL > E2.SAL 2. la
Remarque :

E1Remarque
et E2 sont 2: instances différentes de la table EMPLOYE
((EMPLOYE.SAL>R1.SAL) (R1))
E1 et E2 sont 2 instances différentes de la table EMPLOYE
Bernard ESPINASSE - Le langage SQL 19 Bernard ESP
87

Auto-Jointure (2)

Table FOURNISSEUR (FNOM, STATUT, VILLE)

! Requête: Fournisseurs qui habitent deux à deux dans la même ville

En SQL de base :
SELECT PREM.FNOM, SECOND.FNOM
FROM FOURNISSEUR PREM, FOURNISSEUR SECOND
WHERE PREM.VILLE = SECOND.VILLE
AND PREM.FNOM < SECOND.FNOM

Remarques :
1. PREM et SECOND sont 2 instances différentes de FOURNISSEUR
2. la 2° condition permet d'éliminer les paires (x,x) et éviter d'obtenir à la fois (x,y) et (y,x)
88

Jointure : valeurs de Vérité sur les conditions


Trois valeurs de vérité: vrai, faux et inconnu :
• vrai AND inconnu = inconnu
• faux AND inconnu = faux
• inconnu AND inconnu = inconnu • vrai OR inconnu = vrai
• faux OR inconnu = inconnu
• inconnu OR inconnu = inconnu • NOT inconnu = inconnu

Exemple :
Table EMPLOYE (EMPNO, ENOM, DEPTNO, SAL)
SELECT E1.ENOM
FROM EMPLOYE E1, EMPLOYE E2
WHERE E1.SAL > 20000 OR
E1.SAL <= 20000

Trouve-t-on les noms de tous les employés sʼil y a des employés avec un salaire
inconnu ?
89

Theta-jointure : JOINT ... ON prédicat


Theta-jointure : JOINT … ON prédicat
Table EMPLOYE(EMPNO, ENOM, DEPNO, SAL)
Table EMPLOYE(EMPNO, ENOM, DEPNO, SAL)

EMPLOYE1 [E1.SAL > E2.SAL] EMPLOYE2

! Requête: Nom et salaire des employés gagnant plus que lʼemployé 12546
! Requête: Nom et salaire des employés gagnant plus que l'employé 12546
(AUTOJOINTURE)
(AUTOJOINTURE)
SELECT
SELECT E1.ENOM,
E1.ENOM, E1.SAL
E1.SAL
FROM EMPLOYE
FROM E1 JOIN
EMPLOYE E1EMPLOYE E2
JOIN EMPLOYE E2 ON E1.SAL > E2.SAL
ON E1.SAL > E2.SAL
WHERE
WHERE E2.EMPNO
E2.EMPNO = 12546
= 12546

Bernard ESPINASSE - Le langage SQL 22


90

Jointures externes

•  But: créer toutes les combinaisons significatives entre tuples de deux


relations

•  Mettre
Jointures externes
en évidence les tuples qui n’apparaissent que dans une table
• but:(gauche ou droite)
créer toutes les combinaisons significatives entre
tuples de deux relations • rel
ca
• – Valeuren
Mettre NULL pourles
évidence lestuples
table (gauche ou droite)
attributs de l’autre table
qui n’apparaissent que dans une
rel
– Valeur NULL pour
au les attributs de l’autre
detable
•  Précondition: moins un attribut même domaine
• précondition: au moins un attribut de même domaine
• exemple
exemple: : A
D
R|gX|S D
R A B S B C D D
a b b c d A B C D M
b c a a b a b c d D
c b d a c b c Null M
c b c d
Quel
91

Jointure
Jo i n t u r e externe
e x t e r n epleine
p l e i n:eFULL
: F U OUTER
L L O U TJOIN
ER JOINT
Table EMP : Table DEPT ::
EMPNO DEPNO SAL DEPNO DNOM LOC
Tom 1 10000 1 Commercial Marseille
Jim 2 20000 2 Administration Paris
Karim 3 15000 4 Technique Paris

• les tuples qui ne peuvent pas être joints ne sont pas éliminés.
• On garde tous les tuples des 2 tables
EMP DEPT
SQL:
EMP NATURAL FULL OUTER JOIN DEPT
Résultat :
EMPNO DEPNO SAL DNOM LOC
Tom 1 10000 Commercial. Marseille
Jim 2 20000 Administration Paris
Karim 3 15000 NULL NULL
NULL 4 NULL Technique. Paris

Bernard ESPINASSE - Le langage SQL 23


92

Jointure externe droite/gauche : LEFT/RIGHT OUTER JOIN


Jointure externe droite/gauche : LEFT/RIGHT
OUTER JOIN
Table EMP : Table DEPT ::
EMPNO DEPNO SAL DEPNO DNOM LOC
Tom 1 10000 1 Commercial Marseille
Jim 2 20000 2 Administration Paris
Karim 3 15000 4 Technique Paris
• Jointure externe gauche: On garde tous les n-uplets de la première table (gauche) :
EMP NATURAL LEFT OUTER JOIN DEPT
EMPNO DEPNO SAL DNOM LOC
Tom 1 10000 Commercial Marseille
Jim 2 20000 Administration Paris
Karim 3 15000 NULL. NULL.
• Jointure externe droite: On garde tous les n-uplets de la deuxième table (droite) :
EMP NATURAL RIGHT OUTER JOIN DEPT
EMPNO DEPNO SAL DNOM LOC
Tom 1 10000 Commercial Marseille
Jim 2 20000 Administration Paris
NULL 4 NULL Technique Paris

Bernard ESPINASSE - Le langage SQL 24


93

Jointures et théta-jointures externes dans SQL2

Jointures (équi-jointures) externes :


• R1 NATURAL FULL OUTER JOIN R2 : Remplir R1.* et R2.* avec NULL quand nécessaire
• R1 NATURAL LEFT OUTER JOIN R2 : Remplir R2.* avec NULL quand nécessaire
• R1 NATURAL RIGHT OUTER JOIN R2 : Remplir R1.* avec NULL quand nécessaire

Théta-Jointures externes :
Elles sont définies de façon similaire :

• R1 FULL OUTER JOIN R2 ON prédicat


• R1 LEFT OUTER JOIN R2 ON prédicat
• R1 RIGHT OUTER JOIN R2 ON prédicat
MPNO DEPNO Table EMP
SAL : DEPNO Table DEPT :: LOC
DNOM
om EMPNO J o i n t1uDEPNO
r e e x10000
t e r nSAL
e p l e i n e : F U L L 1DEPNO
O U T E R J Commercial
OINT DNOM 94 LO
Marsei
Jim Tom 2 1 Table 10000
EMP
20000 : 2 1 Commercial
TableAdministration
DEPT :: Mars
Paris
EMPNO 2DEPNO SAL DEPNO DNOM Administration
LOC
arim Jim Tom
3 1
1500020000
10000 1
4 2
Commercial
Technique
Marseille
Pa
Paris
Karim Jim 3 2 15000
20000 2
4 Administration Technique
Paris
Pa
Karim 3 15000 4 Technique Paris
tuples qui ne peuvent pas être joints ne sont pas éliminés.
les tuples qui ne peuvent pas êtrejoints
joints ne sont pas éliminés.
garde tous
• les les tuples
tuples
les tuples qui ne des 2pas
peuvent
qui ne peuvent tables
pas être ne sont pas éliminés.
être joints ne sont pas éliminés. • On garde tous les tuples
On gardeOn tous
• des garde les
tous tuples
2 tables les tuplesdes
des 22tables
tables
EMP
EMP
DEPT
DEPT
EMP DEPT
SQL:
SQL: SQL:
EMP NATURAL FULL OUTER JOIN DEPT
MP NATURAL EMP
FULL FULL
NATURAL
OUTER OUTER
JOINJOIN
DEPT
DEPT Résultat
EMP NATURAL FULL OUTER JOINRésultat DEPT : :
EMPNO DEPNO RésultatSAL : DNOM LOC
Tom 1
Résultat :
10000 Commercial. Marseille
EMPNO DEPNO SAL DNOM LOC
EMPNO Jim DEPNO
2 20000 SAL
AdministrationDNOM LOC
Paris
Tom Karim 1 3 10000 NULL
15000 Commercial. Marseille
NULL
Tom 1 10000 Commercial. Marseille
Jim NULL 2 4 NULL
20000 Technique.
AdministrationParis
Paris
Jim 2 20000 Administration Paris
Karimlangage SQL
Bernard ESPINASSE - LeKarim
3 15000 NULL NULL
3 15000 NULL NULL
23
NULL NULL 4 4 NULL
NULL Technique.
Technique. Paris
Paris

ESPINASSE
ernard - Le langage
ESPINASSE SQL SQL
- Le langage 2323
95
Theta-jointure
eta-jointure : JOINT … ON prédicat
e EMPLOYE(EMPNO, ENOM, DEPNO, SAL)
Table EMPLOYE(EMPNO, ENOM, DEPNO, SAL)

EMPLOYE1 [E1.SAL > E2.SAL] EMPLOYE2

Requête: Nom et salaire des employés gagnant plus que lʼemployé 12546
uête: Nom et salaire des employés gagnant plus que lʼemployé 12546
(AUTOJOINTURE)
TOJOINTURE)
SELECT E1.ENOM, E1.SAL
FROM EMPLOYE E1 JOIN EMPLOYE E2 ON E1.SAL > E2.SAL
WHERE E2.EMPNO = 12546
LECT E1.ENOM, E1.SAL
OM EMPLOYE E1 JOIN EMPLOYE E2
E1.SAL > E2.SAL
ERE E2.EMPNO = 12546
96
97

Il y a plusieurs méthodes pour associer 2 tables ensemble. Voici la liste des différentes
techniques qui sont utilisées :

• INNER JOIN : jointure interne pour retourner les enregistrements quand la condition est vrai dans les
2 tables. C’est l’une des jointures les plus communes.
• CROSS JOIN : jointure croisée permettant de faire le produit cartésien de 2 tables. En d’autres mots,
permet de joindre chaque lignes d’une table avec chaque lignes d’une seconde table. Attention, le
nombre de résultats est en général très élevé.
• LEFT JOIN (ou LEFT OUTER JOIN) : jointure externe pour retourner tous les enregistrements de la
table de gauche (LEFT = gauche) même si la condition n’est pas vérifié dans l’autre table.
• RIGHT JOIN (ou RIGHT OUTER JOIN) : jointure externe pour retourner tous les enregistrements de
la table de droite (RIGHT = droite) même si la condition n’est pas vérifié dans l’autre table.
• FULL JOIN (ou FULL OUTER JOIN) : jointure externe pour retourner les résultats quand la condition
est vrai dans au moins une des 2 tables.
• SELF JOIN : permet d’effectuer une jointure d’une table avec elle-même comme si c’était une autre
table.
• NATURAL JOIN : jointure naturelle entre 2 tables s’il y a au moins une colonne qui porte le même
nom entre les 2 tables SQL
98

Le tri
Avec SQL il est possible d’effectuer des tris selon différents critères grâce à la
clause ORDER BY et aux mots clés ASC, DESC. Par défaut le tri est par ordre
croissant.

Afficher la liste des adhérents (nom, prénom, code postal, ville)


dans l ordre alphabétique du nom.
Tri sur le nom

Quoi ? SELECT Nom_adh, Prénom_adh, Cp_adh,


Ville_adh
Où ? FROM ADHERENT
ORDER BY Nom_adh
99
Les Fonctions Statistiques
Le langage SQL offre la possibilité de récupérer des données chiffrées sur des tables ou
des vues .
On peut par exemple obtenir le nombre de tuples répondant à un critère de sélection avec
la fonction COUNT , la valeur moyenne d une colonne avec la fonction AVG , la valeur
maximale ou minimale et la somme d une colonne avec les fonctions MAX , MIN et
SUM .

=> Compter le nombre de dépôts où le produit N° 122 est stocké

SELECT COUNT(*) AS Compte FROM STOCKER WHERE [ N_Produit# ] = 122

=> Calculer la somme globale , la moyenne , le maximum et le minimum des quantités stockées du
produit N° 122

SELECT SUM ( Qté_Stockée ) , AVG ( Qté_Stockée ) , MAX ( Qté_Stockée ) , MIN


( Qté_Stockée )
FROM STOCKER WHERE [ N_Produit# ] = 122

=> Compter les noms de produits différents

SELECT COUNT ( DISTINCT Libellé_Produit ) AS Compte FROM Produit


COMMANDE SELECT : Les Regroupements 100

On appelle « Groupe » un ensemble de lignes ( tuples ) dans une relation qui possèdent une valeur identique dans
une ou plusieurs colonnes . Cette colonne ( ou ensemble de colonnes ) peut être définie comme un
« facteur de regroupement » à l aide de la clause « GROUP BY » de la commande SELECT .
SQL permet alors d effectuer des calculs sur les autres colonnes ( qui ne sont pas des facteurs de regroupement )
en utilisant les fonctions statistiques ( fonctions d agrégation ) : COUNT , SUM , AVG, MAX et MIN .
La clause « HAVING » permet d appliquer une condition de sélection ( restriction ) à chaque groupe dans la
relation résultat de la requête au niveau des colonnes de regroupements et / ou de calcul .
Remarque : Dans la commande SELECT , les colonnes de calcul sont toujours spécifiées dans la liste des
attributs de projection . Toutes les autres colonnes ( non calculées ) figurant dans cette liste sont alors
considérées comme des facteurs de regroupement et doivent figurer dans la clause « GROUP BY » .

=> Liste du nombre de produits par type de produit


SELECT Libellé_Produit , COUNT(*) AS [Nombre articles ] FROM PRODUIT
GROUP BY Libellé_Produit ORDER BY 1 ;
=> Liste des N° de produits stockés dans plus de 2 dépôts
SELECT [ N_Produit# ] , COUNT(*) AS [Nombre dépôts] FROM STOCKER
GROUP BY [ N_Produit# ]
HAVING COUNT(*) > 2 ORDER BY 1 ;
=> Lister les dépôts de la ville de Rabat dont la valeur marchande est supérieure à 100 000 DH
SELECT Nom_Dépôt , SUM ( Prix_U*Qté_Stockée ) As [ Valeur en DH ]
FROM Dépôt As D , Stocker As S , Produit As P
WHERE D.N_Dépôt = S.[N_Dépôt#] AND S.[N_Produit#] = P.N_Produit AND Ville = Rabat
GROUP BY Nom_Dépôt
HAVING SUM ( Prix_U*Qté_Stockée ) > 100 000 ORDER BY 2 DESC
101

Les regroupement
Intérêt des regroupements
Clause de regroupement et opérateurs de regroupement pour
des requêtes avec comptage, comme :
•  Moyenne des élèves qui ont candidaté en GI?
•  Nombre de candidatures pour chaque université́?

Syntaxe d’une requête SQL avec regroupement :

SELECT att1 [, att2 [ AS att2′ ], ... ]


FROM nom_table1 [, nom_table2 [ alias ]] [ WHERE
condition ]
GROUP BY attk, attl, ...
[ ORDER BY atti, ...];
102

Le group by, exécuté́ après le where, indique de procéder à une répartition


du résultat en groupes de n-uplets :
•  Deux n-uplets sont dans un groupe s’ils ont mêmes valeurs sur les
attributs attk , attl , . . .
•  Si deux n-uplets sont dans deux groupes, alors il y a au moins un attribut
parmi attk , attl , . . . pour lequel ils ont une valeur différente

Conséquences du regroupement :
•  La requête ne renvoie qu’un seul n-uplet par groupe
•  Le select et le order by ne peuvent utiliser que des attributs présents dans le
group by
•  Dans un groupe, la valeur pour les attributs du group by est fixe, on peut
donc l’utiliser
•  Mais la valeur pour les autres attributs peut varier, d’où leur utilisation
directe impossible (quelle valeur utiliser ?)
GROUP BY nomU ORDER BY nom

idE nomU departement decision


123 INSA informatique O 103
123 UCB electronique N
123 UCB informatique O

Déroulement pas à pas de la requête avec regroupement : 123 UJM


Opérateurs ensemblistes
234 INSA
electronique O
biologie Sous-requêtes
N Regroupements
345 UJF bioinformatique O

SELECT nomU, COUNT( ) FROM C GROUP BY nomU Opérateur COUNT (6) 345
345
345
UJM
UJM
UJM
bioinformatique
electronique
informatique
N
N
O
543 UJF informatique N
ORDER BY nomU ; 678 UCB
Déroulement pas à pas de la requête avec
765 UCB
histoire
histoire
O
O
765 UJM histoire N

SELECT nomU, COUNT(⇤) FRO


765 UJM psychologie O
876 UCB informatique N
876 UJF biologie O
876 UJF GROUP BY nomU ORDER BY no
biologie marine N
898 INSA informatique O
898 UCB informatique O

idE aux nomU


LIF4 - Initiation departement
Bases de Données decision
et Réseaux // SQL partie 2
123 INSA informatique O
123 UCB electronique N
123 UCB informatique O
123 UJM electronique O
234 INSA biologie N
345 UJF bioinformatique O
345 UJM bioinformatique N
SELECT nomU, COUNT( ) 345
345
UJM
UJM
electronique
informatique
N
O
543 UJF informatique N Regroupements
FROM C GROUP BY nomU ORDER BY nomU ; Opérateurs ensemblistes
678 UCB
Sous-requêtes
histoire O
Sélection su

765 UCB histoire O


Opérateur COUNT (6)
765 UJM histoire N
765 UJM psychologie O
876
Déroulement UCBpas àinformatique N
pas de la requête avec regroupement
876 UJF biologie O
876
898
UJF
INSA
biologie marine
SELECT nomU, COUNT(
informatique
N
O
) FROM C ⇤
898 GROUP
UCB BY nomU
informatique ORDER
O BY nomU ;
LIF4 - Initiation aux Bases de Données et Réseaux // SQL partie 2
idE nomU departement decision
123 INSA informatique O
123 UCB electronique N

SELECT nomU, COUNT( ) FROM C


123 UCB informatique O
123 UJM electronique O
234 INSA biologie N
345 UJF bioinformatique O

GROUP BY nomU ORDER BY nomU ;


345 UJM bioinformatique N
nomU count
345 UJM electronique N
UJM 6
345 UJM informatique O
543 UJF informatique N ) UCB
UJF
6
4
678 UCB histoire O
INSA 3
765 UCB histoire O
765 UJM histoire N
765 UJM psychologie O
876 UCB informatique N
876 UJF biologie O
876 UJF biologie marine N
898 INSA informatique O
898 UCB informatique O

LIF4 - Initiation aux Bases de Données et Réseaux // SQL partie 2


104
Opérateurs ensemblistes Sous-requêtes Regroupements Sélection sur les groupes

Opérateur COUNT
SELECT (6)COUNT( ) FROM C
nomU,
GROUP pas
Déroulement BY ànomU
pas deORDER
la requêteBY nomU
avec ;
regroupement :
SELECT nomU, COUNT(⇤) FROM C
GROUP BY nomU ORDER BY nomU ;

idE nomU departement decision


123 INSA informatique O
123 UCB electronique N
123 UCB informatique O
123 UJM electronique O
234 INSA biologie N
345 UJF bioinformatique O
345 UJM bioinformatique N
nomU count nomU count
345 UJM electronique N
UJM 6 INSA 3
345 UJM informatique O
543 UJF informatique N ) UCB
UJF
6
4
) UCB
UJF
6
4
678 UCB histoire O
INSA 3 UJM 6
765 UCB histoire O
765 UJM histoire N
765 UJM psychologie O
876 UCB informatique N
876 UJF biologie O
876 UJF biologie marine N
898 INSA informatique O
38/66
898 UCB informatique O

LIF4 - Initiation aux Bases de Données et Réseaux // SQL partie 2 UCBL Lyon 1
105

Langage SQL : opérations ensemblistes

Test sur les groupes Langage SQL : fonctions d’agrégat et regroupements

Exemple
Permet de sélectionner des groupes de la requête
de regroupement. select ville , sum(age) total
Exemple : from client
Langage SQL : opérations ensemblistes
group by ville;
Langage SQL : fonctions d’agrégat et regroupements

Test sur les groupes


Client Nom Prenom Age Ville
Permet de sélectionner des groupes de la requête de
select ville, avg(age)
moyenne from client Dupont Jean 52 Tours
regroupement.
group by ville having avg(age) < 40; Duval Paul 25 Tours
Exemple : Martin Martine 39 Blois
Bon Jean 41 Blois
select ville , avg(age) moyenne
from client Résultat :
group by ville Ville Total
having avg(age) < 40;
Tours 77
Résultat : Blois 80
Ville Moyenne
Sébastien Limet, Denys Duchier Langage SQL (2)
Résultat : Tours 38.5

Sébastien Limet, Denys Duchier Langage SQL (2)


106
Différence entre where et having

Trouver pour chaque ville la moyenne d’âge des personnes de moins de 40 ans :
select ville, avg(age) agm
from client
where age < 40 group by ville;

Trouver les villes dont l’âge moyen des habitants est inférieur à 40 ans :
select ville, avg(age) agm
from client
group by ville
having avg(age) < 40;

•  where sélectionne les lignes de la requête avant de faire les groupes. Il agit
donc avant les regroupements

•  having sélectionne les groupes une fois qu’ils sont constitués. Il agit donc après
les regroupements
107
Les regroupements de regroupements.
Quel est le regroupement qui a la plus grande valeur ?
Pour certaines questions, on voudrait faire un regroupement de regroupement. Par
exemple :
Quel est le plus gros chiffre d'affaires réalisé par un commercial ?

SELECT MAX(SUM(MontantTTC)) FROM Ventes GROUP BY Commercial_id ;

Malheureusement, cette formulation ne marche pas :

On va donc décomposer en deux requêtes. Le résultat de la première requête sera


stocké dans une vue.
Requête 1 : elle calcule le chiffre d'affaires par commercial.

CREATE VIEW requête1 AS SELECT SUM(MontantTTC) as ChiffreAffaires FROM


Ventes GROUP BY Commercial_id ;

Requête 2 : elle affiche le maximum.


SELECT MAX(ChiffreAffaires) FROM requête1;
108

Notion de vue

•  Permet de donner un nom à une requête qui sera utilisée ensuite comme
une table (pour la consultation)

•  Les vues peuvent être considérées comme des tables virtuelles.

•  à chaque appel de la vue la requête est réexécutée

•  Attention : ce n’est pas une vraie table !

•  La variante ⟨vue⟩(⟨cols⟩) permet de renommer les colonnes

La syntaxe pour la création d’une vue est comme suit :


CREATE VIEW "nom de vue" AS "instruction SQL";
109
La sélection : exemples

Permet d’extraire les lignes d’une table qui vérifient la réalisation d’une certaine condition (on
parle parfois de critère).

Notation :

R2 = SELECTION R1(Expression conditionnelle)


R1 et R2 sont deux relations, entre parenthèses figure le critère de sélection.

En langage algébrique :

R1 = SELECTION FILM(production = "Path")


R2 = PROJECTION R1(titre)
110
Relation utilisée : PRODUIT ( N_Produit , Libellé_Produit , Prix_U , Poids , Couleur )

* Liste des données sur les produits dont le poids est supérieur à 15 Kg
SELECT * FROM Produit WHERE Poids > 15 ;

* Liste des libellés de produits différents dont le poids est compris entre 15 et 40 Kg
SELECT DISTINCT Libellé _Produit FROM Produit WHERE Poids BETWEEN 15 AND 40 ;

* Liste des produits dont le poids n est pas compris entre 15 et 40 Kg et dont la couleur est
verte , rouge ou bleue
SELECT * FROM Produit
WHERE Poids NOT BETWEEN 15 AND 40
AND Couleur IN ( Vert , Rouge , Bleu ) ;

* Liste des produits dont dont la couleur est verte ou bleue


SELECT * FROM Produit
WHERE Poids NOT BETWEEN 15 AND 40
AND Couleur = Vert or Couleur = Bleu ;
* Liste des produits dont le libellé ne commence pas par la lettre D
SELECT * FROM Produit WHERE Libellé _Produit NOT LIKE D%

* Liste des produits dont la couleur est renseignée


SELECT * FROM Produit WHERE Couleur IS NOT NULL ;

* Liste des produits dont la couleur est n est pas renseignée


SELECT * FROM Produit WHERE Couleur IS NULL ;
111
Les Sélections avec sous-requête
Schéma relationnel : DEPOT ( N_Dépôt, Nom_Dépôt, Ville )
STOCKER ( N_Dépôt # , N_Produit # , Qté_Stockée )
PRODUIT ( N_Produit , Libellé_Produit , Prix_U, Poids, Couleur )

• Sous-requête renvoyant une seule valeur ( relation à une seule ligne et une seule colonne ) :

Liste des dépôts situés dans la même ville que le dépôt N° 12


SELECT Nom_Dépôt FROM Dépôt
WHERE Ville = ( SELECT Ville FROM Dépôt WHERE N_Dépôt = 12 )
Liste des produits dont le prix unitaire est supérieur à celui du produit N° 36
SELECT Libellé_Produit FROM Produit
WHERE Prix_U > ( SELECT Prix_U FROM Produit WHERE N_Produit = 36 )

• Sous-requête renvoyant plusieurs valeurs ( relation à une seule colonne et plusieurs lignes ) :

L opérateur : IN
Liste des produits dont la couleur est la même que celle de l une des tables
SELECT Libellé_Produit FROM Produit
WHERE Couleur IN ( SELECT Couleur FROM Produit WHERE Libellé_Produit = Table )
Liste des produits dont le prix unitaire est différent de celui de toutes les armoires
SELECT Libellé_Produit FROM Produit
WHERE Prix_U NOT IN ( SELECT Prix_U FROM Produit WHERE Libellé_Produit = Armoire )
112
Les Sélections avec sous-requête (suite 1)
* Sous-requête renvoyant plusieurs valeurs ( relation à une seule colonne et plusieurs lignes ) :

Les opérateurs : ANY et ALL


ANY : la comparaison est vraie si elle est vraie pour au moins un des éléments de l'ensemble.
ALL : la comparaison sera vraie si elle est vraie pour tous les éléments de l'ensemble.
La forme ( = ANY ) est équivalente à la forme ( IN )
Les formes ( <> ANY ) et ( <> ALL ) sont équivalentes à la forme ( NOT IN )
=> Liste des produits dont le prix unitaire est inférieure à celui de l armoire la plus chère
SELECT Libellé_Produit FROM Produit
WHERE Prix_U < ANY ( SELECT Prix_U FROM Produit WHERE Libellé_Produit = Armoire )
=> Liste des produits dont le prix unitaire est inférieure à celui de l armoire la moins chère
SELECT Libellé_Produit FROM Produit
WHERE Prix_U < ALL ( SELECT Prix_U FROM Produit WHERE Libellé_Produit = Armoire )

* Sous-requête renvoyant plusieurs colonnes ( relation à une plusieurs colonnes ) :

=> Liste des produits dont le poids et la couleur sont identiques à ceux de l article N° 125
SELECT Libellé_Produit FROM Produit
WHERE ( Poids , Couleur ) = ( SELECT Poids , Couleur FROM Produit WHERE N_Produit = 125 )
113
COMMANDE SELECT : Les Sélections ( restrictions ) avec sous-requête (suite 2)

* Sous-requête renvoyant au moins 1 ligne ( relation à 1 ou plusieurs colonnes comportant au moins 1 ligne ) :

L opérateur : EXISTS
=> Liste des produits stockés dans au moins un dépôt avec une quantité supérieure à 1000 unités ?
SELECT Libellé_Produit FROM Produit AS P
WHERE EXISTS ( SELECT * FROM STOCKER WHERE [N_Produit#] = P. N_Produit
AND Qté_Stockée > 1000 )
=> Liste des produits qui ne sont stockés dans aucun dépôt ?
SELECT Libellé_Produit FROM Produit AS P
WHERE NOT EXISTS ( SELECT * FROM STOCKER WHERE [N_Produit#] = P. N_Produit )

* Sous-requêtes multiples

Lorsque les attributs de projection appartiennent tous à la requête principale , on peut utiliser plusieurs
sous-requêtes imbriquées au lieu d utiliser des jointures
=> Liste des produits ( Libellé, Prix_U et Poids ) stockés à Tanger dans le dépôt Grossisterie Znibar ?
SELECT Libellé_Produit, Prix_U, Poids FROM Produit
WHERE N_Produit IN ( SELECT [ N_Produit# ] FROM STOCKER
WHERE [ N_Dépôt# ] IN ( SELECT N_Dépôt FROM Dépôt
WHERE Ville = Tanger
AND Nom_Dépôt = Grossisterie Znibar )
114
COMMANDE SELECT : Les Sélections ( restrictions ) avec sous-requête (suite 3)

• Les sous-requêtes dépendantes ou corrélées

C est une forme très puissante des sous-requêtes .


La requête principale fournit plusieurs groupes de valeurs à la sous-requête . Pour chaque groupe de valeurs ,
la sous-requête est évaluée pour donner un résultat .
=> Liste des produits disponibles dans plusieurs couleurs ( au moins 2 )
SELECT Libellé_Produit FROM Produit AS P1
WHERE Libellé_Produit IN ( SELECT Libellé_Produit FROM Produit As P2
WHERE P2.Couleur <> P1.Couleur )

=> Liste des prix unitaires les plus élevés de chaque type de produit
SELECT Libellé_Produit, Prix_U FROM Produit AS P1
WHERE Prix = ( SELECT MAX ( Prix_U ) FROM PRODUIT P2
WHERE P2. Libellé_Produit = P1. Libellé_Produit )
=> Liste des dépôts stockant tous les produits ( simulation de l opérateur relationnel Division )
SELECT Nom_Dépôt , Ville FROM Dépôt AS D
WHERE NOT EXISTS ( SELECT * FROM Produit AS P
WHERE NOT EXISTS ( SELECT * FROM STOCKER S
WHERE S. [N_Produit#] = P. N_Produit
AND S. [N_Dépôt#] = D. N_Dépôt )
10 Camille Claudel comédie dramatique

D. Autres opérateurs (ensemblistes) 115


Les opérations portant sur des ensembles
D.1. L’union (ou / or)
L’algèbre relationnelle permet l’utilisation d’opérateurs ensemblistes. Il
en existe trois : L’union consiste à combiner deux relations (compatibles) pour créer une
troisième relation qui contient toutes les occurrences appartenant à l’une ou à
•  INTERSECT,
UNION, l’autre des relations de départ.

•  EXCEPT. Notation :
•  R3 = R1 R2
Ou
R3 = UNION (R1, R2)
L’union (ou / Instructions
or) SQL :
SELECT Nom-Champ, Nom-Champ, …
FROM Nom-Table1
L’union consiste à combiner deux relations (compatibles) pour créer une
UNION
SELECT Nom-Champ, Nom-Champ, …
troisième relation qui contient toutes les occurrences appartenant à l’une ou à
FROM Nom-Table2;

l’autre des relations de départ.


On peut utiliser UNION [ALL] pour avoir toutes les lignes communes aux deux tables (y compris celles
en double), sans cela les doublons sont éliminés.

Instructions SQL :
Notation : SELECT
Ch.1 - Algèbre Relationnelle, Introduction Nom-Champ,
au Langage SQL.doc page 7 / Nom-Champ,
10 ... om (2001-2005)
R3 = R1 R2
FROM Nom-Table1
Ou
R3 = UNION (R1, R2) UNION
SELECT Nom-Champ, Nom-Champ, ...
FROM Nom-Table2;
Exemple :
Soient les tables ANGLAIS et ESPAGN qui permettent de gérer les candidats à des épreuves de langu

ANGLAIS
116
nocandidat nomcandidat prénomcandidat numétablissement
Soient les tables
ExempleANGLAIS
: et ESPAGN qui permettent 10123
de gérer
DUPONT
les candidats
Patrick
à des épreuves
94010
de
Soient les tables ANGLAIS et ESPAGN qui permettent de gérer les candidats à des épreuves de langue.
langue. 10216 GRANGETTE Didier 75100
10309 HERISSON Patrick 94010
ANGLAIS
10405 MAGNAN Hélène 75250
nocandidat nomcandidat prénomcandidat numétablissement
10123 DUPONT
10505
Patrick
SERRES
94010
Sylvia 94010
10216 GRANGETTE Didier 75100
ESPAGN
10309 HERISSON Patrick 94010
nocandidat nomcandidat prénomcandidat numétablissement
10405 MAGNAN Hélène 75250
10025 ACQUINO Patricia 91260
10505 SERRES Sylvia 94010
10216 GRANGETTE Didier 75100
10505
ESPAGN SERRES Sylvia 94010
nocandidat nomcandidat prénomcandidat numétablissement
On souhaiterait obtenir la liste des candidats passant les épreuves d’anglais ou d’espagnol (l’un
10025 ACQUINO Patricia 91260
des deux tables) (sans doublons).
10216 GRANGETTE Didier 75100
10505 SERRES Sylvia 94010
En langage algébrique :
R1 = ANGLAIS ESPAGN
On souhaiterait obtenir la liste des candidats passant les épreuves d’anglais ou d’espagnol (l’union
On souhaiterait obtenir
des deux tables) la liste
(sans des candidats
doublons). passant les épreuves d’anglais ou d’espagnol
Traduction en SQL :
(l’union desEndeux tables) (sans doublons).
langage algébrique :
SELECT *
R1 = ANGLAIS ESPAGN
FROM ANGLAIS
UNION
En langageTraduction
algébrique : R1
en SQL : = ANGLAIS ESPAGN
SELECT *
FROM ESPAGN;
SELECT *
Traduction en SQL :
FROM ANGLAIS
UNION
RÉSULTAT REQUÊTE
nocandidat nomcandidat prénomcandidat numétablissement
SELECT *
SELECT * FROM ANGLAIS
FROM ESPAGN;
10123 DUPONT Patrick 94010
10216 GRANGETTE Didier 75100
UNION RÉSULTAT10309
REQUÊTE
10405
HERISSON
MAGNAN
Patrick
Hélène
94010
75250
nocandidat nomcandidat prénomcandidat numétablissement
10505 SERRES Sylvia 94010
SELECT * 10123
10216
DUPONT
GRANGETTE
Patrick
Didier10025
94010
ACQUINO
75100 Patricia 91260
10309 HERISSON Patrick 94010
FROM ESPAGN; 10405 MAGNAN Hélène 75250
10505 D.2.
SERRES L’intersection
Sylvia (et 94010
/ and)
10025 ACQUINO Patricia 91260

L’intersection consiste à combiner deux relations (compatibles) pour créer une


troisième relation qui contient toutes les occurrences appartenant à l’une et à
D.2. L’intersection (et / and)
l’autre des relations de départ.
10309 HERISSON Patrick 94010
10405 MAGNAN Hélène 75250
10505 SERRES Sylvia 94010
10025 ACQUINO Patricia 91260
117
L’intersection (etD.2.
/ and)
L’intersection (et / and)

L’intersection consiste à combiner


L’intersection consiste à combiner deux deux relations
relations (compatibles) pour créer une
troisième relation qui contient toutes les occurrences appartenant à l’une et à
(compatibles) pour l’autre
créer une troisième
des relations de départ. relation qui contient
toutes les occurrences appartenant à l’une et à l’autre des
Notation :
relations de départ.R3
Ou
= R1 R2

R3 = INTERSECTION (R1, R2)

Instructions SQL :
SELECT Nom-Champ, Nom-Champ, …
Notation : FROM Nom-Table1
R3 = R1 ∩ R2 INTERSECT
SELECT Nom-Champ, Nom-Champ, …
Ou FROM Nom-Table2;
R3 = INTERSECTION (R1, R2)
Ch.1 - Algèbre Relationnelle, Introduction au Langage SQL.doc page 8 / 10 om (2001-2005)

Instructions SQL :
SELECT Nom-Champ, Nom-Champ, ...
FROM Nom-Table1
INTERSECT
SELECT Nom-Champ, Nom-Champ, ...
FROM Nom-Table2;
Exemple :
Soient les tables ANGLAIS et ESPAGN qui permettent de gérer les candidats à des épreuves de langue.
118
Exemple :
Soient les tables ANGLAIS
Soient et ESPAGN
les tables ANGLAIS quiquipermettent
et ESPAGN permettent dede
gérergérer lesANGLAIS
les candidatscandidats à des
à des épreuves épreuves de
de langue.
nocandidat nomcandidat prénomcandidat numétablissement
langue. 10123 ANGLAIS DUPONT Patrick 94010
nocandidat nomcandidat 10216 prénomcandidat
GRANGETTEnumétablissement
Didier 75100
10123 DUPONT 10309 Patrick HERISSON 94010 Patrick 94010
10216 GRANGETTE 10405 Didier MAGNAN 75100Hélène 75250
10309 HERISSON10505 Patrick SERRES 94010Sylvia 94010
10405 MAGNAN Hélène 75250
10505 SERRES Sylvia 94010 ESPAGN
nocandidat nomcandidat prénomcandidat numétablissement
10025 ESPAGNACQUINO Patricia 91260
10216 GRANGETTE
nocandidat nomcandidat prénomcandidat numétablissement Didier 75100
10025 ACQUINO 10505 Patricia SERRES 91260Sylvia 94010
10216 GRANGETTE Didier 75100
10505 On SERRES
souhaiterait obtenir souhaiterait obtenir
Sylvia 94010 la liste des candidats passant les épreuves d’anglais et
d’espagnol (l’intersection des deux tables).
On souhaiterait obtenir souhaiterait obtenir la liste des candidats passant les épreuves d’anglais et
d’espagnol (l’intersectionEn langage
des algébrique :
deux tables).
R1 = ANGLAIS ESPAGN
On souhaiteraitEnobtenir
langage souhaiterait
algébrique : obtenir la liste des candidats passant les épreuves d’anglais
R1 = ANGLAIS ESPAGN Traduction en SQL :
et d’espagnol (l’intersection des deux tables).
Traduction en SQL : SELECT *
FROM ANGLAIS
En langage algébrique
SELECT *
: R1 = ANGLAIS
INTERSECT∩ ESPAGN
FROM ANGLAIS SELECT *
INTERSECT FROM ESPAGN;
Traduction en SQL : *
SELECT
FROM ESPAGN; RÉSULTAT REQUÊTE
nocandidat nomcandidat prénomcandidat numétablissement
SELECT * 10216 GRANGETTE
RÉSULTAT REQUÊTE Didier 75100
FROM ANGLAIS nocandidat 10505 prénomcandidat
nomcandidat SERRES Sylvia
numétablissement 94010
10216 GRANGETTE Didier 75100
INTERSECT 10505 SERRES Sylvia 94010
SELECT * D.3. La différence (non / not)
FROM ESPAGN;
D.3. La différence (non / not)
La différence consiste à combiner deux relations
(compatibles) pour créer une troisième relation qui
La différence consistecontient toutes les
à combiner occurrences
deux relationsappartenant à l’une des
(compatibles) pour créerrelations
une et non contenues
troisième relationdans
qui l’autre des relations de
départ. Deux
contient toutes les occurrences différences
appartenant sont des
à l’une possibles.
relations et non contenues dans l’autre des relations de
10505 SERRES Sylvia 94010

D.3. La différence (non / not) 119

La différence (non / not)


La différence consiste à combiner deux relations
(compatibles) pour créer une troisième relation qui
contient toutes les occurrences appartenant à l’une des
La différence consiste à combiner deux relations
relations et non contenues dans l’autre des relations de
départ. Deux différences sont possibles.
(compatibles) pour créer une troisième relation qui contient
Notation :
toutes les occurrences appartenant à l’une des relations et
R3 = R1 - R2 R3 = R2 – R1
Ou
non contenues dans l’autre des relations de R3départ.
R3 = DIFFERENCE (R1, R2) Deux (R1, R2)
= DIFFERENCE

différences sont possibles.


Instructions SQL :
SELECT Nom-Champ, Nom-Champ, … SELECT Nom-Champ, Nom-Champ, …
FROM Nom-Table2 FROM Nom-Table1
Notation : MINUS MINUS
SELECT Nom-Champ, Nom-Champ, … SELECT Nom-Champ, Nom-Champ, …
FROM Nom-Table1; FROM Nom-Table2;
R3 = R1 - R2 R3 = R2 – R1

Ou Ch.1 - Algèbre Relationnelle, Introduction au Langage SQL.doc page 9 / 10 om (2001-2005)

R3 = DIFFERENCE (R1, R2) R3 = DIFFERENCE (R1, R2)

Instructions SQL :
SELECT Nom-Champ, Nom-Champ, ...
FROM Nom-Table2
MINUS
SELECT Nom-Champ, Nom-Champ, ...
FROM Nom-Table1;
Soient les tables ANGLAIS et ESPAGN qui permettent de gérer les candidats à des épreuves de langue.

ANGLAIS
120
nocandidat nomcandidat prénomcandidat numétablissement
Exemple : 10123 DUPONT Patrick 94010
Soient les tables ANGLAIS
10216 et ESPAGN qui: permettent
Exemple
GRANGETTE Didier de gérer75100
les candidats à des épreuves de
Soient les tables ANGLAIS et ESPAGN qui permettent de gérer les candidats à des épreuves de langue
langue. 10309 HERISSON Patrick 94010
10405 MAGNAN Hélène 75250 ANGLAIS
10505 SERRES Sylvia 94010 prénomcandidat numétablissement
nocandidat nomcandidat
10123 DUPONT Patrick 94010
On souhaiterait obtenir souhaiterait obtenir 10216 GRANGETTE Didier 75100
ESPAGN
la liste des candidatsnocandidat
passant lesnomcandidat
épreuves 10309 HERISSON Patrick
prénomcandidat numétablissement
94010
10405 MAGNAN Hélène 75250
d’anglais seulement.10025 ACQUINO Patricia
10505 SERRES91260 Sylvia 94010
10216 GRANGETTE Didier 75100
10505 SERRES Sylvia 94010
ESPAGN
nocandidat nomcandidat prénomcandidat numétablissement
On souhaiterait obtenir souhaiterait obtenir 10025
la liste des ACQUINO Patriciales épreuves
candidats passant 91260
d’anglais
seulement. 10216 GRANGETTE Didier 75100
10505 SERRES Sylvia 94010

En langage algébrique
En langage : R1
algébrique : = ANGLAIS - ESPAGN
On souhaiterait obtenir souhaiterait obtenir la liste des candidats passant les épreuves d’angla
seulement.
R1 = ANGLAIS - ESPAGN
Traduction en SQL :
Traduction en SQL : En langage algébrique :
SELECT * FROM ANGLAIS R1 = ANGLAIS - ESPAGN
MINUSSELECT *
Traduction en SQL :
SELECT
FROM* FROM
ANGLAISESPAGN;
MINUS SELECT *
SELECT * FROM ANGLAIS
FROM ESPAGN; MINUS
Ilest possible de combiner les opérateurs
SELECT * UNION, INTERSECT et MINUS, il faut pour cela
FROM ESPAGN;
Il est possible de combiner les opérateurs UNION, INTERSECT et MINUS, il faut pour cela utiliser des
utiliser des parenthèses pour déterminer les ordres de priorité de ces opérateurs.
parenthèses pour déterminer les ordres de priorité de ces opérateurs.
Il est possible de combiner les opérateurs UNION, INTERSECT et MINUS, il faut pour cela utiliser de
parenthèses pour déterminer les ordres de priorité de ces opérateurs.
ANGLAIS
nocandidat nomcandidat Prénomcandidat numétablissement
ANGLAIS
10123 DUPONT nocandidat
Patrick nomcandidat
94010 Prénomcandidat numétablissement
10309 HERISSON 10123
Patrick DUPONT94010 Patrick 94010
10309 HERISSON Patrick 94010
10405 MAGNAN Hélène 75250
10405 MAGNAN Hélène 75250

Olivier Mondet Olivier Mondet


121
COMMANDE INSERT : Forme générale

1ère Forme
INSERT [INTO] < Nom de Table >
[ < Liste d attributs entre parenthèses > ]
VALUES < Liste de valeurs correspondant aux attributs entre parenthèses >
2ème Forme
INSERT [INTO] < Nom de Table >
[ < Liste n° 1 d attributs entre parenthèses > ]
SELECT < Liste n°2 d attributs correspondant en type à ceux de la Liste n°1 >
FROM < liste de tables ou vues >
[WHERE < critère de jointure naturelle, théta-jointure, jointure externe > ]
[ AND < critère de sélection simple > ]
[ AND < critère de sélection complexe appelant une sous-requête > ]
[etc… ]
Remarques :
- Les attributs non spécifiés dans la liste n°1 restent à NULL ou à leur valeur par défaut après l insertion de tuples
- On doit toujours fournir une valeur dans l ordre INSERT pour les attributs déclarés NOT NULL
( déclaration effectuée lors de la création de la table )
122

COMMANDE INSERT : Exemples


Schéma relationnel : PRODUIT ( N_Produit , Libellé_Produit , Prix_U , Poids , Couleur )
ARTICLE ( N_Article , Désignation , Prix_U )

* Insertion d une ligne ( un tuple ) dans la table PRODUIT


INSERT INTO PRODUIT VALUES ( 20 , VASE DE CHINE , 250 , 15 , BLEU )

* Insertion de 2 lignes ( 2 tuples ) dans la table PRODUIT avec certaines valeurs nulles
INSERT INTO PRODUIT VALUES ( 21 , VERRE CRISTAL , 50 , 0.25 , NULL ) ,
( 22 , FOURCHETTE INOX , 10 , NULL , NULL )

* Insertion de 2 lignes dans la table PRODUIT avec spécification des attributs d insertion
INSERT INTO PRODUIT ( N_Produit , Libellé_Produit )
VALUES ( 23 , CUILLERE INOX ) , ( 24 , COUTEAU INOX )

* Insertion de tous les tuples de la table PRODUIT dont le prix est supérieur à 200 DH dans la Table ARTICLE :
( la structure des colonnes dans la table cible doit être la même que celle des colonnes dans la table source )
INSERT INTO ARTICLE
SELECT N_Produit , Libellé_Produit , Prix_U FROM PRODUIT
WHERE Prix_U > 200 ;

* Requête interdite : la duplication des tuples d une table par un INSERT avec une sous-requête sur la même table
INSERT INTO PRODUIT
SELECT * FROM PRODUIT ;
123
COMMANDE UPDATE : Forme générale

1ème Forme
UPDATE < Nom de Table >
SET < Attribut1 = Valeur1 > ,
< Attribut2 = Valeur2 > , etc …
[WHERE < critère de sélection simple
ou critère de sélection complexe appelant une sous-requête > ]
2ème Forme
UPDATE < Nom de Table >
SET < Attribut1 = Valeur1 > ,
< Attribut2 = Valeur2 > , etc …
FROM < liste de tables ou vues >
WHERE < critère de jointure naturelle, théta-jointure, jointure externe >
[ AND < critère de sélection simple > ]
[ AND < critère de sélection complexe appelant une sous-requête > ]
124

COMMANDE UPDATE : Exemples


Schéma relationnel : PRODUIT ( N_Produit , Libellé_Produit , Prix_U , Qté_Stock )
ACHETER ( N_Produit , N_Client , Qté_Achetée , Date_Achat )
CLIENT ( N_Client , Nom , Adresse , Tél , Chiffre_Affaire )

•  Mise à jour du prix de tous les produits pour tenir compte d une augmentation de 10 DH
UPDATE PRODUIT SET Prix_U = Prix_U + 10 ;

•  Mise à jour des produits de luxe dont le prix est supérieur à 1000 DH seulement ( augmentation de
15 % )
UPDATE PRODUIT SET Prix_U = Prix_U * 1.15
WHERE Prix_U > 1000 ;

•  Mise à la valeur nulle des adresses et téléphones et initialisation du chiffre d affaires réalisé avec
tous les clients dont le nom commence par la lettre B ( dans le but de recommencer leur saisie )
UPDATE CLIENT SET Adresse = Null , Tél = Null , Chiffre_Affaire = 0
WHERE Nom LIKE B% ;

•  Mise à jour de la Qté en stock de tous les produits ayant fait l objet de ventes durant la journée
du 19/05/2008 ( seule une vente par produit sera prise en compte à cette date )
UPDATE PRODUIT SET Qté_Stock = Qté_Stock - A.Qté_Achetée
FROM PRODUIT P , ACHETER A
WHERE P.N_Produit = A.N_Produit
AND A.Date_Achat = 19/05/2008
125
COMMANDE UPDATE : Exemples ( suite )
Attention !
Une instruction UPDATE ne met jamais à jour une même ligne à deux reprises.
Le schéma relationnel considéré suppose qu'un produit peut être vendu à plusieurs reprises
( acheté par plusieurs clients ) le même jour .
Avec l ordre UPDATE précédent , il y aura exécution sans erreur, mais chaque produit ne sera mis à
jour qu'avec une seule vente, en dépit du nombre de ventes ayant réellement eu lieu à la date
spécifiée .

Solution du problème :
Au cas où plusieurs ventes ont lieu le même jour pour un produit donné, toutes les ventes de chaque
produit doivent être additionnées dans l ordre UPDATE et le stock mis à jour à l aide de la somme
obtenue , comme le montre l ordre SQL suivant :

UPDATE PRODUIT P
SET Qté_Stock = Qté_Stock -
( SELECT SUM ( Qté_Achetée )
FROM ACHETER A
WHERE P.N_Produit = A.N_Produit
AND Date_Achat = 19/05/2008 ) ;

Autre requête à exprimer :


Mettre à jour le chiffre d affaires réalisé avec tous les clients pour tenir compte des ventes
effectuées le dernier jour d ouverture du magasin ?
126
COMMANDE DELETE : Forme générale et Exemples

DELETE FROM < Nom de Table >


[WHERE < critère de sélection simple
ou critère de sélection complexe appelant une sous-requête > ]

Exemple : PILOTE ( N_Pilote , Nom , Prénom , Adresse , Salaire )


AVION ( N_Avion , Type , Capacité )
VOL ( N_Pilote , N_Avion , Date_Vol , Heure_Dép , Heure_Arr , Ville_Dép , Ville_Arr )

* Suppression de tous les vols ( tous les tuples de la table VOL )


DELETE FROM VOL ;
* Suppression de tous les vols qui datent d avant le 28 Février 2000
DELETE FROM VOL WHERE Date_Vol < 19/05/2008 ;
* Suppression de tous les vols assurés par le pilote DRISSI
DELETE FROM VOL WHERE N_Pilote IN
( SELECT N_Pilote FROM PILOTE WHERE Nom = DRISSI )
* Suppression de tous les pilotes qui n ont effectué aucun vol
DELETE FROM PILOTE P WHERE NOT EXISTS
( SELECT * FROM VOL WHERE N_Pilote = P.N_Pilote )
127

LE LANGAGE DE DEFINITION DE DONNEES ( LDD )

Les ordres LDD sont des instructions SQL créées à partir des commandes suivantes :

Commande Rôle

CREATE Création de la structure d une table , d un index ou d une vue de


données en spécifiant des contraintes structurelles ou d intégrité
référentielle à respecter sur les données

DROP Supprimer une table , un index ou une vue ( structure et données )

ALTER Modifier la structure d une table ( ajout , suppression ou mise à jour


d un ou plusieurs attributs )

Chaque commande peut utiliser une ou plusieurs clauses obligatoires et des clauses
optionnelles
128
COMMANDE CREATE TABLE : Forme générale

CREATE TABLE < Nom de Table >


[ < Nom attr. > < Type > ] , …
ou [ < Nom attr. > < Type > < Contrainte d attr. > ] , …
ou [ < Nom attr. > < Type > CONSTRAINT <Nom contrainte> <Contrainte d attr.> ] ,
ou [ CONSTRAINT < Nom contrainte > < Contrainte de Table > ] , etc ...

Les contraintes constituent une méthode normalisée par l ANSI pour assurer
l intégrité des données .
Chaque type d intégrité ( de domaine , d entité ou référentielle ) est mis en œuvre
à l aide de types de contraintes spécifiques ( voir tableau ).

Les contraintes garantissent la validité des valeurs saisies dans les colonnes et le
maintien des relations entre les tables .
Les principales contraintes sont DEFAULT , CHECK , PRIMARY KEY , UNIQUE
et FOREIGN KEY .
L écriture d un ordre CREATE TABLE utilisant ces contraintes peut différer
légèrement suivant le SGBD utilisé ( ACCESS , SQL Server , ORACLE , SYBASE ,
INFORMIX , etc… )
COMMANDE CREATE TABLE : Les Contraintes d intégrité 129

Type d intégrité Type de Contrainte Description


---------------------------------------------------------------------------------------------------------------------
Domaine DEFAULT Spécifie la valeur qui sera placée dans la colonne si aucune
valeur n est spécifiée explicitement dans l instruction
INSERT au moment de la saisie
CHECK Spécifie une règle de validité s appliquant aux valeurs d une colonne .
FOREIGN KEY Les valeurs de colonne de clé étrangère doivent
correspondre aux valeurs des colonnes de clé primaire de la
table référencée .
Entité PRIMARY KEY Identifie chaque ligne de façon unique , interdit l entrée de
valeurs en double et garantit la création d un index pour
améliorer les performances . Les valeurs NULL ne sont pas
acceptées .
UNIQUE Empêche la création des doublons dans les colonnes qui ne
constituent pas une clé primaire et garantit la création d un
index pour améliorer les performances . Les valeurs NULL
sont acceptées .
Référentielle FOREIGN KEY Définit une colonne ou un ensemble de colonnes dont les
valeurs sont égales à la clé primaire de leur table ou d une
autre table .
Définie par CHECK Spécifie une règle de validité s appliquant aux valeurs de
l utilisateur colonnes .
130
COMMANDE CREATE TABLE : Exemples
* Spécification de contraintes d attributs
CREATE TABLE Etudiant
( Matricule INT NOT NULL CONSTRAINT Clé_Primaire PRIMARY KEY ,
Nom CHAR(25) NOT NULL ,
Prénom CHAR(25) NOT NULL ,
Sexe CHAR(1) NOT NULL CHECK ( Sexe IN ( M', F ) ) ) ;

CREATE TABLE Employé


( Code CHAR(9) NOT NULL CONSTRAINT Clé_Primaire PRIMARY KEY NONCLUSTERED
CHECK ( Code LIKE
'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][MF]' OR
Code LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9] [0-9][MF] ) ,
Nom VARCHAR(30) NOT NULL,
Prénom VARCHAR(30) NOT NULL,
N_Fonction SMALLINT NOT NULL DEFAULT 1 REFERENCES Fonction ( N_Fonction ) ,
Date_Embauche DATETIME NOT NULL DEFAULT ( GETDATE() ) ) ;

CREATE TABLE Fonction


( N_Fonction SMALLINT IDENTITY( 1 , 1) PRIMARY KEY CLUSTERED ,
Libellé_Fonction VARCHAR(50) NOT NULL DEFAULT Fonction ? ',
Echelle TINYINT NOT NULL CHECK ( Echelle <= 11 ) ) ;

Remarque : L utilisation du qualificatif IDENTITY(Valeur_initiale , Incrément ) permet de spécifier


un attribut qui doit faire l objet d une incrémentation automatique par le système à chaque ajout de tuple
131

COMMANDE CREATE TABLE : Exemples ( Suite )


* Spécification de contraintes de table
- Contrainte d unicité : Il ne peut y avoir 2 dépôts de même nom dans la même ville :
CREATE TABLE DEPOT
( N_Dépôt INT NOT NULL CONSTRAINT Clé_Primaire PRIMARY KEY ,
Nom_Dépôt CHAR(25) NOT NULL ,
Ville VARCHAR(25) NOT NULL ,
CONSTRAINT C_Dépôt UNIQUE ( Nom_Dépôt , Ville ) ) ;

- Contrainte sur les domaines de valeurs de plusieurs attributs


CREATE TABLE Produit
( N_Produit INT NOT NULL CONSTRAINT Clé_Primaire PRIMARY KEY ,
Désignation CHAR(25) NOT NULL ,
Poids DECIMAL(8,2) NULL ,
Prix_U DECIMAL(10,2) NULL ,
CONSTRAINT C_Produit CHECK ( Poids > 0 AND Prix_U > 0 AND Prix_U <= 10000 ) ) ;

- Contrainte de type Clé primaire composée


CREATE TABLE STOCKER
( N_Produit INT NOT NULL REFERENCES Produit ( N_Produit ) ,
N_Dépôt INT NOT NULL REFERENCES Dépôt ( N_Dépôt ) ,
CONSTRAINT C_Stocker PRIMARY KEY (N_Produit , N_Dépôt ) ) ;
132
COMMANDE ALTER TABLE : Forme générale
But : Modifier la définition d'une table en changeant, en ajoutant ou en supprimant des colonnes ou des contraintes

1ère Forme :
ALTER TABLE < Nom de Table >
[ ADD < Nom attr. > < Type > [ < Contrainte d attr. > ] ] , …
ou [ ADD CONSTRAINT < Nom contrainte > < Contrainte > ] , …
2ème Forme :
ALTER TABLE < Nom de Table >
[ DROP COLUMN < Nom attr. > ] , ...
ou [ DROP CONSTRAINT < Nom contrainte > ] , …
3ème Forme :
ALTER TABLE < Nom de Table >
[ ALTER COLUMN < Nom attr. > < Nouveau Type > [ < Contrainte d attr. > ] ] , .
133

COMMANDE ALTER TABLE : Exemples ( Suite )


- Ajout d une colonne simple à la structure d une table

ALTER TABLE Vente ADD Commission MONEY NULL ;

- Ajout d une colonne ou de plusieurs colonnes avec contraintes

ALTER TABLE Client ADD Code_Client INT IDENTITY ( 1,1 )


CONSTRAINT PK_Client PRIMARY KEY ;

ALTER TABLE Employé ADD


N_Dép INT NOT NULL CONSTRAINT C_Dép REFERENCES Département ( N_Dép ) ,
Tél VARCHAR ( 10 ) NULL CONSTRAINT C_Tél CHECK ( Tél IS NULL OR
Tél LIKE "[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" OR
Tél LIKE " [0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] " ) ,
Salaire DECIMAL ( 8, 2 ) CONSTRAINT C_Salaire DEFAULT 5000 ;

- Ajout d une contrainte

ALTER TABLE Employé ADD CONSTRAINT C_Employé CHECK ( Date_Embauche > 01/01/98 );

- Suppression d une colonne ou d une contrainte

ALTER TABLE Personne DROP Age ;

ALTER TABLE Employé DROP CONSTRAINT C_Employé ;


134
COMMANDE CREATE INDEX : Forme générale et Exemples

CREATE [UNIQUE ] INDEX < Nom de l indexe >


ON < Nom de Table >
( < Nom Attr. > , < Nom attr. > , ….. )

On utilise un index sur un attribut ou un groupe d attributs de table dans les situations suivantes :
* Pour implémenter l intégrité de relation ( de table ) permettant de garantir l unicité des valeurs
de la clé primaire ( Commande CREATE INDEX avec le qualificatif UNIQUE )
* Pour définir une ou plusieurs clés candidates ( attributs à valeurs distinctes ) dans une table
* Pour accélérer le temps de réponse de certaines opérations de traitement sur la base de données
lorsque le nombre d enregistrements des tables est très important :
- Recherche ou Tri croissant / décroissant sur une ou plusieurs colonnes
- Requête de sélection utilisant un filtre sur une ou plusieurs colonnes avec une clause WHERE
- Requête utilisant des jointures sur certains attributs communs à 2 ou plusieurs tables
On définit alors un indexe sur la ou les colonnes en question ( colonnes de recherche , de tri ,
de sélection , de jointure , etc… )
Exemples :
CREATE UNIQUE INDEX PK_Pilote ON Pilote ( N_Pilote ) ; // Clé primaire simple
CREATE UNIQUE INDEX PK_Stocker ON Stocker ( N_Produit , N_Dépôt ) ; // Clé primaire composée
CREATE INDEX IX_Vente ON Vente ( Date_V DESC , Réf_Produit ) ; // Indexe sur un couple
d attributs de tri
135
COMMANDE CREATE VIEW : Forme générale et Exemples

CREATE VIEW < Nom de Vue > ( < Nom Attr. > , < Nom attr. > , … )
AS < Instruction SELECT > ;

1 - Notion de Vue : Une vue est une table virtuelle déterminée à partir d autres tables à l aide d une
requête de sélection . Les données affichées par une vue ne sont pas physiquement stockées dans la base de données
mais correspondent au résultat de l exécution d une requête d interrogation sur les données stockées dans
d autres tables .

2 - Avantages de l utilisation des vues :


* Sauvegarde de requêtes complexes et simplification de l accès aux données en masquant les opérations de
jointures et d agrégation :
Création d une vue : CREATE VIEW Commande_Produit AS
SELECT P.N_Produit , Désignation , Prix_U , Date_Commande , Qté_Stock
FROM Produit P , Commande C
WHERE P.N_Produit = C.N_Produit ;
Utilisation de la Vue : SELECT N_Produit , Désignation FROM Commande_Produit
WHERE Qté_Stock > 10 ;
* Support de l indépendance logique :
Si la structure de la table Produit est mise à jour , la vue Commande_Produit doit être reconstituée mais les
requêtes qui utilisent cette vue n ont pas à être remaniées .
136
COMMANDE CREATE VIEW : Exemples ( Suite )
* Renforcement de la sécurité des données par masquage des attributs et des tuples dans les tables à certains
utilisateurs :
L exemple suivant montre 2 vues définies pour 2 catégories de représentants commerciaux dans une entreprise :
ceux affectés à la région d Agadir et ceux affectés à celle de Casa .
Chacune de ces vues permet d obtenir les informations sur les clients d une région mais ne donnent pas accès
aux données des autres régions ni à celles des autres attributs des tables Client et Commande .
CREATE VIEW Commande_Client_Agadir AS
SELECT A.N_Client , A.Nom_Client , B.N_Produit , B.Désignation , B.Qté_Commandée
FROM Client A , Commande B
WHERE A.N_Client = B.N_Client
AND A.Ville = Agadir ORDER BY 2 , 3 ;

CREATE VIEW Commande_Client_Casa AS


SELECT A.N_Client , A.Nom_Client , B.N_Produit , B.Désignation , B.Qté_Commandée
FROM Client A , Commande B
WHERE A.N_Client = B.N_Client
AND A.Ville = Casa ORDER BY 2 , 3 ;

3 - Problème de mise à jour des données à l aide d une vue :


La mise à jour des données via une vue pose des problèmes pour la plupart des SGBD relationnels .
Les conditions nécessaires pour que les données d une vue soient accessibles en mise à jour et que cette mise à
jour
se répercute sur les tables d origine sont :
> Le mot clé DISTINCT doit être absent dans l ordre SELECT et la clause FROM doit faire référence à une seule table
> Les attributs de projection de l ordre SELECT doivent être de type simple ( pas d agrégat ou d attribut calculé )
> Les clauses de regroupement GROUP BY et de sélection de groupe HAVING doivent être absentes .
137

COMMANDE DROP : Forme générale et Exemples

DROP TABLE < Nom de table >


ou DROP INDEX < Nom d indexe >
ou DROP VIEW < Nom de Vue >

But : Supprimer un objet table , index ou vue de la base de données en éliminant les
informations de structure liées à cet objet et les données qui lui sont attachées .

Exemples :

DROP TABLE Client ;

DROP INDEX Clé_Primaire_Client ;

DROP VIEW Commande_Client ;

Vous aimerez peut-être aussi