SYSTEME D’INFORMATION
METHODE MERISE
Systèmes ???
Système informatique
Systèmes d’Information
L’information dans l’entreprise :
décisions infos
flux entrant flux sortant
système opérant
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
• Le
Lesystème
systèmed’information
d’informationestest
la la
mémoire de de
mémoire l’entreprise ; il sert
l’entreprise ; il sert
d’interface
d’interfaceentre
entrelelesystème
systèmedécisionnel
décisionneletetle le
système
systèmeopérationnel.
opérationnel :
informations résultat de
économiques système de pilotage l’entreprise
décisions infos traitées
infos système d’information infos
l’avénement du réseau.
L’informatique des
Croissance du volume des données, Internet, modèle multi tiers
années 2000
a. Consulter
b. Organiser
c. Mettre à jour
d. Produire de nouvelles informations par des calculs
Rôles du système
Rôles d’information
du système :
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
information…
l’information...
15
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, ...)
17
Exemple de système
Entreprise
Produits achetés Produits vendus
19
Service commercial
Système d'information
Bons de commandes
Bons livraison
Factures Pièces règlement
Service expéditions
Livraisons
Cmdes / Règlements
Clients
Exemple :
21
Exemple :
Sous-systèmes et échanges de flux dans une entreprise.
Sous-systèmes et échanges de flux 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.
22
Du réel
Du au
réel modèle
Du réel au ...…
modèle
au modèle …
n 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.
O àaide O à
ssi A*
répondre aux questions
répondre qu'il se pose
aux questions qu'il sesurpose
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
23
• modèle de données
• modèle de traitement
• modèle événementiel
• modèle organisationnel
• modèle de processus
• ..
avec le modèle pour relever les détails non représentables sur le modèle.
24
Transformation
Miroir
Codage
Image
Base de
Données
25
Objectif
physique,Pour
c'est à dire
parvenir la base
à ce résultat, de données.
on procède par étapes :
d'information.
Les techniques de recueil
Pour recenser les informations, on utilise essentiellement :
• L’étude de documents
• Les entrevues
• 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é.
Notion de domaine
On appelle domaine l’ensemble des valeurs prises par une donnée,
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
MntCde de la N (monétaire) Format : Somme (PrixCde *
9999,99 EUR QteCde)
commande
!
32
• Soit la liste des données recensées dans un établissement scolaire :
• Numéro salle
• Nom et Prénoms élève
• Nom et Prénoms professeur
• Matière enseignée
• Note
• Nombre d'heures prévisionnelles par matière et par classe.
• Moyenne
• Mention
Nom Description Domaine ou Commentaire
Contraintes, règles de
symbolique (rôle) type s
calcul
Nom ou raison
sociale, format
Nom du : tout en
NomClient AN 50 Obligatoire
client
majuscules
Prix unitaire
11 PrixProd PrixProduit X 34
12 QteComm
L'analyse Qte
des Commandée
dépendances X
Elle a pour but de rechercher les liens entre les différentes données également
NumBon ! DatComm, NumClient, NumRep
appelés
NumClient ! les dépendances.
Nomclient, RueClient, Villeclient DF partie gauche composée
, elle !
NumRep NomRep comme document un diagramme ou un graphe des dépendances.
produira
RefProduit ! LibProd, PrixProd
NumBon, RefProd ! QteComm
NumBon RefProduit
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 identifiantes
les propriétés identifiantesrepérées dansla lamatrice
repérées dans matricepar par
des des colonnes
colonnes qui
qui comportent au moins
comportent au moinsdeux
deux «« 11».».Dans
Dans l’exemple
l’exemple ci-dessus
ci-dessus les propriétés
les propriétés 1, 3 et 5
1, 3 et 5 sont sources
sont sources de de dépendances
dépendances fonctionnelles
fonctionnelles et joueront et joueront
donc donc le rôle
le rôle d’identifiant
d’entités dans le modèle conceptuel.
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
36
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 37
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.
•NumClient → NomClient
•NumCLient → AdresseClient
RefProduit → LibProduit
38
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.
Exemples :
(NoFacture, CodeProduit) → QtéFacturée,
(NoElève, Matière, Date) → Note
41
Dépendance fonctionnelle élémentaire
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é.
42
Par exemple :
NoSérieVéhicule → NoImmatriculation et NoImmatriculation →
NoSérieVéhicule
(NoSérieVéhicule → NoImmatriculation).
44
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
Exemple :
Les véhicules .... font l'objet d'un suivi dans des garages ...
l’identifiant
1
est en
No Propriété
NumBon
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.
No représetant La démarche X Xconsistera alors à partir du
DF élémentaire et directe
dictionnaire
8 des données
NomRep et du repérage des identifiants
Nom représentant 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
NumClient sont repérés
! Nomclient, par
RueClient, leur numéro d'immatriculation
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
d’information à implanter.
48
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.
49
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
Parmi les propriétés d’une entité, il y en a une qui joue un rôle particulier :
L’identifiant
s au moins uned’une l’entité est
propriété. une propriété
Chacune de cestellepropriétés
qu’à chaquedoit
valeur de la être
pouvoir
propriété corresponde une et une seule occurrence de l’entité.
Par conséquent
nt 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
l’identifiant
ntité, •ilsiyl’entité
en a une qui joue
ne possède un rôle
qu’une particulier
propriété, :
cette propriété est l’identifiant
propriété
• toutestelleles
qu’à chaque sont
propriétés valeuren de la propriétéfonctionnelle
dépendance correspondeélémentaire
une et une et
nséquent
directe: avec l’identifiant
urrences d’une entité ayant le même identifiant
• L’identifiant est représenté souligné dans le modèle.
vec l’entité : l’entité existe si on peut valoriser
PRODUIT
ECURIE (Num_Produit, Nom_Produit)
SAISON
Association ternaire : nom_ecurie
engager
0,n 0,n
id_saison
COMMANDE (Num_Cde, Date_Cde)
LIGNE_CDE (Num_Cde#, Num_Produit#, Qte_Cde)
ation ternaire : 0,n
PILOTE
num_pilote
nom_pilote
Cet exemple peut se lire : Une écurie engage un ou plusieurs pilote pour une ou plusieurs
saison. Ce qui peut se lire dans tous les sens de l'association. Le modèle relationnel résultant
51
Cardinalités
es rôles sont généralement faciles à identifier sur des associations binaires, ce n’est pas le ca
sociations
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é
a cardinalité représente
est choisie parmile 0nombre
ou 1. d’occurrences minimum et maximum d’une association par rapp
e 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 occurren
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 àoccurren
1
l’association participe aux occurrences de l’entité. Cette cardinalité est choisie parmi 1 ou n
mais non quantifiée. Si la valeur de n est connue, on peut la mentionner.
indique une cardinalité maximale supérieure à 1 mais non quantifiée. Si la valeur de n est connu
52
2.3.2 Formalisme
Formalisme
ardinalités sont mentionnées
Les cardinalités par couple par
sont mentionnées du côté dedu
couple l’entité à considérer.
côté de La cardinalité
l’entité à considérer.
sentée en premier, la maximale en second.
La cardinalité minimale est représentée en premier, la maximale en second.
ple :
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
rdinalité
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 o
he 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
2.4 desAssociations
clients n'ayant pas passé d'affaire.
réflexives
nt des associations qui relient deux fois la même entité.
53
Cardinalités d’une Association
E1 E2 E1 E1 E2
Assoc E2 Assoc
Assoc
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
54
inalité minimale à 1 ou à 0 dépend des règles de gestion. Si sur le schéma précédent, on adm
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
des associations qui relient deux fois la même entité.
Dans
s associations les associations
réflexives, la notionréflexives, la notion
de rôle prend de rôle
tout son prend tout son sens.
sens.
4- Vérification du modèle
CLIENT
Nom, adresse
•ORACLE
•VISUAL BASIC
•MYSQL
•ACCESS
60
1. Y => Y
2. X => Z
3. Y => X
4. Z => X
Le MLD
Le (Modèle Logique
MLD (Modèle des des
Logique Données
Donnéesouou MRD
MRD (Modèle relationneldes
(Modèle relationnel desdonnées)
données)
restereste
indépendant
indépendant du SGBD
du SGBD utilisé.utilisé.
64
AUTEUR
LIVRE
num_auteur
num_livre
nom_auteur
titre_livre
date_naissance
AUTEUR
LIVRE
num_auteur 1,n écrit 1,1 num_livre
nom_auteur
titre_livre
date_naissance
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 solutionMarque_Micro)
Car un(Num_Cd,
est que la table CD_ROM reçoivent comme clé étrangère Num_Micro.
CD_Rom estMarque_Cd,
affecté à un et un seul micro. Ce qui donne :
üCD_ROM Num_Micro#)
Une autre solution àMICRO
proscrire est l'échange
(Num_Micro, des clés primaires entre les 2 tables,
Marque_Micro)
CD_ROM (Num_Cd, Marque_Cd, Num_Micro#)
ce qui donnerait :
üMICRO
Une(Num_Micro,
autre solution Marque_Micro,
donnerait :
Num_Cd#)
à proscrire est l'échange des clés primaires entre les 2 tables, ce qui
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.
67
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
pas de micro
l'on ne de
un lecteur saitCD-Rom
connaît pas
et unlaMicro.
destination du cd-rom.
Ce cas d'association
En reprenant nécessite la création
le modèle d'uneetautre
relationnel, table
partant (ici EQUIPER)
qu'une prenant
clé étrangère ne peut êtr
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émor
d'association entre un lecteur de CD-Rom et un Micro. Ce cas d'association né
clé étrangère dans la table COMPOSER:
création d'une autre table (ici EQUIPER) prenant comme clé primaire la compositio
ü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#)
68
• La premiére solution
Association binaire 0,1 -0,n ou 1,n
assimile la cardinalité 0,1 à une cardinalité 1,1 et
migration de la clé primaire de la table coté 1,n vers la table coté 0,1 ce
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
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 1Cet
: ü RESPONSABLE (Num_Responsable, Nom_Responsable)
exemple illustre le fait qu'une équipe est dirigée par un responsable
peut n'être dirigéeEQUIPE
par personne.
ü (Nom_Equipe, Num_Responsable#)
Solution
Solution 2 :1 : EQUIPE (Nom_Equipe)
ü RESPONSABLE (Num_Responsable, Nom_Responsable)
üRESPONSABLE (Num_Responsable,
EQUIPE (Nom_Equipe, Nom_Responsable)
Num_Responsable#)
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 (disqu
ü 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 70
Association binaire x,n-x,n et porteuse de données
Cecas
Ce casestestune
uneextension
extension
du du
cas cas précédent,
précédent, la propriété
la propriété portéeportée
par par l'a
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
0,n
PILOTE
num_pilote
ü SAISON (Id_Saison) nom_pilote
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 73
Associations réflexives
Ces associations sont en en fait des associations binaires, leur traitement
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,
ü PERSONNE (Num_Personne, Nom_Personne)
Nom_Personne)
EPOUSER (Num_Mari#, Num_Femme#, Date_Mariage)
ü EPOUSER (Num_Mari#, Num_Femme#, Date_Mariage)
74
Règles de gestions
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
1,n MATIERE
0,n
ENSEIGNANT ENSEIGNE
3,n
CLASSE
76
Les Contraintes d’Intégrité :
Exemples
Ligne-Commande
Pas FN2 car Df avec clé n'est pas élémentaire
N°cde,Réf, Dés, Qté
Client
Pas FN3 (Pas de transitivités)
Codecli,nomcli, codecaté, nomcaté
Exemples
COURS
N'est pas BCFN
Matière, N°classe, Code-prof
SERVEUR MLDR
1# 1,N 0,N CALENDRIER
AFFECTER
2 SERVEUR ( 1 # , 2 )
9#
1,N 0,N
CALENDRIER ( 9 # )
0,N AFFECTER ( 1 #, 9 # , 3 # )
SUIVRE 0,N TABLE
3#
CONCERNER TABLE ( 3 # )
1,1 TRAITER
1,1 COMMANDE ( 11 #, 12, 10 ,
1,1
COMMANDE 1 #, 3 #, 9 # )
11 # CONSOMMATION
12 FIGURER 0,N FIGURER ( 11 # , 4 # , 7 , 8 )
1,N 4 #
10 5
7 CONSOMMATION ( 4#, 5 , 6 )
8 6
Dictionnaire de données
BASE DE DONNEES
81
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 .
- 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 ? »
- 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é )
Requêtes SQL
84
Qu'est-ce-que le 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
COMMANDE SELECT 87
• 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.
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 adhérents (Nom_adh,
Prénom_adh, Cp_adh, Ville_adh)
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
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 langage algébrique en
: SQL : 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
R2 = SELECT
PROJECTIONFILM.titre, CATÉGORIE.libellé-catégorie
R1(titre, libellé-catégorie) Sueurs froides comédie dramatique
Sueurs froides comédie dramatique
Cendrillon
Cendrillon dessin animé
dessin animé
FROM
Traduction FILM,
en SQL : CATÉGORIE Super
SuperMondet
MondetIIII documentaire
documentaire
SELECT FILM.titre, CATÉGORIE.libellé-catégorie
FROM FILM, CATÉGORIE La vie des coccinelles
La vie des coccinelles documentaire
documentaire
WHERE FILM.code-catégorie = CATÉGORIE.code-
WHERE FILM.code-catégorie = CATÉGORIE.code-catégorie; La La guerre
guerre desdesétoiles
étoilesII comédie
comédie dramatique
dramatique
Remarque n°1 :
catégorie; RÉSULTAT REQUÊTE Remarque n°1 :
Il est bien évidement possible de faire plusieurs jointures, autant qu’il y a de table
titre libellé-catégorie
Il est bien évidement possible de faire plusieurs jointures, autant qu’il y a de tab
93
Remarque n°1 :
Il est bien évidement possible de faire plusieurs jointures, autant qu’il y a de tables
à relier entre elles.
Par exemple :
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.
•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.
96
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 :
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
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
Jointure « naturelle »:
Jointure naturelle
• relations.
but: créer toutes les combinaisons significatives
•entre tuples
significatives de deux
= portent relations
la même valeur pour les attributs de même domaine
! – significatives = portent la même valeur pour les
attributs de même domaine !
•précondition: les deux relations ont au moins un attribut de même domaine
• précondition: 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
100
JJointure
o i n t u rnaturelle
e 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
! Requête: nom, prix dʼachat, fournisseur des Produits commandés par Paul
En SQL de base :
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
103
Bernard ESPINASSE - Le langage SQL 17 Bern
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) Au
Table
Table EMPLOYE
EMPLOYE (EMPNO,
(EMPNO, ENOM,
ENOM, DEPTNO,
DEPTNO, SAL) SAL) T
! Requête: Nom et Salaire des Employés gagnant plus que l'employé de numéro 12546
! Requête: Nom et Salaire des Employés gagnant plus que lʼemployé de numéro 12546 ! R
Algèbre
Algèbre : :
En
R1 := !SAL ( "EMPNO=12546 (EMPLOYE) Récupération Salaire
EndeSQL
En SQL basede: base :
Re
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
E1.SAL > E2.SAL
WHERE E2.EMPNO = 12546 AND E1.SAL > E2.SAL
Remarque :
E1Remarque
et E2 sont 2: instances différentes de la table EMPLOYE
((EMPLOYE.SAL>R1.SAL) (R1))
Auto-Jointure (2)
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)
106
! 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 E1.ENOM, E1.SAL
SELECT E1.ENOM, 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
107
Jointures externes
• Mettre
Jointures externes
en évidence les tuples qui n’apparaissent que dans une table
• but:(gauche
créer toutes les combinaisons significatives entre
ou droite)
tuples de deux relations •
•– Valeuren
Mettre NULL pourles
évidence lestuples
table (gauche ou droite)
attributs de l’autre tableque dans une
qui n’apparaissent
• exemple
exemple: :
R|gX|S
R A B S B C D
a b b c d A B C D
b c a a b a b c d
c b d a c b c Null
c b c d
Q
108
• 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
Théta-Jointures externes :
Elles sont définies de façon similaire :
Theta-jointure
a-jointure : JOINT … ON prédicat
MPLOYE(EMPNO,Table
ENOM, DEPNO, SAL)
EMPLOYE(EMPNO, ENOM, DEPNO, SAL)
Requête: Nom et salaire des employés gagnant plus que lʼemployé 12546
e: Nom et salaire des employés gagnant plus que lʼemployé 12546
(AUTOJOINTURE)
OINTURE)
SELECT E1.ENOM, E1.SAL
FROM EMPLOYE E1 JOIN EMPLOYE E2 ON E1.SAL > E2.SAL
WHERE E2.EMPNO = 12546
T E1.ENOM, E1.SAL
EMPLOYE E1 JOIN EMPLOYE E2
.SAL > E2.SAL
E2.EMPNO = 12546
113
115
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
=> Calculer la somme globale , la moyenne , le maximum et le minimum des quantités stockées du
produit N° 122
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 » .
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é́ ?
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 ?)
idE nomU departement decision
120
⇤)
123 INSA informatique O
SELECT
Déroulement pas à pas nomU,
de la requête COUNT( :
FROM C
avec regroupement
123
123
123
UCB
UCB
UJM
Opérateurs ensemblistes
234 INSA
electronique
informatique
electronique
N
O
O
biologie Sous-requêtes
N Regrou
GROUP
SELECT nomU, COUNT(∗) BYC nomU
FROM ORDER
GROUP BY BY nomU
nomU Opérateur ; (6)
COUNT
345
345
345
345
UJF
UJM
UJM
UJM
bioinformatique
bioinformatique
electronique
informatique
O
N
N
O
765 UJM histoire N LIF4 - Initiation aux Bases de Données et Réseaux // SQL partie 2
LIF4 - Initiation aux Bases de Données et Réseaux // SQL partie 2 UCBL Lyon 1
122
Exemple
Permet de sélectionner des groupes de la requête
de regroupement. select ville , sum(age) total
from client
Exemple : Langage SQL : opérations ensemblistes
group by ville;
Langage SQL : fonctions d’agrégat et regroupements
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
124
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 ?
Notion de vue
• Permet de donner un nom à une requête qui sera utilisée ensuite comme
une table (pour la consultation)
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 :
En langage algébrique :
* 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’ ) ;
•Sous-requête renvoyant une seule valeur ( relation à une seule ligne et une seule colonne ) :
•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’ )
129
Les Sélections avec sous-requête (suite 1)
* Sous-requête renvoyant plusieurs valeurs ( relation à une seule colonne et plusieurs lignes ) :
=> 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 )
130
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’ )
D. Autres opérateurs (ensemblistes) 132
•EXCEPT. Notation :
• R3 = R1 R2
Ou
R3 = UNION (R1, R2)
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
UNION
R3 = UNION (R1, R2)
SELECT Nom-Champ, Nom-Champ, ...
FROM Nom-Table2;
Soient les tables ANGLAIS et ESPAGN qui permettent de gérer les candidats à des épreuves d
ANGLAIS
133
Soient les tables nocandidat nomcandidat prénomcandidat numétablissement
ExempleANGLAIS
: et ESPAGN qui permettent de gérer les candidats à des épreuves de
10123 DUPONT Patrick 94010
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’espagn
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 passant les épreuves d’anglais ou d’espagnol
doublons).
Traduction en SQL :
(l’union desEndeux tables)
langage (sans
algébrique : doublons).
SELECT *
R1 = ANGLAIS ESPAGN
FROM ANGLAIS
UNION
En langageTraduction
algébriqueen SQL :
: R1 = ANGLAIS ∪ ESPAGN
SELECT *
FROM ESPAGN;
SELECT *
Traduction en SQL :
FROM ANGLAIS
RÉSULTAT REQUÊTE
UNION
nocandidat nomcandidat prénomcandidat numétablissement
SELECT *
SELECT * FROM ANGLAIS
FROM ESPAGN;
10123 DUPONT Patrick 94010
10216 GRANGETTE Didier 75100
UNION 10309
RÉSULTAT 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
10025
Didier
94010
ACQUINO
75100 Patricia 91260
10309 HERISSON Patrick 94010
FROM ESPAGN; 10405
10505
MAGNAN Hélène
D.2. L’intersection
SERRES Sylvia
75250
(et 94010
/ and)
10025 ACQUINO Patricia 91260
L’intersection consiste
L’intersection àconsistecombiner deux (compatibles)
à combiner deux relations relations 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 :
R3 = R1 R2
relations de départ. Ou
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 lang
135
Exemple :
Soient les tables ANGLAIS
Soient et ESPAGN
les tables ANGLAIS quiquipermettent
et ESPAGN permettent dede gérer
gérer lesANGLAIS
les candidatscandidats à des
à des épreuves épreuves de
de langue.
nocandidat nomcandidat prénomcandidat numétablissement
10123 ANGLAIS DUPONT Patrick 94010
langue. 10216 prénomcandidat
GRANGETTEnumétablissement
Didier 75100
nocandidat nomcandidat
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
nocandidat nomcandidat 10216 prénomcandidat
GRANGETTEnumé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’anglai
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).
SELECT *
Traduction en SQL :
FROM ANGLAIS
En langage algébrique
SELECT *
: R1 = ANGLAIS ∩ ESPAGN
INTERSECT
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)
D.3. La différence (non / not)
FROM ESPAGN; 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
relations
(compatibles) pour créer une et non contenues
troisième relationdans
qui l’autre des relations de
D.3. La différence (non / not) 136
Instructions SQL :
différences sont possibles.
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
Instructions SQL :
SELECT Nom-Champ, Nom-Champ, ...
FROM Nom-Table2
MINUS
SELECT Nom-Champ, Nom-Champ, ...
FROM Nom-Table1;
ANGLAIS
137
nocandidat nomcandidat prénomcandidat numétablissement
Exemple :
10123 DUPONT Patrick 94010
Soient les tables ANGLAIS
10216 et ESPAGN qui
Exemple
GRANGETTE
: permettent de gérer les candidats à des épreuves de
Didier 75100
Soient les tables ANGLAIS et ESPAGN qui permettent de gérer les candidats à des épreuves de
10309 HERISSON Patrick 94010
langue. 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
On souhaiterait obtenir souhaiterait obtenir la liste des candidats passant les épreuves
En En langage
langage algébrique
algébrique = :
: R1 ANGLAIS - ESPAGN
seulement.
R1 = ANGLAIS - ESPAGN
Traduction en SQL :
Traduction en SQL : En langage algébrique :
SELECT * FROM ANGLAIS R1 = ANGLAIS - ESPAGN
MINUSSELECT *
Traduction en SQL :
FROM ANGLAIS
SELECT * FROM ESPAGN;
MINUS SELECT *
SELECT * FROM ANGLAIS
FROM ESPAGN; MINUS
Il est 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
utiliserparenthèses
des parenthèses pour déterminer
pour déterminer les ordres
les ordres de priorité deopérateurs.
de ces priorité de ces opérateurs.
Il est possible de combiner les opérateurs UNION, INTERSECT et MINUS, il faut pour cela uti
parenthèses pour déterminer les ordres de priorité de ces opérateurs.
ANGLAIS
nocandidat nomcandidat Prénomcandidat numétablissement
ANGLAIS
10123 DUPONT nocandidat nomcandidat
Patrick 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
138
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 tuple
- 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 )
139
* 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 ;
140
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 > ]
141
• 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’
143
COMMANDE DELETE : Forme générale et Exemples
Les ordres LDD sont des instructions SQL créées à partir des commandes suivantes :
Commande Rôle
Chaque commande peut utiliser une ou plusieurs clauses obligatoires et des clauses
optionnelles
145
COMMANDE CREATE TABLE : Forme générale
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é 146
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. > ] ] , .
150
COMMANDE ALTER TABLE : Exemples ( Suite )
- Ajout d’une colonne simple à la structure d’une table
ALTER TABLE Employé ADD CONSTRAINT C_Employé CHECK ( Date_Embauche > ‘ 01/01/98 ’ ) ;
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