Académique Documents
Professionnel Documents
Culture Documents
Bases de donn
Polycopi cours
Mohammed Khalil
3 Modèle relationnel 22
3.1 Passage du modèle entités-associations au modèle relationnel . . . . . . . . . . . . . . 22
3.1.1 Représentation des entités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.2 Représentation des associations . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.2.1 Associations un-à-plusieurs . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.2.2 Associations un-à-un . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.2.3 Associations plusieurs-à-plusieurs . . . . . . . . . . . . . . . . . . . . . 24
3.1.2.4 Associations réexives . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2 Normalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2.1 Dépendances fonctionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2.2 Graphe DF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.3 Formes normales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.3.1 Première forme normale . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.3.2 Deuxième forme normale . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.3.3 Troisième forme normale . . . . . . . . . . . . . . . . . . . . . . . . . 31
4 Le langage SQL 33
4.1 Langage de dénition de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.1 Création d'une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.2 Contraintes d'intégrité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.3 Suppression d'une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.1.4 Modication une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.2 Langage de manipulation de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
TABLE DES MATIÈRES 4
Chapitre 1
Généralités
Au cours des dernières années, les bases de données ont connu un développement considérable, qui
jouent actuellement un rôle important dans chacune de nos opérations quotidiennes ; du simple achat
par carte bancaire jusqu'à nos déclarations de revenus. L'objectif de ce chapitre est de dénir la notion
de base de données ainsi que les principaux concepts qui s'y rattachent.
La grande diérence avec un programme écrit dans un langage de programmation est qu'une base
de données doit pouvoir répondre à des questions pour lesquelles elle n'a pas forcément été prévue à
la conception.
Enn, il ne faut pas confondre les bases de données avec les systèmes d'information qui sont
composés par les bases de données, le SGBD utilisé et les programmes associés.
• Indépendance physique : La façon dont les données sont dénies doit être indépendante des
structures de stockage utilisées.
• Indépendance logique : Un même ensemble de données peut être vu diéremment par des
utilisateurs diérents. Toutes ces visions personnelles des données doivent être intégrées dans
une vision globale.
• Accès aux données : L'accès aux données se fait par l'intermédiaire d'un Langage de Mani-
pulation de Données (LMD). Il est crucial que ce langage permette d'obtenir des réponses aux
requêtes en un temps raisonnable. Le LMD doit donc être optimisé, minimiser le nombre d'accès
disques, et tout cela de manière transparente pour l'utilisateur.
• Administration centralisée des données (intégration) : Toutes les données doivent être
centralisées dans un réservoir unique commun à toutes les applications. En eet, des visions
diérentes des données se résolvent plus facilement si les données sont administrées de façon
centralisée.
• Non redondance des données : An d'éviter les problèmes lors des mises à jour, chaque
donnée ne doit être présente qu'une seule fois dans la base.
• Cohérence des données : Les données sont soumises à un certain nombre de contraintes
d'intégrité qui dénissent un état cohérent de la base. Elles doivent pouvoir être exprimées
simplement et vériées automatiquement à chaque insertion, modication ou suppression des
données.
• Partage des données : Il s'agit de permettre à plusieurs utilisateurs d'accéder aux mêmes
données au même moment de manière transparente.
• Sécurité des données : Les données doivent pouvoir être protégées contre les accès non auto-
risés. Pour cela, il faut pouvoir associer à chaque utilisateur des droits d'accès aux données.
• Résistance aux pannes : Que se passe-t-il si une panne survient au milieu d'une modication,
si certains chiers contenant les données deviennent illisibles ? Il faut pouvoir récupérer une
base dans un état sain. Ainsi, après une panne intervenant au milieu d'une modication deux
solutions sont possibles : soit récupérer les données dans l'état dans lequel elles étaient avant la
modication, soit terminer l'opération interrompue.
4. choix du SGBD
10
Chapitre 2
2.1.1 Entité
Le MCD permet de décrire les structures d'un domaine d'application. Le domaine d'application,
pourrait être une bibliothèque, un service hospitalier, le département de marketing d'une entreprise.
Le domaine d'application est perçu comme étant constitué d'entités concrètes ou abstraites. Ainsi,
dans le contexte de l'assurance automobile, on peut cerner un domaine d'application dans lequel on
repère des clients, des véhicules, des contrats et des accidents. On considère que chacun d'eux est une
1. Méthode d'Étude et de Réalisation Informatique pour les Systèmes d'Entreprises.
2.1. Éléments constitutifs du modèle entités-associations 11
entité du domaine et que chaque entité appartient à une classe ou type d'entités. On dénit naturel-
lement quatre types d'entités qu'on nommera CLIENT, VEHICULE, CONTRAT et ACCIDENT. On
représentera ces types d'entités d'une manière graphique comme indiqué dans la gure 9.1.
Ces quelques exemples montrent qu'un type d'entités peut correspondre à des :
Objets concrets inanimés : véhicules
Objets concrets animés : clients
Conventions abstraites : contrats
Événements : accidents
Dénitions
• Une entité est un objet, une chose concrète ou abstraite qui peut être reconnue distinctement et
qui est caractérisée par son unicité.
Exemples d'entité : Mehdi Idrissi, le livre que je tiens entre les mains, la Mercedes qui se trouve
dans mon garage etc.
• Un type-entité désigne un ensemble d'entités qui possèdent une sémantique et des propriétés
communes.
Exemples de types-entité : Les personnes, les livres et les voitures.
Exemple
Le domaine d'application est constitué d'entités concrètes ou abstraites. Ainsi, dans le contexte
de l'assurance automobile, on peut repérer dans un domaine d'application des clients, des véhicules,
des contrats et des accidents. On considère que chacun d'eux est une entité du domaine et que chaque
entité appartient à un type d'entités. On dénit naturellement quatre types d'entités qu'on nommera
CLIENT, VEHICULE, CONTRAT et ACCIDENT. On représentera ces types d'entités d'une
manière graphique comme indiqué dans la gure. 2.1.
Ces quelques exemples montrent qu'un type d'entités peut correspondre à des objets concrets
inanimés (des véhicules), des objets concrets animés (des clients), des conventions abstraites (des
contrats) ou des événements (des accidents). Une entité est souvent nommée occurrence ou instance
de son type-entité.
2.1. Éléments constitutifs du modèle entités-associations 12
Par abus de langage, on utilise souvent le mot entité à la place du mot type d'entités, il faut
cependant prendre garde à ne pas confondre les deux concepts.
2.1.2 Attribut
Dénitions
• Un attribut (ou une propriété) est une caractéristique associée à un type-entité ou à un type-
association.
Exemples d'attribut : le nom du client, la marque du véhicule, le type de contrat.
Exemple
Chaque client est caractérisé par un numéro, un nom et une adresse. On modélisera ces faits en
dotant l'entité CLIENT des attributs NumClient, Nom, Adresse (gure 2.2). De même, on donnera
à ACCIDENT les attributs NumAcc, DateAcc et Montant.
Règles
Un attribut ne peut en aucun cas être partagé par plusieurs type-entités ou type-associations.
Un attribut est une donnée élémentaire, ce qui exclut des données calculées ou dérivées.
Un type-entité et ses attributs doivent être cohérents entre eux (i.e. ne traiter que d'un seul
sujet).
2.1.3 Identiant
Dénitions
• Un identiant d'un type-entité ou d'un type-association est constitué par un ou plusieurs de ses
attributs qui doivent avoir une valeur unique pour chaque entité ou association de ce type.
Exemples d'identiant : le numéro de sécurité sociale pour une personne, le numéro d'immatri-
culation pour une voiture, le code ISBN d'un livre pour un livre (mais pas pour un exemplaire).
2.1. Éléments constitutifs du modèle entités-associations 13
Exemple
En général, chaque entité est dotée d'un attribut qui l'identie. L'entité CLIENT, par exemple
possède un attribut NumClient tel qu'à tout instant les entités CLIENT ont des valeurs de NumClient
distinctes. En d'autres termes, étant donné une valeur quelconque de NumClient, on a la garantie
qu'il n'y aura, à aucun moment, pas plus d'une entité CLIENT possédant cette valeur. On dira que
NumClient est un identiant de CLIENT. Il en est de même de NumVeh pour VEHICULE et de
NumAcc pour ACCIDENT et NumCtr pour CONTRAT.
Dans la représentation graphique, les attributs qui constituent l'identiant sont soulignés et placés
en tête comme c'est illustré dans la gure 2.3.
Règles
Chaque type-entité possède au moins un identiant, éventuellement formé de plusieurs attributs.
Il est impossible que les attributs constituant l'identiant d'un type-entité (respectivement type-
association) prennent la même valeur pour deux entités (respectivement deux associations) dis-
tinctes
Types d'identiants
Une propriété naturelle, par exemple le nom d'un pays pour l'entité pays.
Une propriété articielle, inventée par le concepteur pour identier l'entité qu'il vient de conce-
voir (tous les numéros, références, codes, etc).
Une propriété composée en s'assurant que la règle de composition ne générera pas de doublons ;
on parle alors d'identiant composé ; par exemple nom + prénom + date et lieu de naissance.
2.1.4 Association
Dénitions
• Une association est un lien entre plusieurs entités.
2.1. Éléments constitutifs du modèle entités-associations 14
Exemples d'association : l'emprunt par l'étudiant Adil du deuxième exemplaire du livre "Maî-
trisez SQL".
• Un type-association désigne un ensemble de relations qui possèdent les mêmes caractéristiques.
Le type-association décrit un lien entre plusieurs type-entités.
Exemples de type-association : l'emprunt d'un livre à la bibliothèque.
Exemple
Un contrat est lié au client qui l'a signé ; il existe donc une association entre ce contrat et ce
client. On dira que toutes les associations de cette nature appartiennent au type d'associations signe
entre les types d'entités CLIENT et CONTRAT. On dénira également un type d'associations
Appartient entre CLIENT et VEHICULE, indiquant qu'un véhicule appartient à un client, ainsi
qu'un type d'associations Couvre entre CONTRAT et VEHICULE, indiquant qu'un contrat couvre
les risques d'un véhicule. De même, en admettant qu'un accident implique un nombre quelconque de
véhicules, on dénira un type d'associations Implique entre ACCIDENT et VEHICULE. Ces types
d'associations sont représentés graphiquement dans la gure 2.4.
Règles
Un attribut peut être placé dans un type-association uniquement lorsqu'il dépend de toutes les
entités liées par le type-association.
2.1. Éléments constitutifs du modèle entités-associations 15
2.1.5 Cardinalité
Dénitions
• La cardinalité précise le nombre de fois minimal et maximal d'interventions d'une entité du
type-entité dans une association du type-association.
Exemple de cardinalité : une personne peut être l'auteur de 0 à n (plusieurs) livre.
Types de cardinalités
Si une cardinalité maximale est connue et vaut 2 , 3 ou plus, alors nous considérons qu'elle est
indéterminée et vaut n . En eet, si nous connaissons n au moment de la conception, il se peut que
cette valeur évolue au cours du temps. Il vaut donc mieux considérer n comme inconnue dès le départ.
De la même manière, on ne modélise pas des cardinalités minimales qui valent plus de 1 car ces valeurs
sont également susce ptibles d'évoluer. Enn, une cardinalité maximale de 0 n'a pas de sens car elle
rendrait le type-association inutile.
Les seuls cardinalités admises sont donc :
0,1 : une occurrence du type-entité peut exister tout en étant impliquée dans aucune association et
peut être impliquée dans au maximum une association. Par exemple : un contrat peut couvrir
un véhicule.
0,n : c'est la cardinalité la plus ouverte ; une occurrence du type-entité peut exister tout en étant
impliquée dans aucune association et peut être impliquée, sans limitation, dans plusieurs asso-
ciations. Par exemple : un département occupe des employés.
1,1 : une occurrence du type-entité ne peut exister que si elle est impliquée dans exactement
(au moins et au plus) une association. Par exemple : tout employé est occupé par un
département.
1,n : une occurrence du type-entité ne peut exister que si elle est impliquée dans au moins une
association. Par exemple : un accident implique des véhicules.
Une cardinalité minimale de 1 doit se justier par le fait que les entités du type-entité en questions
ont besoin de l'association pour exister. Dans tous les autres cas, la cardinalité minimale vaut 0 .
Ceci dit, la discussion autour d'une cardinalité minimale de 0 ou de 1 n'est intéressante que lorsque la
cardinalité maximale est 1 . En eet, nous verrons que, lors de la traduction vers un schéma relationnel,
lorsque la cardinalité maximale est n , nous ne ferons pas la diérence entre une cardinalité minimale
de 0 ou de 1 .
Exemple
La gure 2.5 complète le schéma de la gure 2.4 en y précisant les cardinalités.
2.2. Types d'associations 16
Règles
L'expression de la cardinalité est obligatoire pour chaque patte d'un type-association.
Une cardinalité minimal est toujours 0 ou 1 et une cardinalité maximale est toujours 1 ou n.
La cardinalité minimale doit être inférieure ou égale à la cardinalité maximale.
Si une cardinalité maximale est connue et vaut 2, 3 ou plus, alors nous considérons qu'elle est
indéterminée et vaut n.
Figure 2.9: Entités livre et lecteur liées par l'association emprunte (sans cardinalités).
Cet exemple simple permet de se poser quelques questions qui vont conduire à une réorganisation
du modèle.
Figure 2.10: Entités livre, ouvrage et lecteur liées par les associations emprunte et est un exemplaire
(sans cardinalités).
Figure 2.11: Entités livre, ouvrage, auteur et lecteur liées par les associations emprunte, a_écrit et
est un exemplaire (sans cardinalités).
2.3. Évolution du modèle 21
Figure 2.12: Entités livre, ouvrage, personne liées par les associations emprunte, a_écrit et
est_un_exemplaire (sans cardinalités).
Résumé
On a identié dans cette sous-section plusieurs cas qui nécessitent de réorganiser les entités obtenues
lors d'une première analyse :
• Si l'on repère à l'intérieur d'une entité des attributs qui représentent un ensemble logique (mis
en valeur dans l'exemple par un défaut d'identiant pour un livre), on sépare ces attributs dans
une entité supplémentaire.
• Si des attributs dans une même entité possèdent une sémantique identique (auteurs, numéros de
téléphone multiples), on crée une entité supplémentaire pour séparer ces attributs. Cette entité
sera associée à celle dont proviennent les attributs à l'origine.
• Si des entités ont la même structure (et représentent le même type d'objet), on les fusionne et
l'on conserve les associations qui existaient avant la fusion.
22
Chapitre 3
Modèle relationnel
Le modèle conceptuel exprime clairement les structures d'information à représenter, mais il n'est pas
accepté tel quel par l'ordinateur. Il est donc nécessaire de traduire ce modèle en structures techniques
de tables et de colonnes, c'est-à-dire en concepts compréhensibles et gérables par des outils disponibles :
les SGBD relationnels.
De façon informelle, on peut dénir le modèle relationnel de la manière suivante :
les données sont organisées sous forme de tables à deux dimensions, encore appelées relations,
dont les lignes sont appelées n-uplet ou tuple en anglais ;
les données sont manipulées par des opérateurs de l'algèbre relationnelle ;
l'état cohérent de la base est déni par un ensemble de contraintes d'intégrité.
où code_client joue le rôle de la clé primaire dans la relation CLIENT et joue le rôle de la clé étrangère
dans la relation COMMANDE.
Dans ce cas, la clé primaire de la table issue de l'entité côté cardinalités (0,1) est dupliquée dans
la table issue de l'entité côté cardinalités (1,1) où elle devient clé externe.
Cette règle est valable pour toutes les associations ternaires (ou quaternaires) qui sont forcément
non hiérarchiques (cardinalités maximales toutes égales à n ).
Le modèle relationnel adéquat correspondant au modèle entités-associations de la gure 3.4 devient
donc :
COMMANDE(Num_Commande, date, etat, montant_total)
ARTICLE(Ref_article, designation, prix)
CONCERNER (#Num_Commande,#Ref_article, quantite)
où Num_Commande représente la clé primaire de la relation COMMANDE et Ref_article représente
la clé primaire de la relation ARTICLE. La concaténation de ces deux clés primaires représentent la
clé primaire de la relation CONCERNER nouvellement créée, et chacune de ces clés représente des
clés étrangères.
Figure 3.5: La représentation d'un type d'association un-à-plusieurs cyclique obéit aux mêmes règles
que celle des autres types d'associations.
Un salarié a pour chef 0 ou un seul autre salarié. Un salarié est chef de 0 à n autre(s) salarié.
L'identiant de l'entité SALARIE va devenir clé primaire et les autres propriétés des attributs.
L'identiant de l'entité SALARIE devient clé étrangère. Ainsi, l'identiant de SALARIE (ma-
tricule) se retrouve deux fois dans la relation : comme clé primaire et comme clé étrangère. On
va donc donner un nom diérent et signicatif à ces deux matricules.
Le modèle relationnel résultant est le suivant :
SALARIE(matricule, nom, prénom, fonction,. . . , #matricule_chef)
Soit l'exemple présenté dans la gure 3.6. Une pièce entre dans la composition de 0 à plusieurs autres
pièces. Une pièce peut être composée de plusieurs autres pièces. Une pièce entre dans la composition
d'une autre un certain nombre de fois. Par exemple, La pièce voiture est composée de 4 pièces roue.
3.2. Normalisation 26
La pièce roue est elle-même composée d'une pièce pneu et d'une pièce jante.
Figure 3.6: La représentation d'un type d'associations cyclique plusieurs-à-plusieurs demande la dé-
nition d'une table associative.
Une pièce entrant dans la composition d'une autre est appelée composant. Une pièce composée
d'autres pièces est appelée composé. Une roue est à la fois un composant (de voiture) et un composé
(de pneu et jante). La traduction en modèle relationnel est la suivante :
PIECE(référence, libellé)
COMPOSITION(#référence_composé, #référence_composant, nombre)
3.2 Normalisation
La normalisation permet d'éviter la redondance dans les bases de données relationnelles an d'éviter
ou de limiter :
Les pertes de données.
Les incohérences au sein des données.
L'eondrement des performances des traitements.
Exemple
La relation : Voiture (NV, Couleur, Modèle, Marque, Conducteur, Infraction)
3.2. Normalisation 27
3.2.2 Graphe DF
Le graphe DF est une représentation graphique des dépendances fonctionnelles entre les données.
Pour qu'un graphe DF soit minimum, il faut s'assurer que toutes ses DF sont élémentaires et
non déduites.
DF déduite
X -> D est déduite s'il existe un autre chemin X -> A1 . . . à . . . An -> D
DF non élémentaire
X -> D est non élémentaire s'il existe une DF Y -> D telle que Y est un sous-ensemble des
attributs de X
(A,B,C) -> D est non élémentaire
DFs et identiants
L'identiant d'une relation est l'ensemble (minimal) des noeuds du graphe minimum à partir des-
quels on peut atteindre tous les autres noeuds (via les DF).
Par exemple, l'identiant de la relation R (A, B, C, D, E, F, G)
3.2. Normalisation 29
La solution la plus correcte, mais également la plus lourde à mettre en oeuvre, est de décomposer
cette relation en trois relations :
PUBLICATION(NumPubli, Titre)
AUTEUR(NumAuteur, Nom, Prenom)
EstEcrite(NumPubli, NumAuteur)
Ces trois relations sont la représentation de la réalité une publication est écrite par des auteurs.
Elle se modélise par deux entités PUBLICATION et AUTEUR reliées par l'association EstEcrite.
La clé est constituée des champs nomArticle et nomFournisseur. Or, il y a une relation de dépen-
dance entre le champ nomFournisseur, qui est une partie de la clé, et le champ Ville. On décompose
alors la relation pour éliminer la redondance ainsi créée. La nouvelle relation aura pour clé la partie de
la clé de la relation d'origine dont dépendent fonctionnellement les autres champs. Dans cet exemple,
il s'agit du champ nomFournisseur. Les autres champs dépendants constituent le reste de la relation.
Il s'agit ici du champ Adresse.
On obtient alors le résultat suivant :
PRODUIT(NomArticle, NomFournisseur, Prix)
FOURNISSEUR(NomFournisseur, Ville)
objets qu'elles fabriquent de façon à les identier sur le marché. Il existe donc une dépendance entre
le champ Type (qui n'appartient pas à la clé) et le champ Marque (qui n'appartient pas à la clé).
On décompose la relation en créant une nouvelle qui a pour clé le champ dont dépendent les autres
champs constituant la dépendance transitive. Il s'agit dans ce cas du champ Type. Les autres champs
de la nouvelle relation sont composés des champs qui en dépendent fonctionnellement : ici, le champ
Marque.
On obtient alors le résultat suivant :
• BALADEUR(NumBal, Type, Couleur)
• BALADEUR_TYPE(Type, Marque)
33
Chapitre 4
Le langage SQL
Un SGBD doit permettre la manipulation de la structure de la base de données, comme l'ajout et la
modication de champs, de manière transparente. Il conserve à cet eet une description de la structure
de la base de données que l'on appelle le dictionnaire de données. Pour réaliser ces opérations avec
l'indépendance souhaitée par rapport à la représentation, le SGBD ore trois langages de haut niveau :
• Langage de Dénition de Données (LDD) qui permet d'agir sur la structure de la base de
données (ajout, suppression et modication des tables).
• Langage de Manipulation de Données (LMD) qui permet de mettre à jour le contenu de
la base de données.
• Langage d'interrogation de Données (LID) qui permet d'interroger le contenu de la base
de données.
Il existe de nombreux systèmes de gestion de bases de données, en voici une liste non exhaustive :
• MySQL
• Oracle
• Microsoft SQL
• Access
SQL est un langage relationnel, il manipule donc des tables (i.e. des relations, c'est-à-dire des
ensembles) par l'intermédiaire de requêtes qui produisent également des tables.
Avant de présenter les trois langages du SGBD, voici quelques commandes SQL importantes :
Create database nombase : Pour créer une base de données de nom nombase.
Use nombase : Pour utiliser la base de données nombase.
Show tables : Pour acher les tables de la base de données utilisée.
Describe nom_table : Pour acher le détail des colonnes de la table nom_table.
Dans la suite de ce document, on considérera la base de données dénie par le modèle relationnel
suivant :
Création simple
La commande de création de table la plus simple ne comportera que le nom et le type de chaque
colonne de la table. A la création, la table sera vide, mais un certain espace lui sera alloué. La syntaxe
est la suivante :
CREATE TABLE nom_table (nom_col1 type1, nom_col2 type2, ...) ;
not NULL ou NULL : Interdit (not NULL) ou autorise (NULL) l'insertion de valeur NULL
pour cet attribut.
unique : Désigne l'attribut comme clé secondaire de la table. Deux n-uplets ne peuvent recevoir
des valeurs identiques pour cet attribut, mais l'insertion de valeur NULL est toutefois autorisée.
Cette contrainte peut apparaître plusieurs fois dans l'instruction.
primary key : Désigne l'attribut comme clé primaire de la table. La clé primaire étant unique,
cette contrainte ne peut apparaître qu'une seule fois dans l'instruction. La dénition d'une clé
primaire composée se fait par l'intermédiaire d'une contrainte de table. En fait, la contrainte
PRIMARY KEY est totalement équivalente à la contraite UNIQUE NOT NULL.
foreign key (colonne) references table [(colonne)] : Contrainte d'intégrité référentielle (Clé
étrangère) pour un attribut de la table en cours de dénition. Les valeurs prises par cet attributs
doivent exister dans l'attribut spécié et posséder une contrainte PRIMARY KEY ou UNIQUE
dans la table nom_table.
check (condition) : Vérie lors de l'insertion des données que l'attribut vérie la condition.
default valeur : Permet de spécier la valeur par défaut de l'attribut.
La suppression d'un n-uplet dans la table maître pourra être impossible s'il existe des n-uplets dans
d'autres tables référençant cette valeur de clé primaire et ne spéciant pas l'une de ces deux options.
UPDATE nom_table
set
nom_col_1 = expression_1 ,
nom_col_2 = expression_2 ,
...
nom_col_n = expression_n
WHERE predicat ;
En fait l'ordre SQL SELECT est composé de 7 clauses dont 5 sont optionnelles :
Select : Cette clause permet de spécier les attributs que l'on désire voir apparaître dans le résultat
de la requête.
From : Cette clause spécie les tables sur lesquelles porte la requête.
Where : Cette clause permet de ltrer les n-uplets en imposant une condition à remplir pour qu'ils
soient présents dans le résultat de la requête.
Group by : Cette clause permet de dénir des groupes (i.e. sous-ensemble).
Having : Cette clause permet de spécier un ltre (condition de regroupement des n-uplets) por-
tant sur les résultats
Order by : Cette clause permet de trier les n-uplets du résultat.
Extraction simple
La requête la plus simple consiste à demander d'acher les valeurs de certaines colonnes de lignes
d'une table. La requête suivante demande les valeurs de numcli, nomcli et ville des lignes de la table
CLIENT.
select *
from CLIENT
Lignes dupliquées
En principe, le résultat d'une requête monotable contient autant de lignes qu'il y a, dans la table
de départ, de lignes vériant la condition de sélection.
La requête suivante ache les villes où habitent des clients de catégorie B :
select ville
from CLIENT
where categorie = 'B'
La réponse contient autant de lignes que la table originale CLIENT en contient qui satisfont la sélection.
On pourra éliminer les lignes en double par la clause distinct comme suit :
Cette requête produit un tableau des montants TVA des articles en stock dont la quantité restante est
supérieure à 500 unités.
Lors de l'achage du résultat, les colonnes reçoivent un nom qui est celui du composant de la
clause select. Dans le cas de données dérivées, le nom peut apparaître encombrant et peu signicatif.
On pourra alors dénir le nom qui apparaît en début de colonne, ce qu'on appelle un alias de colonne.
La formulation ci-dessous illustre ce principe :
Conditions élémentaires
Une condition élémentaire peut porter sur la présence de la valeur null :
categorie is null
categorie is not null
Une condition peut aussi porter sur l'appartenance à une liste :
categorie in ('A','B','C')
ville not in ('Tanger','Rabat','Casablanca')
ou à un intervalle :
compte between 1000 and 4000
categorie not between 'A' and 'C'
ou encore sur la présence de certains caractères dans une valeur :
nomcli like '_assine'
ville like '%blanc%'
Le signe '_' désigne un caractère quelconque et '%' désigne toute suite de caractères, éventuellement
vide.
Par défaut, le classement se fait par ordre ascendant des valeurs. On peut également spécier explici-
tement un ordre ascendant (asc) ou descendant (desc) :
select *
from PRODUIT
where nompro like '%casques%'
order by Qstock desc
Fonctions du système
current_date : la date courante ;
current_time : l'instant courant ;
current_timestamp : date + instant courant.
Fonctions agrégatives
count(*) donne le nombre de lignes trouvées,
count(nom-colonne) donne le nombre de valeurs de la colonne,
avg(nom-colonne) donne la moyenne des valeurs de la colonne,
sum(nom-colonne) donne la somme des valeurs de la colonne,
min(nom-colonne) donne le minimum des valeurs de la colonne,
max(nom-colonne) donne le maximum des valeurs de la colonne.
La requête ci-dessous fournit une table d'une ligne décrivant la répartition (moyenne, écart maxi-
mum, nombre) des montants des comptes des clients de Casablanca :
Les sous-requêtes
Considérons les clients qui habitent dans une ville donnée. Il est possible d'en retrouver les numéros
en posant la requête suivante :
select numcli
from CLIENT
where ville = 'Casablanca'
dont l'exécution nous donnerait :
NCLI
2
5
10
Une sous-requête peut elle-même contenir une sous-requête. La requête suivante donne les produits
qui ont été commandés par au moins un client de Casablanca.
select *
from PRODUIT
where numpro in ( select numpro
from DETAIL
where numcom in ( select numcom
from COMMANDE
where numcli in ( select numcli
from CLIENT
where ville='Casablanca')))
select *
from CLIENT
where ville in ( select ville
from CLIENT
where numcli = 3)
Alias de table
Si deux tables ont deux colonnes de même nom, on pourra préxer le nom de la colonne du nom de
la table. On écrira par exemple COMMANDE.numcli et CLIENT.numcli an de distinguer les deux
4.3. Langage d'interrogation de données 45
select *
from PRODUIT as P1
where P1.prix > 123
select *
from DETAIL
where Qcom <= all (select Qcom
from DETAIL
where numpro = 6)
and numpro = 6
La condition Qcom <= all (select Qcom from DETAIL where numpro = 6) s'interprète ainsi : la
valeur de Qcom (de la ligne de DETAIL courante) est inférieure ou égale à chacun des éléments de
(select Qcom from DETAIL where numpro = 6).
4.3. Langage d'interrogation de données 46
Quant à la requête ci-dessous, elle désigne les détails de commande 1 dont la quantité commandée
n'est pas minimale :
select *
from DETAIL
where Qcom >any (select Qcom
from DETAIL
where numpro = 1)
and numpro = 1
La condition Qcom > any (select Qcom from DETAIL where numpro = 6) s'interprète comme
suit : la valeur de Qcom est supérieure à au moins un des éléments de (select Qcom from DETAIL
where numpro = 6).
Sous-requête ou jointure ?
On peut faire observer que certaines conditions utilisant une sous-requête (select emboîté) peuvent
s'exprimer à l'aide d'une jointure. Par exemple, la requête :
En revanche, certaines structures de select emboités ne peuvent pas s'exprimer par une jointure.
Tel serait le cas de la recherche des commandes qui ne spécient pas le produit 6, vue auparavant et
qu'on rappelle
select ville,
count(*) as NOMBRE_CLIENTS,
avg(compte) as MOYENNE_COMPTE
from CLIENT
group by ville
Le résultat compte autant de lignes qu'il y a de groupes ainsi constitués, et donc autant qu'il y a de
villes distinctes dans CLIENT :
Une fois les clients sont reconstitués à partir des commandes. On ne retient que les groupes d'au
moins deux commandes :
from DETAIL
where NumPRO = 1)
group by numcli
having count(*) >= 2
Groupes et jointures
Il est aussi possible d'obtenir la quantité totale de ce produit 1 que chaque client a commandée.
Les données à acher appartenant à plusieurs tables (NumCLI et somme des QCOM), il nous faut
opérer un groupement sur le résultat de la jointure de COMMANDE et DETAIL.