Vous êtes sur la page 1sur 71

République algérienne démocratique et populaire

Ministère de l’enseignement supérieur et de la recherche scientifique

Université MOULOUD MAMMERI de Tizi–Ouzou

Faculté de génie électrique et informatique

Département d’informatique

SUPPORT DE COURS
Module : Introduction aux bases de données
Etudiant Ciblés : 2iéme Année Ingénieur Informatique
Année/Semestre : S4-2023

Chargée des cours : Dr. F.Bouhatem, Maitre de


Conférences B, Département Informatique, UMMTO

Plan du Cours
Chapitre 1 : Modèle Entité/Association
Chapitre 2 : Concepts de base des bases de
données
Chapitre 3 : SQL
Chapitre 4 : Application Web

1
Chapitre 1 :
Modèle Entité/Association

2
1. Introduction
Avant l’arrivée des bases de données, les systèmes traditionnels étaient centrés
sur les fonctions et les traitements et non pas sur les données. De ce fait, chaque
application a la responsabilité de stocker et gérer ses données dans des fichiers.
Les données dans les systèmes traditionnels ont les particularités suivantes :

programme de l’application ce qui fait qu’il n‘ y a aucune indépendance entre


programme et données.
fichiers (redondance).

fichiers (Description multiple des structures de fichiers)

Exemple

Nous constatons dans l’exemple, que lors des mises à jour de la table (produit,
quantité, fournisseur, adresse) nous pouvons tomber sur des incohérences. Par
exemple :
ttre à jour l'adresse d'un fournisseur, il faut le faire partout ;

de produit et de quantité ;
les
fournisseurs de ces produits.

3
L’utilisation des bases de données (BD) est la nouvelle approche qui a vu le jour au
début des années 60 et dont le but est de remédier aux problèmes des systèmes
traditionnels.

2. Notions de base
Définition 1 (Une donnée) : Selon l’AFNOR1 : Une donnée est un fait, une notion,
une instruction représentée sous forme conventionnelle, convenant à une
communication, une interprétation ou un traitement soit par l’homme ou par des
moyens informatiques.
Définition 2 (Une information) : est tout le signifiant que l’on attache et que l’on
peut déduire d’un ensemble de données et de certaines associations entre données.
Définition 3 (Un fichier) : est un ensemble de données qui peut être manipulé par
plusieurs utilisateurs ayant une vue unique de ces données. Physiquement, c’est
un ensemble d’enregistrements eux même sont composés de champs.
Définition 4 (Une base de données) : Une base de données est un gros ensemble de
données structurées et mémorisées sur un support permanent. Elle peut être
manipulée par plusieurs utilisateurs ayant des vues différentes de ces données. Du
point de vue physique, une BDD est le regroupement de plusieurs fichiers partagés
par plusieurs utilisateurs différents. Selon Thierry Lecroq, une base de données
est un ensemble structuré de données enregistrées avec le minimum de redondance
pour satisfaire simultanément plusieurs utilisateurs de façon sélective en un
temps opportun.

1 Association Française de NORmalisation

4
Les utilisateurs des bases de données peuvent être un simple individu avec une
simple base de données privés (médecin, avocat, Etc.) ou une société complète avec
une base de données partagée de volume très important (une banque, une
université, .Etc.). Par exemple on parle d’une base de données d’études à
l’université, base de données achat au supermarché, base de données réservation
d’un voyage dans une agence…
Définition 5 (Banque de données) : Une banque de données représente l’ensemble
des informations mémorisées par un ordinateur concernant un domaine
scientifique économique ou culturel donné et cela d’une façon aussi exhaustive que
possible. Par exemple on parle de la banque de données des médecins spécialistes
algériens, banque de données des empreintes digitales,…
Définition 6 (SGBD) : Un SGBD (Système de Gestion des Bases de Données)
représente un ensemble coordonné de logiciels qui permet de : décrire, mémoriser,
manipuler, traiter, interroger les ensembles de données constituant la base. Il
assure la sécurité et la confidentialité des données dans un environnement où de
nombreux utilisateurs ayant des besoins variés peuvent interagir simultanément
sur ces ensembles de données.

3. Les modèles de base de données


Depuis l’arrivée des bases de données, différents modèles ont été proposés. Nous
pouvons les classer en trois catégories liées aux différentes générations des bases
de données. La première génération (années 60) englobe les modèles hiérarchiques
et les modèles réseau. La deuxième génération (années 70) englobe des modèles
plus évolués à l’instar des modèles Entité/Association, relationnel et réseau
sémantique. La troisième génération (années 90) a vu l’émergence des modèles
pour des données plus complexes, ce sont les modèles objet.
A. Le modèle hiérarchique
Structure de données exprimée à l’aide d’une hiérarchie arborescente à plusieurs
niveaux. Chaque niveau est constitué par un ou plusieurs groupes de données,
pouvant se décomposer, à leur tour, en groupes de données ou en données
élémentaires (feuilles de l’arborescence).Comme illustré dans la figure ci-dessous.

5
La première difficulté est que ce modèle ne permet pas de représenté les
associations plusieurs à plusieurs. Par conséquent, le concepteur doit choisir de
représenter la relation entre employé et projet en un seul sens (association un à
plusieurs : un employé réalise un ou plusieurs projet). Une autre difficulté de ce
modèle consiste en la dépendance entre la structure hiérarchique et la formulation
des chemins d’accès (pour accéder à un segment (niveau) il faut accéder d’abord à
son segment supérieur). Par conséquent, les opérations de recherche et de mise à
jour deviennent plus complexes, d’autant plus avec un mauvais schéma conceptuel.
B. Le modèle réseau
Le premier objectif de ce modèle est de régler le problème de dépendance entre les
nœuds parent-fils rencontré dans le modèle hiérarchique. Le modèle réseau est une
extension du modèle hiérarchique dont les liens entre objets peuvent exister sans
restriction. L’exemple précédant décrivant la relation employé-projet est
représenté par le modèle réseau de la figure ci –dessous : Pour créer un lien M-N
on peut le faire indirectement : utiliser un enregistrement intermédiaire avec deux
liens 1-N. l’enregistrement intermédiaire est créé en utilisant les données
d’intersection si elles existent. Il possédant comme clé la concaténation des clés des
enregistrements composant le lien (le lien avant transformation ; le lien M-N).
Pour définir la relation M-N entre employé et projet, d’abord on crée
l’enregistrement intermédiaire « EMP-PROJET» puis on crée deux liens (de type
1-N) pour relier projet et employé à « EMP-PROJET ». Ce nouvel enregistrement
possède comme clé la concaténation des clés des enregistrements composants le
lien.

C. Le modèle Entité/Association
Le modèle Entité / Association décrit les données par un formalisme plus proche
de la réalité.
Remarque : Le modèle Entité /Association sera détaillé dans la section 4.
D. Le modèle relationnel
Le modèle relationnel est la tendance des bases de données actuelles. Il est basé
sur des principes mathématiques ce qui facilite sa compréhension et il est
indépendant des détails d’implémentation. Le modèle relationnel se base sur les
trois aspects suivants :
6
appelées relations. Dans cette structure on trouve un ensemble de concepts comme
attributs, tuple, clé primaire,….etc.
ecter un ensemble de contraintes
d’intégrité.

est de générer de nouvelles tables à partir des tables existantes.

DEPARTEMENT, PROJET, EMPLOYE, EMP-PROJET sont les relations. Les


lignes dessinées sont les liens entre les relations.
Remarque : Le modèle relationnel sera détaillé dans le chapitre 2.

4. Le modèle Entité/Association (E /A)


Le modèle Entité / Association décrit les données par un formalisme plus proche
de la réalité. Le modèle E/A est un modèle de conception de données (MCD), chargé
de représenter sous forme graphique les informations manipulées par le système
(l’entreprise). Dans le modèle E/A, la base de données est représentée par un
ensemble d’entités, leurs propriétés (attributs), les associations entre les entités et
les contraintes auxquelles elles sont soumises.
4.1 Concepts de base
Le modèle E/A est un formalisme graphique pour la modélisation de données dont
les concepts sont simples :
• Entité → objet
• Association → Liens entre les entités (objets)
• Propriétés → l’attribut, donnée associées à la classe d’entité
• Regroupement des objets de même nature → classe d’entité
→ Classe d’association

7
• Il y a plusieurs représentations des entités -associations, nous utilisons la
méthode dérivée de UML (OMT).
• Ces informations sont regroupées dans un dictionnaire des Données (DD)
• Objectifs du MCD : identifier, décrire (par des informations) et modéliser les
entités et leurs associations à l’aide d’une représentation graphique.
A. Entité et Entité type
-Une entité est un objet, une personne, un lieu, …, une chose, identifiable sans
ambiguïté donc d’une façon unique et qui a une existence propre.
Exemple : le cinéma Djurdjura, l’acteur Athmane Aliouate, film « Carnaval fi
Dachra ».
-Une entité type ou classe d’entité c’est un regroupement d’entité de même nature
(décrite de la même manière).
Exemple : Cinéma, Acteurs, Films, etc.
Graphiquement, les entités sont présentées par des rectangles avec nom de l’entité
type avec ou sans l’ensemble des propriétés descriptives.

Non de l’entité type Ou Non de l’entité type


Propriétés
descriptives

B. Association / Association type


-Une Association est un lien entre deux ou plusieurs entités. Elle n’a pas
d’existence propre.
Exemple : Athmane Aliouate joue dans le film « Carnaval fi Dachra »
-Association type ou classe d’association est un lien entre deux ou plusieurs classes
d’entités.
Exemple : Jouer (entre FILMS et ACTEURS), Affiche (entre CINEMA et FILMS),
Réalise (entre REALISATEUR et FILMS).
Chaque entité joue un rôle dans une association. Le formalisme graphique d’une
classe d’association est un ovale avec son nom.

8
C. Propriété- Attribut
Une propriété est une donnée élémentaire que l’on perçoit sur une entité ou une
association.
Exemple : Les propriétés Nom, Prénom, pour la classe d’entités ACTEURS.
➢ Dans le graphique on ne représente pas la valeur mais le type.

➢ Le type de valeur ou le domaine d’un attribut est la spécification de toutes les


valeurs possibles que peut prendre un attribut.
• Dans les associations, l’attribut doit obligatoirement relier les entités.
• Une propriété (attribut) peut-être :
o Monovaluée : nom, c’est une composante atomique.
o Composée ; adresse=ville, rue, numéro, code-postal → multivaluée
• La valeur de l’attribut est son occurrence.
• Un attribut est constitué de :
o D’un identifiant qui sert d’identifiant à l’ensemble des attributs
o De propriétés qui sont les attributs hors identifiant
Exemple : Les propriétés : Nom, Prénom, pour l’entité Acteur.

D. Identifiant
Chaque occurrence doit pouvoir être repérée de manière unique et sans ambiguïté,
pour être distinguée de toutes les autres par l’Identifiant. Celui-ci est une propriété
(respect. Classe de propriétés) ou groupe de propriétés (respect. Classe de
propriétés) dont la valeur identifie sans ambiguïté une entité ou (respect. Classe
d’entités).
Graphiquement l’identifiant est souligné. Nous distinguons tout de même :
-Identifiant d’une classe d’entité :
 Attributs ou groupe d’attributs qui permet de repérer une occurrence de
manière unique.
 Un seul identifiant.
 On privilégie l’identifiant le plus court, le plus naturel (n° bon de commande,
n° étudiant,…)
 On peut créer un identifiant artificiel (n° client) par commodité.

9
 Identifiant non variable dans le temps.

Dans l’exemple de la figure, Nom et titre sont les identifiants des entités "Acteur"
et "film". Prénom et année sont des propriétés des entités "Acteur" et "film".
-Identifiant d’une association :
Implicite, obtenu en juxtaposant les identifiants des entités qui participent à la
liaison. Dans l’exemple de la figure suivante ; NumActeur et NumFilm est
l’identifiant de l’association JOUE.

E. Contraintes d’intégrité
-Contraintes d’intégrité statiques : décrivent les états valides.
Exemple : -Le prix unitaire doit être supérieur à 0.
-Toute commande doit avoir au moins un détail.
- Contraintes d’intégrité dynamiques : spécifient des changements d’états valides.
Exemple : -On ne peut pas augmenter le prix d’un produit de plus de 5%.
-Le changement d’état civil permet de passer de « Célibataire » à
« Marié », mais pas de « célibataire » à « Veuf » ou à « Divorcé ».

10
4.2 Cardinalité des rôles dans les associations
- Une association permet de relier une ou plusieurs entités. Le rôle détermine la
façon dont les entités sont reliées.
- La cardinalité indique le nombre d’occurrence entre une entité et une association.
- 4 types d’associations :
– association type (0,1) : une entité de A peut être reliée à aucune ou à une
seule entité de B

– association type (1,1) : une entité de A est reliée à une seule entité de B

– association type (O, N) : une entité de A peut être reliée à aucune ou à


plusieurs entités de B

- association type (1, N) : une entité de A peut être reliée à une ou plusieurs
entités de B
Le rôle d’une association est défini par deux nombres (min, max) représentant le
nombre de fois minimum et le nombre de fois maximum qu’une entité participe à
une association.
-Les valeurs possibles sont : (0,1), (1,1), (0,N), (1,N)

Min,Max Min,Max

-Min : Correspond à la réponse à la question : combien de fois au moins une entité


de A est reliée à une entité de B.
-Max : Correspond à la réponse à la question : combien de fois au plus une entité
de A est reliée à une entité de B.

11
- Attention ces questions, il faut les poser dans les deux sens de A vers B puis de B
vers A.
Exemple : Soit le modèle entité / association suivant :

Les cardinalités s’interprètent de la manière suivante :


 Acteurs vers Films (1,n) :
- (1) un acteur a joué dans au moins un film.
- (n) un acteur peut avoir joué dans plusieurs films.
 Films vers Acteurs (0,n) :
- (0) : un film n’ayant pas d’acteurs, possible si c’est un film documentaire.
- (n) : un film peut avoir plusieurs acteurs.
 Films vers Réalisateurs (1,1) :
- (1) Un film a au moins un réalisateur.
- (1) Il y a au plus un réalisateur (max=1) → Un film a un seul réalisateur (le cas
général).
 Réalisateurs vers Films (1,n) :
- (1) Un réalisateur a réalisé au moins un film.
- (n) Un réalisateur peut avoir réalisé plusieurs films.
 Films vers CINEMA (1,n) :
- (1) Un film était au moins à l'affiche d’un cinéma.
- (n) Un film peut être à l'affiche d’un cinéma.
 CINEMA vers Films (1,n) :
- (1) Un cinéma a au moins un film à projeter.
- (n) Un cinéma peut avoir plusieurs films à projeter.

12
4.3 Démarche de conception
-Identifier les entités les plus naturelles (sujets, compléments)
-Identifier les associations entre ces entités (verbes)
-Identifier les attributs et les identifiants de ces entités et de ces associations.
-Exprimer les cardinalités et les rôles (distinguer le singulier du pluriel)
-Enumérer des CI (Contraintes d’Intégrité)
Exemple d’application : Gestion d’une maison d’édition de livre
Un éditeur souhaite installer une base de données pour mémoriser les données
suivantes :
- Les livres sont identifiés par leur ISBN2. Un livre possède un titre et un prix
de vente. Il est écrit par un ou plusieurs auteurs.
- Chaque livre est tiré en une ou plusieurs éditions, datées et identifiées par
leur ordre (première édition, seconde édition, etc).
- Chaque édition comporte un certain nombre d’exemplaires.
- Les auteurs sont identifiés par leur nom et prénom et peuvent avoir un
pseudonyme. Pour chaque livre, un auteur perçoit des droits d’auteur,
calculés comme un pourcentage du prix de vente (il est aussi fonction du
nombre d’auteurs, du tirage, etc).
- Les librairies (identifiés par leur noms et adresses) peuvent envoyer des
commandes d’un ou plusieurs livres en quantité quelconque.

Elaborez le schéma Entité/Association pour la base de données de la maison


d’édition.

2 ISBN : International Standard Book Number ; c’est un identifiant unique attribué à chaque
édition d’un livre, le distinguant ainsi des autres éditions.

13
Règles de complétude
-Chaque classe d’objets (entité, association, attribut) doit posséder toutes les
propriétés requises par le modèle E/A
-Pour une entité
— Un nom
— Une liste d’attributs
— Un identifiant
-Pour une association
— Un nom
— La liste des entités qui participent à l’association
— Les rôles et leur cardinalité
— La liste des attributs (éventuellement)

5. Avantages et inconvénients du modèle E/A


Le modèle Entité/Association est simple et pratique.
1. Il n’y a que 3 concepts : entités, associations et attributs.
2. Il est approprié à une représentation graphique intuitive, même s’il existe
beaucoup de conventions.
3. Il permet de modéliser rapidement des structures pas trop complexes.
Il y a malheureusement plusieurs inconvénients. Tout d’abord il est non-
déterminisme : il n’y a pas de règle absolue pour déterminer ce qui est entité,
attribut ou relation.
-Une association pouvait être transformée en entité. Un des principaux
inconvénients du modèle E/A reste sa pauvreté : il est difficile d’exprimer des
contraintes d’intégrité, des structures complexes. Beaucoup d’extensions ont été
proposées, mais la conception de schéma reste en partie matière de bon sens et
d’expérience. On essaie en général :
1. de se ramener à des associations entre 2 entités : au-delà, on a probablement
intérêt à transformer l’association en entité ;
2. d’éviter toute redondance : une information doit se trouver en un seul endroit ;
3. Enfin – et surtout – de privilégier la simplicité et la lisibilité, notamment en ne
représentant que ce qui est strictement nécessaire.
Dans le cadre des bases de données, le modèle E/A est utilisé dans la phase de
conception. Il permet de spécifier la structure des informations qui vont être
contenues dans la base et d’offrir une représentation abstraite indépendante du
modèle logique qui sera choisi ensuite. Le modèle E/A a cependant l’inconvénient
majeur de ne pas proposer d’opérations sur les données.

14
Chapitre 2 :
Concepts de base des bases
de données

15
1. Introduction aux bases de données
Dans le premier chapitre, nous avons constaté que les données stockées sur les
fichiers soulèvent de gros problèmes :
1. Lourdeur d’accès aux données. En pratique, pour chaque accès, même le plus
simples, il faudrait écrire un programme.
2. Manque de sécurité. Si tout programmeur peut accéder directement aux fichiers,
il est impossible de garantir la sécurité et l’intégrité des données.
3. Pas de contrôle de concurrence. Dans un environnement où plusieurs
utilisateurs accèdent au même fichier, des problèmes de concurrence d’accès se
posent.
D’où le recours à un logiciel chargé de gérer les fichiers constituant une base de
données, de prendre en charge les fonctionnalités de protection et de sécurité et de
fournir les différents types d’interface nécessaires à l’accès aux données. Ce logiciel
(le SGBD) est très complexe et sa tâche principale consiste à masquer à
l’utilisateur les détails complexes et fastidieux liés à la gestion de fichiers. D’où la
définition suivante :
Un Système de Gestion de Bases de Données (SGBD) est un logiciel de haut niveau
qui permet de manipuler les informations stockées dans une base de données.
La complexité d’un SGBD est essentiellement issue de la diversité des techniques
mises en œuvre, de la multiplicité des composants intervenant dans son
architecture, et des différents types d’utilisateurs (administrateurs,
programmeurs, non informaticiens, ...) qui sont confrontés, à différents niveaux,
au système.
A. Architecture d’un SGBD
L’architecture des SGBD a évolué depuis les premiers systèmes monolithiques, où
tout le logiciel SGBD était un système fortement intégré, vers des logiciels SGBD
qui sont conçus de façon modulaire, avec une architecture système client-serveur.
Cette évolution reflète les tendances dans les systèmes informatiques, où les gros
ordinateurs mainframes centralisés sont entrains d’être remplacés par des
centaines de stations de travail et d’ordinateurs personnels qui sont connectés par
un réseau de communication.
La plupart des SGBD suivent l’architecture ANSI/SPARC (cf. figure 1) qui permet
d’isoler les différents niveaux d’abstraction nécessaires pour un SGBD. Elle est
définie sur trois niveaux :
– Niveau interne ou physique : décrit le modèle de stockage des données et les
fonctions d’accès.
– Niveau logique ou modèle conceptuel : Définition de la structure de données :
Langage de Description de Données (LDD) ; Consultation et Mise à Jour des
données : Langages de Requêtes (LR) et Langage de Manipulation de Données
(LMD) ; Gestion de la confidentialité (sécurité) ; Maintien de l’intégrité ;
– Niveau externe : Vues ; Environnement de programmation (intégration avec un
langage de programmation) ; Interfaces conviviales et Langages de 4e Génération
(L4G) ; Outils d’aides (e.g. conception de schémas) ; Outils de saisie, d’impression
d’états.

16
Figure 1 : L’architecture standard ANSI/SPARC de SGBD
Le SGBD doit être capable de faire des transformations entre chaque niveau, de
manière à transformer une requête exprimée en termes du niveau externe en
requête du niveau conceptuel puis du niveau physique.
B. Objectifs et avantages d’un SGBD
Que doit permettre un SGBD ?
Décrire les données
Indépendamment des applications (de manière intrinsèque)
⇒ Langage de définition des données (DATA DEFINITION LANGUAGE (DDL))
Manipuler les données
-Interroger et mettre à jour les données sans préciser d’algorithme d’accès.
-Dire QUOI sans dire COMMENT
-Langage de requêtes déclaratif :
Exemple : quels sont les noms des produits de prix < 1000 da?
⇒ Langage de manipulation des données (DATA MANIPULATION LANGUAGE
(DML))
Contrôler les données
-Intégrité : vérification de contraintes d'intégrité.
Exemple : le salaire doit être compris entre 30000 da et 50000 da
-confidentialité : contrôle des droits d'accès, autorisation
⇒ Langage de contrôle des données (DATA CONTROL LANGUAGE (DCL))

17
Partage
-Une BD est partagée entre plusieurs utilisateurs en même temps
⇒ contrôle des accès concurrents
-Notion de transaction
L'exécution d'une transaction doit préserver la cohérence de la BD
Sécurité
Reprise après panne, journalisation
Performances d'accès
Index (hashage, arbres balancés ...)
Indépendance physique
Les disques, les méthodes d’accès, les modes de placement, le codage des données
ne sont pas apparents ; Le SGBD offre une structure canonique permettant la
représentation des données réelles sans se soucier de l’aspect matériel du système.
Ainsi, on peut changer le schéma physique sans remettre en cause le schéma
conceptuel (et les schémas externes). On peut modifier l’organisation physique des
fichiers, rajouter ou supprimer des méthodes d’accès.
Indépendance logique
Permettre aux différentes applications d’avoir des vues différentes des mêmes
données.
Permettre aux administrateurs de bases de données (DBA) de modifier le schéma
logique sans que cela ait de répercussion au niveau des applications.
Exemple : Soit la base de données suivante :
Véhicule (num-véhicule, marque, type, couleur)
Personne (num-ss, nom, prénom)
Propriétaire (num-ss, num-véhicule, date-achat)
Le groupe de travail qui s’intéresse à l’assurance de véhicules ne doit pas être
déranger par la nouvelle application qui concerne la gestion des sinistres de
véhicules qui va nécessiter par exemple l’ajout de l’entité : Sinistre.
C. Que doit-on savoir pour utiliser un SGBD ?
L’utilisation d’un SGBD suppose de comprendre (et donc de savoir utiliser) les
fonctionnalités suivantes :
1. Définition du schéma de données en utilisant les modèles de données du SGBD.
2. Opérations sur les données : recherche, mises-à-jour, etc.
3. Partager les données entre plusieurs utilisateurs. (Mécanisme de transaction).

18
4. Optimiser les performances, par le réglage de l’organisation physique des
données. Cet aspect relève plutôt de l’administration et ne sera évoqué que dans
l’introduction.
Reprenons dans l’ordre ces différents points.
Définition du schéma de données
Un schéma est simplement la description des données contenues dans la base.
Cette description est conforme à un modèle de données qui propose des outils de
description (structures, contraintes et opérations).
En fait, dans un SGBD, il existe plusieurs modèles plus ou moins abstraits des
mêmes objets tel que :
– Le modèle conceptuel : la description du système d’information
– Le modèle logique : interface avec le SGBD
– Le modèle physique : fichiers.
Ces différents modèles correspondent aux niveaux dans l’architecture d’un SGBD.
Prenons l’exemple du modèle conceptuel le plus courant : le modèle
Entité/Association. C’est essentiellement une description très abstraite qui
présente les avantages suivants :
– l’analyse du monde réel
– la conception du système d’information
– la communication entre différents acteurs de l’entreprise
En revanche, il ne propose pas d’opérations. Or définir des structures sans disposer
d’opérations pour agir sur les données stockées dans ces structures ne présente pas
d’intérêt pratique pour un SGBD. D’où, à un niveau inférieur, des modèles dits
“logiques” qui proposent :
1. Un langage de définition de données (LDD) pour décrire la structure, incluant
des contraintes.
2. Un langage de manipulation de données (LMD) pour appliquer des opérations
aux données.
Ces langages sont abstraits : le LDD est indépendant de la représentation physique
des données, et le LMD est indépendant de l’implantation des opérations. On peut
citer une troisième caractéristique : outre les structures et les opérations, un
modèle logique doit permettre d’exprimer des contraintes d’intégrité sur les
données.
Les opérations sur les données
Il existe 4 opérations classiques (ou requêtes) :
1. La création (ou insertion).
2. La modification (ou mise-à-jour).
3. La destruction.
19
4. La recherche.
Ces opérations correspondent à des commandes du LMD. La plus complexe est la
recherche en raison de la variété des critères.
Pour l’utilisateur, une bonne requête a les caractéristiques suivantes. Tout d’abord
elle s’exprime facilement : l’idéal serait de pouvoir utiliser le langage naturel, mais
celui-ci présente trop d’ambiguïtés. Ensuite le langage ne devrait pas demander
d’expertise technique (syntaxe compliquée, structures de données, implantation
particulière ...). Il est également souhaitable de ne pas attendre trop longtemps (à
charge pour le SGBD de fournir des performances acceptables). Enfin, et peut-être
surtout, la réponse doit être fiable.
Une bonne partie du travail sur les SGBD consiste à satisfaire ces besoins. Le
résultat est ce que l’on appelle un langage de requêtes, et constitue à la fois un
sujet majeur d’étude et une caractéristique essentielle de chaque SGBD. Le
langage le plus répandu à l’heure actuelle est SQL.
Optimisation
L’optimisation (d’une requête) s’appuie sur l’organisation physique des données.
Les principaux types d’organisation sont les fichiers séquentiels, les index (denses.
secondaires, arbres B) et le regroupement des données par hachage.
Un module particulier du SGBD, l’optimiseur, tient compte de cette organisation
et des caractéristiques de la requête pour choisir le meilleur séquencement des
opérations.
Concurrence d’accès
Plusieurs utilisateurs doivent pouvoir accéder en même temps aux mêmes
données. Le SGBD doit savoir :
– Gérer les conflits si les deux font des mises-à-jour.
– Offrir un mécanisme de retour en arrière si on décide d’annuler des modifications
en cours.
– Donner une image cohérente des données si l’un fait des requêtes et l’autre des
mises-à-jour.
Le but : éviter les blocages, tout en empêchant des modifications anarchiques.
D. Exemples de SGBD relationnels
Le modèle relationnel est le plus implémenté et le plus stable des modèles
actuellement utilisés. Il existe plusieurs SGBD, parmi les plus connus, nous
pouvons citer :
• Oracle : domine le marché des systèmes de gestion de base de données
relationnelle (SGBDR). Selon le classement DB-Engines, Oracle est le premier des
380 meilleurs SGBDR, devant MySQL et Microsoft SQL Server.

20
• MYSQL : proposé en open source et gratuitement pour les individus et les
entreprises. Les petites entreprises et les startups l’apprécient particulièrement
pour sa gratuité, et de nombreuses applications Open Source l’utilisent également.
• MariaDB : est un fork du MySQL légèrement plus rapide que MySQL en termes
de réplication et de requêtes.
• PostgreSQL : est le principal concurrent de MySQL. Il s’agit là encore d’un
système de base de donnée open source, utilisé par de nombreuses startups pour
sa gratuité. Ce système est compatible avec tous les principaux OS tels que mac
OS, Windows et linux. Contrairement à d’autres systèmes comme SQL Server,
PostgreSQL met un point d’honneur à suivre la syntaxe SQL standard ce qui
facilite grandement son apprentissage.
• SQLite : est une bibliothèque écrite en langage C qui propose un moteur de base
de données relationnelle accessible par le langage SQL. Contrairement aux
serveurs de bases de données comme MySQL ou PostgreSQL, sa particularité est
de ne pas reproduire le schéma habituel client-serveur mais d’être directement
intégrée aux programmes. L’intégralité de la base de données (déclarations, tables,
index et données) est stockée dans un fichier indépendant de la plateforme.
•SQL Server : Pour son système d’exploitation Windows, Microsoft propose son
propre système de gestion de base de données SQL appelé SQL Server. Ce système
est utilisé dans les logiciels grand public et sur les serveurs web fonctionnant sur
Windows, ce qui lui confère une large base d’utilisateurs.
• MSSQL Server
• DB2

2. Le modèle relationnel
Le modèle relationnel, venant après les modèles hiérarchique et réseau, offre une
totale indépendance entre les représentations logique et physique.
Un des grands avantages du modèle relationnel est sa très grande simplicité. Il
n’existe en effet qu’une seule structure, la relation. Une relation peut simplement
être représentée sous forme de table, comme sur la figure 2. Une relation a donc
un nom (Film) et se compose d’un ensemble de colonnes désignées par un nom
d’attribut. Dans chaque colonne on trouve des valeurs d’un certain domaine
(chaînes de caractères, nombres). Enfin on constate que chaque ligne (ou tuple)
correspond à une entité (ici des films).

21
Figure 2 : une relation (table) « Film »

A. Terminologies
Voici maintenant quelques précisions sur la terminologie introduite ci-dessus.
Relation
Une table avec des colonnes et des lignes.
Domaines
Un domaine de valeurs est un ensemble d’instances d’un type élémentaire.
Exemple : les entiers, les réels, les chaînes de caractères, etc. La notion de ’type
élémentaire’ s’oppose à celle de type structuré : il est interdit en relationnel de
manipuler des valeurs instances de graphes, de listes, d’enregistrements, etc. En
d’autres termes le système de types est figé et fourni par le système.
Attributs
Les attributs nomment les colonnes d’une relation. Ils servent à la fois à indiquer
le contenu de cette colonne, et à la référencer quand on effectue des opérations. Un
attribut est toujours associé à un domaine. Le nom d’un attribut peut apparaître
dans plusieurs schémas de relations.
Tuple
Une ligne dans une relation
Schéma de relation
Un schéma de relation est simplement un nom suivi de la liste des attributs,
chaque attribut étant associé à son domaine. La syntaxe est donc :
R(A1 : D1 , A2 : D2 , …. , An : Dn )
où les Ai sont les noms d’attributs et les Di , les domaines. L’arité d’une relation est
le nombre de ses attributs.
Exemple : Le schéma de la relation de la figure 2 est donc : Film (titre : string,
année : number, genre : string)

22
On peut trouver dans un schéma de relation plusieurs fois le même domaine, mais
une seule fois un nom d’attribut. Le domaine peut être omis en phase de définition.
Instance de relation (occurrence)
Ensemble des tuples d’une relation.
Dégrée
Nombre d’attributs d’une relation.
Exemple : dans l’exemple de la figure 2, le dégrée est 3 (titre, année, genre).
Cardinalité
Nombre de tuples d’une relation.
Exemple : dans l’exemple de la figure 2, la cardinalité est de 4.
B. Les différentes clés d’une relation (relations)
De manière informelle, une clé est un ensemble minimum d’attributs dont la
connaissance des valeurs permet d’identifier un enregistrement unique de la
relation considérée. Une clé est invariante dans le temps. En général, il existe
plusieurs clés pour une même relation R. Parmi les clés possibles, on choisit une
clé qui sera appelée clé primaire. Lors de la définition d’un schéma cette clé est
mise en évidence (soulignement).
Clé primaire
Identifiant dans une table. Attribut permettant d’identifier chaque occurrence
(enregistrement) d’une table de marinière unique. Ou encore attribut permettant
d’identifier chaque ligne d’une table d’une manière unique.
Clé candidate
Ensemble minimum d’attributs qu’identifie de façon unique un tuple au sein d’une
relation.
Clé étrangère
Une clé étrangère d’une relation est formée d’un ou plusieurs de ses attributs qui
constituent une clé candidate dans une autre relation.
Exemple : Soit le schéma relationnel suivant :
Etudiant (Num-etud, num-ss, nom, prénom, dateNai, Num-dep)
Département (Num-dep, libellé, Campus-de-localisation)
 Num-etud, num-ss sont a priori des clés candidates et à l’université on
choisit le Num-etud comme clé primaire
 Num-dep est une clé étrangère dans la table étudiant
C. Problème de redondance de données
La redondance est la répétition des informations et l’un des objectifs des SGBD est
(de nous permettre) de représenter les données avec le moins de redondance

23
possible. Dans la table ouvrage suivante, l’auteur « Henri Tanenbaum » est répété
deux fois dans la table.

Figure 3 : Table OUVRAGES


Pour éliminer les répétitions nous allons dans un premier temps construire une
table auteur comportant tous les auteurs. La table auteur est décrite par
AUTEURS (NumAuteur, NomAuteur, PrénomAuteur). Nous avons rajouté
l’attribut NumAuteur pour représenter la clé NumAuteur est un numéro qui peut
être donné automatiquement par le SGBD.

Figure 4 : Table Auteurs


La table OUVRAGES peut se réduire à cela

Figure 5 : Table ouvrages

24
Cette représentation nous permet effectivement de réduire la table OUVRAGES il
n y a que le numéro de l’auteur au lieu du nom et du prénom, mais Il y a toujours
des redondances. La redondance provient du fait qu’un OUVRAGE peut avoir
plusieurs auteurs.
Pour éliminer ces redondances, nous allons construire une table ECRIT qui permet
de relier les OUVRAGES et leurs AUTEURS. Rappelons qu’un des intérêts d’un
SGBD est sa possibilité de créer des liens entre les objets.
Le schéma de la table ECRIT est : ECRIT (cote, NumAuteur), il suffit donc de
prendre les clés primaires des tables OUVRAGES et AUTEURS et former une
nouvelle table, en l’occurrence ECRIT.

Figure 6 : Table ECRIT


La base de données décrivant les OUVRAGES sera composée des tables suivantes :
AUTEURS (NumAuteur, Nom, Prénom)
OUVRAGES (cote, Titre, NbExemplaire, Année, Editeur, Thème)
ECRIT (cote, NumAuteur)
Noter que nous avons supprimé l’attribut NumAuteur de la table OUVRAGES.
Les attributs cote et NumAuteur de la table ECRIT proviennent en fait
respectivement des tables OUVRAGES et AUTEURS. Ces deux Attributs sont clés
primaires dans chacune de ces tables.
 Dépendance fonctionnelle (DF)
Une dépendance est une contrainte à faire respecter par les données (donc aux
attributs d’une relation) exprimée sous forme de règle.
Soit R(A1, A2, ...., An) un schéma de relation. X et Y des sous-ensembles de
{A1,A2,...An). On dit que Y dépend fonctionnellement de X (X->Y) si à chaque
valeur de X correspond une valeur unique de Y.
On écrit : X → Y. On dit que : X détermine Y
Exemple : -PRODUIT (no_prod, nom, prixUHT)
-no_prod → (nom, prixUHT)

25
-NOTE (no_contrôle, no_élève, note)
-(no_contrôle, no_élève) → note
 Dépendance fonctionnelle élémentaire (DFE)
La dépendance fonctionnelle élémentaire relie deux attributs dans une base de
données relationnelle ou la valeur d’un attribut détermine de manière unique la
valeur d’un autre attribut.
Une DF X → Y avec X ne contenant pas Y est une DFE ssi il n’existe aucun sous –
ensemble X1 de X ayant une DF sur Y.
Exemple : Soit une table « Employé » avec les attributs « ID » et « Nom ». Si nous
avons la dépendance fonctionnelle suivante : ID→Nom. Cela signifie que
l’identifiant unique d’un employé détermine son nom de manière unique. En
d’autres termes, si vous connaissez l’ID d’un employé, vous pouvez déterminer son
nom sans ambiguité ;

Remarque : -X est une clé de R ssi : X →Y, Z sont des DFE


-A est attribut clé s’il appartient à au moins une clé de R.
-A est attribut non clé s’il n’appartient pas à une clé de R.
 Normalisation
En conception de bases de données, la normalisation des données est une méthode
systématique utilisée pour réduire la redondance des données et améliorer
l'intégrité des données. Il s'agit d'organiser et de structurer les données selon des
règles spécifiques appelées formes normales. Ces règles aident les concepteurs de
bases de données à créer des schémas qui facilitent l'accès aux données, améliorent
la cohérence et limitent les erreurs d'insertion, de mise à jour et de suppression.
Pour bien comprendre le fonctionnement de la normalisation des données, prenons
l'exemple d'une base de données contenant des informations sur les ouvrages et
leurs auteurs (voir la figure 7).

Figure 7 : BD contenant des informations sur les ouvrages et leurs auteurs

26
La section de la base de données présentée en figure 7 est un exemple de mauvaise
conception de la base de données. A première vue, il est évident que le tableau
montre de redondances. En outre, les valeurs de la colonne Acteurs contiennent
des données multivaleurs. C’est ce qu’on appelle une base de données
dénormalisée. En d’autres termes, il ne suit pas les règles de normalisation des
bases de données.
Le principal inconvénient des bases de données dénormalisées est l’augmentation
des besoins en mémoire en raison des valeurs redondantes. De plus, les attributs
qui contiennent des données à valeurs multiples sont difficiles à lire et ne sont pas
facilement reliés entre eux.
Exemple : Les informations de la colonne Acteurs ne sont pas séparées (le nom et
le prénom) donc la base de données ne peut pas distinguée entre le nom et le
prénom.
Afin d’éviter les plages de valeurs dupliquées et à valeurs multiples, trois formes
normales (1FN, 2FN, 3FN) séquentielles de base de données ont été développés
pour les modèles de bases de données relationnelles.
Remarque : La normalisation est la conversion d’une table de base de données à
un degré plus élevé de forme normale. La conversion à un moindre degré de forme
normale est appelée dénormalisation.
Normalisation de base de données : exemples de reconfiguration
Pour illustrer la conversion d’une base de données relationnelle en la première, la
deuxième et la troisième forme normale, nous passerons en revue les différentes
étapes de la normalisation des bases de données relationnelles en utilisant les
données du tableau de la figure 7 comme exemple.
Première forme normale (1NF)
Une table dans une base de données relationnelle répond à la première forme
normale (1NF) lorsqu’elle remplit les critères suivants :
• Toutes les données sont atomiques.
• Toutes les colonnes du tableau contiennent des valeurs identiques.
D’où :
1. La division de toutes les données multivaleurs en colonnes séparées.
2. La vérification de la similitude des valeurs de chaque colonne.
Remarque : Un ensemble de données est considéré comme atomique si chaque
élément d’information est affecté à un champ de données distinct.

Dans le tableau de la figure 7, les données de la colonne Auteurs ne sont pas


atomiques. Diviser la colonne Auteurs en deux colonnes séparées : NomAuteur et
PrénomAuteur.
Le résultat (voir la figure 3) est un tableau conforme à la première forme normale,
mais qui ne sera pas traité efficacement en raison des doubles valeurs. Il est alors

27
recommandé de convertir la table à la deuxième forme normale pour éliminer les
redondances.
Deuxième forme normale (2NF)
Une table conforme à la deuxième forme normale doit satisfaire à toutes les
exigences de la première forme normale en plus de celles qui suivent :
• Chaque attribut non clé doit être entièrement fonctionnel, en fonction de la clé
primaire.
Pour convertir une table de base de données en la deuxième forme normale, vous
devez non seulement déterminer la clé primaire et tous les attributs non clés, mais
également leur relation les uns aux autres en suivant ces étapes :
1. Vérifiez si tous les attributs non clés dépendent entièrement de la fonction de la
clé primaire. Une telle dépendance n’existe que si tous les attributs clés primaires
sont nécessaires pour identifier de façon unique l’attribut non clé. Cela signifie
également que les tables avec clés primaires monobloc correspondent
automatiquement à la deuxième forme normale si toutes les conditions préalables
pour la première forme normale sont remplies.
2. Déplacez tous les attributs non clés qui ne dépendent pas entièrement
fonctionnellement de la clé primaire complète dans des tables séparées.
Exemple : Dans le tableau de la figure 3, les attributs non clés (editeur, théme,
Année, NbExem, titre) dépendent entièrement de la fonction de la clé primaire
Cote. NomAuteur et prénomAuteur des attributs non clés qui ne dépendent pas
entièrement de la fonction de la clé primaire donc déplacer NomAuteur et
PrénomAuteur dans une autre table nommée Acteur. Le résultat de cette
normalisation donne les deux figures 4 et 5.
Les données de l’exemple sont maintenant conformes à la deuxième forme normale.
Cependant, il n’a pas encore été possible d’éliminer complètement les redondances.
Le but de la normalisation est alors habituellement la troisième forme normale.
Troisième forme normale (3NF)
Si une table doit être convertie à la troisième forme normale, toutes les conditions
préalables de la première et de la deuxième forme normale doivent être remplies
ainsi que les conditions suivantes :
• Aucun attribut non clé ne peut dépendre de façon transitoire d’un candidat clé.
Une dépendance transitive se produit lorsqu’un attribut non clé dépend d’un autre
attribut non clé et donc indirectement de son candidat clé.
Pour supprimer toutes les dépendances entre les attributs non clés :
1- Déplacer les attributs pertinents dans des tables séparées,
2- Relier les tables entre elles par des clés étrangères.
Exemple : Dans la figure 5, NumAuteur est un attribut non clé qui dépend
indirectement de la clé primaire Cote. Déplacement de la clé Cote et de l’attribut

28
non clé NumAuteur dans une table nommée ECRIT comme est illustré dans la
figure 6.
Dans l’exemple, diviser une table en trois peut ne pas sembler très efficace. En
effet, les redondances dans les données de seulement deux auteurs sont de peu
d’importance. Mais imaginez que vous voulez traiter régulièrement plusieurs
centaines de milliers d’enregistrements d’auteurs ou d’ouvrages dans une base de
données relationnelle sans contradictions. Ceci n’est généralement possible
qu’avec une formule de base de données qui correspond à la troisième forme
normale.
D. Contrainte d’intégrité
Un schéma de base de données est un ensemble de schémas de relation S= { R1,
R2,….. Rn} et un ensemble de contraintes d’intégrité CI. Une contrainte d’intégrité
est une propriété du schéma, invariante dans le temps. Il existe différents types de
contraintes d’intégrité :
 Liées au modèle (pas de doublons dans une relation)
 De domaine (nb-heure < 100, pas de valeur nulle pour la clé primaire)
 Référentielles dites de clé étrangère qui impose que la valeur d’attribut de
la relation R1 apparaissent comme valeur de clé dans une autre relation
R2. Cette contrainte implique un ordre dans la création ou la destruction
des relations, puisqu’on ne peut créer dans l’étudiant par exemple si le n-
uplet correspondant à son département n’a pas été créé dans la relation
département avant.
La plupart des contraintes ne sont pas supportées par le modèle de données et
doivent donc être codées par les programmeurs dans des programmes
d’application.
Les contraintes d’intégrité sont vérifiées (exécutées) à chaque mise à jour de la
base de données (ajout, suppression ou modification d’un tuple). Si, lors d’une mise
à jour une contrainte n’est pas satisfaite, cette mise à jour ne peut pas avoir lieu.

3. Passage d’un schéma E/A à un schéma relationnel


On passe donc d’un modèle disposant de deux structures (entités et associations) à
un modèle disposant d’une seule structure (relations). Logiquement, entités et
associations seront donc toutes les deux transformées en relations. La subtilité
réside en fait dans la nécessité de préserver les liens existant explicitement dans
un schéma E/A et qui semblent manquer dans le modèle relationnel. Dans ce
dernier cas on utilise en fait un mécanisme de référence par valeur basé sur les
clés des relations. Voici les règles à suivre pour passer d’un modèle E/A à un
schéma relationnel.
Règle 1 : transformation d’une entité
• Une entité devient une table
• Chaque ligne correspond à un enregistrement
• Chaque colonne correspond à un attribut (champ)

29
• L’identifiant devient la clé primaire de la table
• Le nom de l’entité devient le nom de la table
Exemple

Règle 2 – Les associations dont toutes les cardinalités sont de x,n


•Chaque association dont toutes les cardinalités associés aux entités qu’elles
relient sont de type 0,n ou 1,n devient une relation.
• Chaque attribut de l’association devient un attribut de la relation
•Les identifiants des entités reliées par l’association deviennent aussi des
attributs de la relation
• La clé primaire de l’association est composée des clés étrangères des relations
correspondant aux entités de part et autre de la relation
•Les éventuelles propriétés de l’association deviennent des attributs de la relation
Exemple

30
Règle 3 : Les associations dont au moins une cardinalité a un maximum de 1
•On ne crée pas de relation pour les associations ayant au moins une cardinalité
de maximum 1.
•Chaque attribut d’une telle association devient un attribut de la relation créée
pour l’entité associée avec la cardinalité 0,1 ou 1,1
• L’identifiant de chacune des autres entités devient un attribut de la relation
créée pour l’entité associée avec la cardinalité 0,1 ou 1,1 (l’identifiant de chacune
des autres entités est donc une clé étrangère).
•La clé de la relation créée pour l’entité associée avec la cardinalité 0,1 ou 1 ,1
reste celle de cette entité.
Exemple
• Une commande est passée par un seul client
• Un client peut n’avoir passé aucune commande
• On duplique dans la table COMMANDE, l’identifiant du CLIENT
• Commande est une entité faible car elle dépend de client
• Client est une entité forte

Exemple : Transformation du schéma Entité/Association du chapitre 1 page 10 à


un schéma relationnel.
— Modèle E/A — Modèle relationnel
— Association ; Entité —Table (relation)
— Propriété —Attribut
— Identifiant — Clé Primaire

31
Etape 1 : Toute classe d’entités du diagramme entité/association est représentée
par une relation dans le schéma relationnel équivalent. La clé de cette relation est
l’identifiant de la classe d’entités correspondante.

ACTEURS (NumActeur, Nom, prénom)

D’où :
ACTEURS (NumActeur, Nom, prénom)
FILMS (NumFilm, Titre, Metteur_en_scéne)
CINEMA ( NumCinéma, Nom, Adresse)
REALISATEURS (NumReal, Nom, Prénom)
Etape 2 : Toute classe d’association de cardinalité x,n est transformée en relation.
La clé de cette relation est composée de tous les identifiants des entités
participantes.

32
D’où :
JOUE (NumActeur, NumFilm, Rôle)
AFFICHE (NumFilm, NumCinema, Date)
Etape 3 (optimisation) : Toute classe d’associations reliée à une classe d’entités
avec une cardinalité de type 0,1 ou 1,1 peut être fusionnée avec la classe d’entités.
Dans ce cas on déplace les attributs de la classe d’associations vers ceux de la
relation traduisant la classe d’entités.
— Notre schéma peut être optimisé car il contient une association de type 1,1.
— Realise ce n’est pas une relation, donc déplacer Num-real à Film ;
D’où : FILMS (NumFilm, Titre, Metteur_en_scéne, NumReal#)
Résultat : le schéma final de la base de données est :
ACTEURS (NumActeur, Nom, prénom)
FILMS (NumFilm, Titre, Metteur_en_scéne, NumReal#)
CINEMA ( NumCinéma, Nom, Adresse)
REALISATEURS (NumReal, Nom, Prénom)
JOUE (NumActeur, NumFilm, Role)
AFFICHE (NumFilm, NumCinema, Date)

33
Chapitre 3: SQL
(Structured Query
Language)

34
A. Introduction
Chaque année, les entreprises modernes acquièrent de plus en plus de données de
toute nature. Elles doivent être capables d’analyser ces données afin de prendre de
bonnes décisions stratégiques ou opérationnelles. Grace à des requêtes SQL, il est
possible de manipuler de grandes bases de données et de leur donner du sens. C’est
pourquoi la maitrise du langage SQL est une tâche primordiale pour l’utilisation
et la manipulation des bases de données. Avec ce langage, il est possible de :
 Créer une base de données.
 Réaliser des tables dans une base de données.
 Interroger ou demander des informations à partir d’une base de données.
 Insérer des enregistrements dans une base de données.
 Mettre à jour ou modifier des enregistrements dans une base de données.
 Supprimer des enregistrements de la base de données.
 Définir les permissions ou le contrôle d’accès dans la base de données pour
la sécurité des données.
 Définir des vues pour éviter de taper des requetés complexes fréquemment
utilisées.

B. Origine et évolution du SQL


-Origine : SEQUEL (Structured English QUEry Language) développé par IBM3
pour le SGBD appelé SYSTEM R (au milieu des années 70)
-Implémenter dans de nombreux SGBD/ Oracle, MySQL, PostgreSQL, Access….
-plusieurs versions :
 SQL1 : initial ANSI4 --1986.
 SQL1 avec intégrité référentielle, ANSI—1989.
 SQL2 : ANSI –1992
 SQL3 ANSI , incorpore la notion d’objet—1999.
SQL est l’acronyme de Structured Query language. SQL est un langage
d’interrogation de base de données, supporté par la plupart des systèmes de gestion
de bases de données relationnelles du marché.

C. Organisation du langage
Le SQL permet de manipuler les données stockées dans une base de données,
d’effectuer des opérations telles que l’insertion, la mise à jour et la suppression de
schémas de base de données. SQL est largement utilisé dans le développement
d’applications web, le traitement des données et la gestion des systèmes
d’information.
Le SQL est donc :

3 IBM : International Business Machines Corporation


4 ANSI : American National Standard Institut

35
 Un DDL (Data Definition Language) comporte les instructions qui
permettent de définir la façon dont les données sont représentées. Il
comprend des instructions telles que CREATE (pour créer des tables et
d’autres objets de base de données), ALTER (pour modifier la structure
existante) et DROP (pour supprimer des objets de la base de données).
 Un DML (Data Manipulation Language) permet d’écrire dans la base et
donc de modifier les données. Il comprend des instructions telles que
SELECT (pour interroger les données), INSERT (pour insérer de nouvelles
lignes), UPDATE (pour mettre à jour des lignes existantes) et DELETE
(pour supprimer des lignes).
 Un DQL (Data Query Language) se concentre sur l’intérrogation des
données dans une BD. Il comprend des instructions telles que SELECT avec
differentes clauses telles que WHERE, ORDERBY, JOIN….
 Un DCL (Data Control Language), Cette partie du SQL est utilisée pour
gérer les autorisations d’accès aux données, Elle comprend des instructions
telles que GRANT (pour accorder des autorisations) et REVOKE (pour
révoquer des autorisations).

[1] Types SQL


La norme SQL ANSI propose un ensemble de types qui sont donnés dans le tableau
suivant :

-La norme SQL ANSI distingue deux catégories d’attributs numériques : les
numériques exacts, et les numériques flottants.
Types numériques exacts : Les types de la première catégorie (essentiellement
INTEGER et DECIMAL) permettent de spécifier la précision souhaitée pour un
attribut numérique, et donc de représenter une valeur exacte. Les numériques
flottants correspondent aux types couramment utilisés en programmation
(FLOAT, DOUBLE) et ne représentent une valeur qu’avec une précision limitée.

36
Le type INTEGER permet de stocker des entiers, sur 4 octets en général, mais la
taille du stockage n’est pas spécifiée par la norme. Il existe deux variantes du type
INTEGER : SMALLINT et BIGINT. Ces types différents par la taille utilisée pour
le stockage : voir le tableau .cette taille n’étant ici qu’à titre indicatif car elle peut
varier selon les systèmes.
Le type DECIMAL (M, D) correspond à un numérique de taille maximale M, avec
un nombre de décimales fixé à D. Le type NUMERIC est un synonyme pour
DECIMAL. Ces types sont surtout utiles pour manipuler des valeurs dont la
précision est connue, comme les valeurs monétaires. Afin de préserver cette
précision, les instances de ces types sont stockées comme des chaînes de caractères.
Les numériques flottants : Ces types s’appuient sur la représentation des
numériques flottants propre à la machine, en simple ou double précision. Leur
utilisation est donc analogue à celle que l’on peut en faire dans un langage de
programmation comme le C.
1. Le type FLOAT correspond aux flottants en simple précision.
2. Le type DOUBLE PRECISION correspond aux flottants en double précision. Le
raccourci DOUBLE est accepté.
3. Le type REAL est un synonyme pour DOUBLE.
-Caractères et chaînes de caractères
Les deux types principaux de la norme ANSI, disponibles dans la plupart des
SGBD relationnels, sont CHAR et VARCHAR. Ces deux types permettent de
stocker des chaînes de caractères d’une taille maximale fixée par le paramètre M.
Les syntaxes sont identiques. Pour le premier, CHAR(M), et pour le second
VARCHAR(M). La différence essentielle entre les deux types est qu’une valeur
CHAR a une taille fixée, et se trouve donc complétée avec des blancs si sa taille est
inférieure à M. En revanche une valeur VARCHAR à une taille variable et est
tronquée après le dernier caractère non blanc. Quand on veut stocker des chaînes
de caractères très longues (des textes, voire des livres), le type VARCHAR ne suffit
plus. La norme SQL propose un type BIT VARYING qui correspond à de très
longues chaînes de caractères. Souvent les systèmes proposent des variantes de ce
type sous le nom BLOB (pour Binary Long Object) ou LONG.
- Dates
Un attribut de type DATE stocke les informations jour, mois et année (sur 4
chiffres). La représentation interne n’est pas spécifiée par la norme. Tous les
systèmes proposent de nombreuses opérations de conversion (non normalisées) qui
permettent d’obtenir un format d’affichage quelconque. Un attribut de type TIME
stocke les informations heure, minute et seconde. L’affichage se fait par défaut au
format HH:MM:SS.
Le type DATETIME permet de combiner une date et un horaire, l’affichage se
faisant au format AAAA-MM-JJ HH:MM:SS.

37
[2] Conseils Généraux
✓ SQL n’est pas sensible à la casse, cependant il est conseillé d’utiliser les mots
réservés (commandes, le type de données …) en majuscules.
✓ Il ne faut pas oublier le point-virgule à la fin de chaque ligne de commande.
✓ Utiliser /* et */ pour mettre plusieurs lignes en commentaire.

✓ Utiliser des noms significatifs pour les objets que vous créez.

✓ Ne pas utiliser de mots réservés comme noms d’objets (tables, vue, colonne….).
✓ Mettre une clé primaire pour chacune des tables que vous créez.

✓ Si vous avez à contrôler l’intégrité référentielle, alors il faudra déterminer l’ordre


dans lequel vous allez créer vos tables.

Attention
Le langage n’est pas sensible à la casse mais les données le sont. (Patoche différent
de PATOCHE).

[3] Qu’est-ce dont on a besoin pour écrire et exécuter une commande


SQL
✓ Dans le cadre de ce cours, nous opterons pour l’utilisation du SGBDR MySQL du
logiciel WampServer qui regroupe les logiciel Apache, MySQL,PHP.
✓ Avant de commencer, nous allons d’abord créer notre base de données dans la
console du MySQL après son lancement à l’aide de la commande suivante :
CREATE DATABASE DATABASE_NAME ;

✓ Afficher les bases de données qui existent dans le SGBDR MySQL en utilisant
cette commande :
SHOW DATABASES ;

✓ Choisir la base de données à interroger (connecter à une base de donnée), ceci


est réalisé au moyen de la commande appropriée :

USE DATABASE_NAME ;

✓ Si vous voulez supprimer une BD, vous pouvez le faire à l’aide de :

DROP DATABASE DATABASE_NAME ;

✓ Si vous voulez supprimer une table dans une BD, vous pouvez le faire à l’aide
de :

DROP TABLE_NAME ;

38
D. Les commandes SQL simples
[1] La commande CREATE
Tous les objets de la base de données sont créés avec la commande CREATE. Cette
commande est une commande DDL. La commande CREATE TABLE permet de
créer une table dans une base de données. Pour créer une table nous avons besoins
de connaître la liste de ses attributs et l’ensemble des contraintes sur la table. Pour
chacun des attributs, nous avons besoin de connaitre le type des données et les
contraintes.
Syntaxe:

CREATE TABLE TABLE_NAME (COLUMN1_NAME DATA_TYPE,


COLUMN2_NAME DATA_TYPE,
….…………………………………...
COLUMNN_NAME DATA_TYPE);
Exemple:

La liste des colonnes de la table CLIENT peuvent être affiché à l’aide de :


Syntaxe :
DESC TABLE_NAME ;
Exemple :

✓Field représente les attributs de la table Client.

✓ Type représente le type de chaque attribut.


✓ Null peut prendre deux valeurs YES ou NO.
NO indique la présence d’une valeur pour un attribut.
YES indique l’absence d’une valeur pour un attribut.

39
En conséquence :
1. on ne peut pas faire d’opération incluant un NULL ;
2. on ne peut pas faire de comparaison avec un NULL.
L’option NOT NULL oblige à toujours indiquer une valeur. L’option suivante
permet ainsi de garantir que tout Client a un Num_Client et un Nom_Client.

-Le SGBD rejettera alors toute tentative d’insérer une ligne dans Client sans
donner un Num_Client et Nom_Client. Si les valeurs à NULL sont autorisées, il
faudra en tenir compte quand on interroge la base. Cela peut compliquer les choses,
voire donner des résultats surprenants : il est préférable de forcer les attributs
important à avoir une valeur.
-Une autre manière de forcer un attribut à toujours prendre une valeur est de
spécifier une valeur par défaut avec l’option DEFAULT.
Exemple

Quand on insérera une ligne dans la table Cinéma sans indiquer d’adresse, le
système affectera automatiquement la valeur ’Inconnue’ à cet attribut. En général
on utilise comme valeur par défaut une constante, sauf pour quelques variables
fournies par le système (par exemple SYSDATE qui peut indiquer la date du jour).

✓ Key : Chaque table doit contenir une clé primaire. Key peut être :
-Vide s’il n y’a pas de clé primaire dans la table.
-PRI : s’il y’a une clé primaire dans la table (ceci est obligatoire)

40
Exemple :

Résultat

✓ Extra : peut contenir des informations supplémentaires sur chaque colonne.

[2] La commande INSERT INTO


La commande INSERT INTO est la première commande exécutée après avoir créé
une table. Cette commande permet de saisir des données dans une table une
rangée à la fois.
➢ Aucune insertion n’est possible si les contraintes d’intégrité ne sont pas
respectées.
➢ Lors de l’insertion des donnés dans l’ensemble des colonnes de la tables (toutes
les colonnes), il n’est pas nécessaire de préciser les noms de celles-ci.
➢ Si des valeurs dans certaines colonnes ne doivent pas être saisies (contiennent
des valeurs par défaut) alors la précision des colonnes dans lesquelles la saisie doit
s’effectuer est obligatoire. Noter que les valeurs à saisir doivent être dans le même
ordre de la spécification des colonnes.
➢ Une valeur de type caractère (CHAR ou VARCHAR) doit être mise entre
apostrophes. Si la chaine de caractère contient des apostrophes, ceux-ci doivent
être doublés.
➢ Le type numérique (NUMBER) est saisi en notation standard. La virgule
décimale est remplacée par un point lors de la saisie.
➢ Le type date doit être saisie comme suit : ‘année-mois-jour‘ entre apostrophes,
exemple : 2024-02-20’

41
Syntaxe :

INSERT INTO TABLE_NAME (COLUMN1_NAME, COLUMN2_NAME,…. ,


COLUMNN_NAME) VALUES (VALUE1, VALUES2,……,VALUEN),
(VALUE1, VALUES2,……,VALUEN),
……………………..
……………………..
(VALUE1, VALUES2,……,VALUEN) ;
Exemple :

[3] La commande SELECT


La commande SELECT est la commande le plus simple à utiliser avec SQL. Cette
commande n’affecte en rien la base de données et permet d’extraire des données
d’une ou plusieurs tables.
Syntaxe 1 : (Extraction de tous les attributs d’une table avec leurs valeurs)
SELECT* FROM TABLE_NAME;
Exemple :

Syntaxe 2 : (Extraction de quelques attributs d’une table avec leurs valeurs)

SELECT COLUMN1_NAME, COLUMN2_NAME,..., COLUMNN_NAME FROM


TABLE_NAME;
Exemple:

42
Syntaxe 3 : (Extraction des attributs d’une table avec leurs valeurs en appliquant
une (des) condition(s))
SELECT COLUMN1_NAME, COLUMN2_NAME,... ,COLUMNN_NAME FROM
TABLE_NAME
WHERE CONDITION;
La clause WHERE permet de cibler les enregistrements à extraire.
Exemple:

Liste des opérateurs utilisés dans la clause WHERE


Cette clause permet de restreindre, en utilisant des critères, les enregistrements
qui seront affectés par la requête. En d’autres mots, la requête SELECT ramène
des résultats si la condition ou les conditions sont vérifiées.

43
44
Syntaxe 4 : (Extraction des attributs d’une table avec leurs valeurs d’une manière
triée)
SELECT COLUMN1_NAME, COLUMN2_NAME,..., COLUMNN_NAME FROM
TABLE_NAME
WHERE CONDITION
ORDER BY COLUMN_NAME;
• La clause ORDER BY spécifie le tri des données après extraction. Si l’ordre de
tri n’est pas précisé alors le tri est par défaut croissant.

45
• Pour avoir un tri décroissant il faut ajouter l’option DESC.
• Le tri peut se faire selon plusieurs colonnes, il faut les séparer par des virgules.
Exemple1 :

Exemple 2 :

Syntaxe 5 : (Extraction des attributs d’une table avec leurs valeurs et renommage
d’un attribut)

SELECT COLUMN1_NAME AS ANOTHER_NAME,


COLUMNE2_NAME,..., COLUMNN_NAME FROM TABLE_NAME;
L’option AS permet de changer le nom de colonnes pour l’affichage uniquement.
Exemple :

[4] La commande UPDATE


La commande UPDATE permet d’effectuer des modifications des données sur une
seule table. Cette modification peut porter sur une ou plusieurs lignes.
(Enregistrements). Lors de la modification des données, les contraintes d’intégrité
doivent être respectées :
• Il est possible d’utiliser une expression arithmétique dans la commande
UPDATE à condition que cette colonne soit de type numérique.
• Il est possible d’utiliser des modifications à partir d’une table existante
(commande SELECT et une sous-requête -----)

46
• Il est impossible de modifier une valeur de la clé primaire si cette valeur est
référée par une valeur de la clé étrangère ;
UPDATE TABLE_NAME SET (COLUMN_NAME = NEW_VALUE)
WHERE CONDITION ;
Exemple : Modifier le numéro du client Gégé à 3.

Résultat :

[5] La commande DELETE


La commande DELETE permet de supprimer de la base de données une ou
plusieurs lignes d’une table.
Syntaxe

DELETE FROM TABLE_NAME WHERE CONDITION;


Exemple : Supprimer tous les clients ayant le nom Gégé.

Résultat

47
[6] La commande ALTER TABLE
La commande ALTER TABLE en SQL est utilisée pour modifier la structure d’une
table existante. Cela peut inclure l’ajout, la suppression ou la modification de
colonnes, l’ajout ou la suppression de contraintes, ou encore la modification du type
de données d’une colonne existante.
Syntaxe :

ALTER TABLE TABLE_NAME ACTION1, ACTION2,……… ;

ACTION1, ACTION2,…..etc sont les actions spécifiques que vous souhaitez


effectuer, telles que :
•ADD COLUMN : Ajouter une nouvelle colonne à la table.
•DROP COLUMN : supprimer une colonne de la table.
•MODIFY COLUMN : Modifier le type de données ou d’autres propriétés d’une
colonne existante.
•ADD CONSTRAINT : Ajouter une contrainte à la table, comme une contrainte de
clé étrangère ou une contrainte de vérification.
Exemple (ADD COLUMN) :

Résultat (ADD COLUMN) :

Exemple (MODIFY COLUMN) :

48
Résultat (MODIFY COLUMN) :

Exemple (ADD CONSTRAINTE) :

Résultat (ADD CONSTRAINTE) :

[7] La commande GRANT et REVOK


En tant que propriétaire d’un schéma, on peut accorder des droits à d’autres
utilisateurs sur ce schéma ou sur des éléments de ce schéma. SQL définit 6 types
de droits. Les quatre premiers portent sur le contenu d’une table, et se
comprennent aisément.
1. Insertion (INSERT).
2. Modification (UPDATE).
3. Recherche (SELECT).
4. Destruction (DELETE).
Il existe deux autres droits :

49
1. REFERENCES donne le droit à un utilisateur non propriétaire du schéma de
faire référence à une table dans une contrainte d’intégrité.
2. USAGE permet à un utilisateur non propriétaire du schéma d’utiliser une
définition (autre qu’une table ou une assertion) du schéma.
Les droits sont accordés par la commande GRANT dont voici la syntaxe :
GRANT <privilege>
ON <element du schema>
TO <utilisateur>
[WITH GRANT OPTION]
-Bien entendu, pour accorder un privilège, il faut en avoir le droit, soit parce que
l’on est propriétaire de l’élément du schéma, soit parce que le droit a été accordé
par la commande WITH GRANT OPTION.
Exemple : Voici la commande permettant à Marc de consulter les films.
GRANT SELECT ON Film TO Marc;
-On peut désigner tous les utilisateurs avec le mot-clé PUBLIC, et tous les
privilèges avec l’expression : ALL PRIVILEGES.
Exemple: GRANT ALL PRIVILEGES ON Film TO PUBLIC
-On supprime un droit avec la commande REVOKE dont la syntaxe est semblable
à celle de GRANT.
Exemple: REVOKE SELECT ON Film FROM Marc;

E. Contraintes d’intégrités
Une contrainte d’intégrité est une règle sur la table qui permet d’assurer que les
données stockées dans la base de données soient cohérentes par rapport à leur
signification. Avec MySQL, on peut implémenter plusieurs contraintes d’intégrité.
• Au niveau de la table : Lorsque la contrainte porte sur plusieurs colonnes
simultanément (clé primaire composée), il est obligatoire de déclarer la contrainte
sur la table.
• Au niveau de la colonne ou attribut : se fait pour l’ensemble des contraintes à
condition qu’elle porte sur une seule colonne.
La contrainte de PRIMARY KEY
-Rappel de définition :
Une clé primaire est attribut qui permet d’identifier chaque occurrence
(enregistrement) d’une table de marinière unique. Ou encore c’est un attribut
permettant d’identifier chaque ligne d’une table d’une manière unique.

50
Exemples :
• Le numéro d’admission d’un étudiant
• Un numéro de facture, un numéro de commande.
• Le nom d’un étudiant NE peut PAS être une clé primaire, car il est possible qu’il
y ait plusieurs étudiants avec le même nom.
-La contrainte de PRIMARY KEY, permet de définir une clé primaire sur la table.
Lorsque la clé primaire est une clé primaire composée, les attributs faisant partie
de la clé doivent être entre parenthèse.
-La contrainte de PRIMARY KEY assure également les contraintes de NOT NULL
et UNIQUE
La contrainte CHECK :
Indique les valeurs permises qui peuvent être saisies pour la colonne (attribut) lors
de l’entrée des données ou une condition à laquelle doit répondre une valeur
insérée. La condition doit impliquer le nom d’au moins une colonne. Les opérateurs
arithmétiques (+,*, /,-), les opérateurs de comparaisons et les opérateurs logiques
sont permis.
Exemple :

La contrainte UNIQUE :
Indique que les valeurs saisies pour les colonnes (attributs) doivent être unique Ce
qui veut dire pas de Doublons.
Exemple :

51
Résultat :

La contrainte DEFAULT
Vue précédemment
La contrainte NOT NULL
Vue précédemment

Attention :
1. Les tables sont des objets de la base de données. Les noms doivent être uniques.
Vous ne pouvez pas avoir deux tables Employé dans votre BD
2. Les noms des tables doivent être significatifs.
3. Les noms des tables ne doivent pas être des mots réservés du SGBD. Exemple
de mot réservés : Table, sequence, sysdate,create,cycle, constraint, primary etc…
4. Les colonnes des tables doivent avoir des noms significatifs et ne doivent pas
être des mots réservés.
5. Les noms de colonnes sont uniques dans une table, mais pas dans la base de
données.
La contrainte d’intégrité référentielle FOREIGN KEY
Pour parler de contrainte de FOREIGN KEY nous avons besoins de deux tables :
Une table A qui contient un attribut de clé primaire : (PRIMARY KEY) et une table
B qui va contenir un attribut de clé étrangère. Cette contrainte indique que la
valeur de l’attribut de la table B correspond à une valeur d’une clé primaire de la
table spécifiée (table A).
La clé primaire de l’autre table A doit être obligatoirement crée pour que cette
contrainte soit acceptée.
La clé primaire la table A et l’attribut défini comme clé étrangère de la table B
doivent être de même type et de même longueur. Il n’est pas nécessaire que les
attributs de clé primaire et de clé étrangère aient des noms identiques.

52
La clé étrangère peut être créée lors de la création de la table B à l’aide de la
commande CREATE ou bien après la création de la table B à l’aide de la commande
ALTER TABLE.
Exemple (au moment de la création de la table)

Exemple (après la création de la table)

Résultat

1. La table Equipe doit-être créée en premier. Code_quipe est la clé primaire de


cette table.
2. Dans la table Joueur, nous avons un attribut codeequipe de même type et de
même longueur que Code_equipe de la table Equipe. (Ils peuvent avoir le même
nom, mais ce n’est pas obligatoire)
3. Le codeequipe de la table Joueur fait référence à Code_equipe de la table Equipe.
4. Il y a une contrainte de clé étrangère sur le codeequipe de la table joueurs

Attention
La contrainte de FOREIGN KEY est une contrainte sur la table et non sur un
attribut
Après l’insertion des lignes dans la table Equipe et Joueur nous obtiendrons les
tables suivantes :

53
-Le contenu de la table Equipe

-Le contenu de la table Joueur

La contrainte de FOREIGN KEY garantie l’intégrité référentielle ce qui veut dire :


1. Vous ne pouvez pas modifier (UPDATE) la valeur de l’attribut de la clé primaire
s’il a une valeur de clé étrangère. Exemple dans la table Equipe vous ne pouvez
pas modifier le Code_equipe MTL pour BLA, car il existe des joueurs ayant le
codeequipe MTL.
2. Vous ne pouvez pas supprimer (DELETE) une ligne de la table référencée s’il
existe des enregistrements ayant une valeur de la clé étrangère égale à la valeur
de la clé primaire de la ligne à supprimer. Exemple vous ne pouvez pas supprimer
de la table Equipe l’équipe dont le codeequipe est OTT, car il existe des joueurs
ayant ce codeequipe.
3. Vous ne pouvez pas supprimer la table Equipe par un simple DROP TABLE. Il
faudra :
• Soit supprimer la table Joueur en premier (à condition qu’elle ne soit pas
Référencée)
• Soit désactiver ou détruire la contrainte d’intégrité (la FOREIGN KEY).
On peut également préciser l’option ON DELETE CASCADE qui indique que les
enregistrements soient détruits lorsque l’enregistrement correspondant à la clé
primaire de la table référencée est supprimé.

Attention
Ne jamais utiliser ON DELETE CASCADE à moins que vous soyez vraiment
certain.

54
F. Requêtes mono et multi relation
Une requête SQL peut être mono-relation ou multi-relation :
*Requêtes mono-relation
Une requête mono-relation en SQL implique l’interrogation d’une seule table. Voici
quelques requêtes mono-relation :
→ Sélectionner toutes les colonnes d’une table :
SELECT* FROM TABLE_NAME ;

→ Sélectionner des colonnes spécifiques :

SELECT COLUMN1, COLUMN2 FROM TABLE_NAME ;

→ Sélectionner des colonnes avec une condition :


SELECT* FROM TABLE_NAME WHERE CONDITION;

55
→ Compter le nombre de ligne dans une table :
1) Toutes les lignes de la table seront comptées y compris ceux qui ont des colonnes
avec des valeurs NULL.
SELECT COUNT (*) FROM TABLE_NAME ;

2) Seules les lignes contenant des valeurs NOT NULL dans les colonnes seront
prises en compte.

SELECT COUNT (COLUMN_NAME) FROM TABLE_NAME ;


Voici la table personne suivante :

Résultat1

Résultat2 :

3) Compter le nombre de COLUMN_NAME différents

SELECT COUNT (DISTINCT (COLUMN_NAME)) FROM TABLE_NAME ;


→ Sélectionner les valeurs distinctes d’une colonne :

SELECT DISTINCT COLUMN_NAME FROM TABLE_NAME ;

56
*Requêtes multi-relation
Une requête multi-relation en SQL est une requête qui implique plus d’une table
dans sa logique de sélection de données. Elles permettent de combiner et de
manipuler des données provenant de plusieurs tables.
 JOINTURE
La jointure est une des opérations les plus utiles (et donc une des plus courantes)
puisqu’elle permet d’exprimer des requêtes portant sur des données réparties dans
plusieurs tables. La syntaxe pour exprimer des jointures avec SQL est une
extension directe de celle étudiée précédemment dans le cas des sélections simples :
on donne simplement la liste des tables concernées dans la clause FROM, et on
exprime les critères de rapprochement entre ces tables dans la clause WHERE.
-Prenons l’exemple de la requête suivante : donner le nom des clients avec le nom
des stations où ils ont séjourné. Le nom du client est dans la table Client,
l’information sur le lien client/station dans la table Sejour. Deux tuples de ces
tables peuvent être joints s’ils concernent le même client, ce qui peut s’exprimer à
l’aide de l’identifiant du client.

On obtient la requête :
SELECT nom, station FROM Client, Sejour WHERE id = idClient ;
-On peut remarquer qu’il n’y a pas dans ce cas d’ambiguïté sur les noms des
attributs : nom et id viennent de la table Client, tandis que station et idClient
viennent de la table Sejour. Il peut arriver (il arrive de fait fréquemment) qu’un
même nom d’attribut soit partagé par plusieurs tables impliquées dans une
57
jointure. Dans ce cas on résout l’ambiguïté en préfixant l’attribut par le nom de la
table.
Exemple : afficher le nom d’une station, son tarif hebdomadaire, ses activités et
leurs prix.

La requête est :

SELECT Station.nomStation, tarif, libelle, prix


FROM Station, Activite
WHERE Station.nomStation = Activite.nomStation ;

-Comme il peut être fastidieux de répéter intégralement le nom d’une table, on


peut lui associer un synonyme et utiliser ce synonyme en tant que préfixe.
Exemple : La requête précédente devient :

SELECT S.nomStation, tarif, libelle, prix


FROM Station S, Activite A
WHERE S.nomStation = A.nomStation;
-Bien entendu, on peut effectuer des jointures sur un nombre quelconque de tables,
et les combiner avec des sélections.
Exemple : Afficher le nom des clients habitant Paris, les stations où ils ont séjourné
avec la date, enfin le tarif hebdomadaire pour chaque station.

58
La requête est :
SELECT nom, station, debut, tarif
FROM Client, Sejour, Station
WHERE ville = ’Paris’
AND id = idClient
AND station = nomStation
Il n’y a pas d’ambigüité sur les noms d’attributs donc il est inutile en l’occurrence
d’employer des synonymes. Il existe en revanche une situation où l’utilisation des
synonymes est indispensable : celle où l’on souhaite effectuer une jointure d’une
relation avec elle-même.
Exemple : Considérons la requête suivante : Donner les couples de stations situées
dans la même région. Ici toutes les informations nécessaires sont dans la seule
table Station, mais on construit un tuple dans le résultat avec deux tuples
partageant la même valeur pour l’attribut région.
Tout se passe comme s’il on devait faire la jointure entre deux versions distinctes
de la table Station. Techniquement, on résout le problème en SQL en utilisant deux
synonymes distincts.

SELECT s1.nomStation, s2.nomStation


FROM Station s1, Station s2
WHERE s1.region = s2.region
On peut imaginer que s1 et s2 sont deux ’curseurs’ qui parcourent
indépendamment la table Station et permettent de constituer des couples de tuples
auxquels on applique la condition de jointure.
 UNION
Cet opérateur renvoi l’ensemble des lignes des deux tables. Si des lignes sont
redondantes elles sont renvoyées une seule fois. Pour renvoyer toutes les lignes,
utiliser l’option ALL.

59
Syntaxe

Instruction SELECT1
UNION [ALL]
Instruction SELECT 2
[ORDER BY].
Soit les deux tables suivantes :
Table Etudiant

Table Enseignant

Exemple :
SELECT nomEtudiant AS nom, prnEtudiant AS prenom FROM etudiants
UNION
SELECT nomenseignant, prnenseignant FROM enseignants;
Le résultat de la requête est :

60
Vous remarquerez que : Patoche Alain, Fafar Chantal et Lefou Duvillage ne sont
ramenées qu’une seule fois.

Attention
L’opérateur UNION n’a pas de doublons. Si vous voulez ramener les doublons,
utilisez UNION ALL
Exemple :
SELECT nomEtudiant AS nom, prnEtudiant AS prenom FROM etudiants
UNION ALL
SELECT nomenseignant, prnenseignant FROM enseignants ;
Le résultat est :

Vous remarquerez que : Patoche Alain, Fafar Chantal et Lefou Duvillage ne sont
ramenées deux fois.

61
 Autre jointures
On utilise les jointures lorsque nous souhaitons extraire des données qui se
trouvent dans différentes tables. Il existe différents types de jointures.
Voici le contenu des deux tables Syemp et Sydept :
Table Syemp

Table Sydept

 Le produit cartésien
Le produit cartésien est une requête de sélection qui met en jeux plusieurs tables.
Pour deux tables, la sélection consiste à afficher la première ligne de la première
table avec toutes les lignes de la deuxième table, puis la deuxième ligne de la
première table avec toutes les lignes de la deuxième table et ainsi de suite. Ce type
de sélection implique beaucoup de redondances.
Exemple

SELECT ename,job ,dname FROM syemp,sydept;


Le résultat est:

62
…. (il y a une suite à la sortie de la requête). En tout il y a 48 lignes alors que nous
avons 12 employés.
Dans l’exemple précédent on ne sait pas si KING est dans le département
ACCOUNTING ou le département RESEARCH, ou autre.
 Jointure interne (ou jointure simple)
Une jointure simple consiste en produit cartésien avec un INNER JOIN faisant
ainsi une restriction sur les lignes. La restriction est faîte sur l'égalité de la valeur
de deux attributs (cas de deux tables) qui sont la valeur d’une clé primaire est égale
à la valeur d’une clé étrangère.
Syntaxe simplifiée (avec deux tables)

SELECT column1, column2, …..


FROM table1_name INNER JOIN Table2_name
ON table1_name. Foreign key = table1_name.primary key;
WHERE condition ;
Exemple:
SELECT ename, job, dname
FROM syemp INNER JOIN sydept
ON syemp.deptno = sydept.deptno
L’exemple précédent ramène des enregistrements uniquement s’il y a égalité entre
la valeur de deptno dans syemp et la valeur de deptno dans sydept . Seuls les
employés ayant un département et les départements ayant des employés seront
ramenés par la requête.

63
 Jointure externe
-Jointure externe droite (RIGHT OUTER JOIN)
Dans la jointure externe droite, des enregistrements de table à droite de la jointure
seront ramenés même si ceux-ci n'ont pas d'occurrences dans la première table.
-Jointure externe gauche (LEFT OUTER JOIN)
Dans la jointure externe gauche des enregistrements de table à gauche de la
jointure seront ramenés même si ceux-ci n'ont pas d'occurrences dans la deuxième
table.
Dans le cas d'une jointure externe, il faut faire suivre la colonne pour laquelle il
n’est pas obligatoire d'avoir des lignes correspondant à l'égalité par l’opérateur
LEFT OUTER JOIN ou RIGHT OUTER JOIN.
Exemple1 :
Cette requête ramène tous les étudiants y compris ceux qui ne sont pas inscrits
dans un programme.
SELECT nom, Preno, nomprogramme
FROM Etudiants LEFT OUTER JOIN programmes ON Etudiants. codeprg
=programmes. codeprg;
Le résultat :

64
Attention
Notez que la table Etudiants est à GAUCHE de la jointure, donc c’est TOUS les
étudiants qu’on veut ramener. Mais que les programmes ayants des étudiants
inscrits.
Exemple2 :
La requête suivante fait une jointure entre les deux tables Etudiants et
Programmes. Elleramène également les programmes qui n’ont pas d’étudiants.

SELECT nom, Preno, nomprogramme


FROM Etudiants RIGHT OUTER JOIN programmes ON Etudiants. codeprg
=programmes.
codeprg;
Le résultat :

65
Attention
Notez que la table Programmes est à DROITE de la jointure, donc c’est TOUS les
programmes qu’on veut ramener. Mais que les étudiants ayant un programme
Si nous avons bien compris les requêtes donnent le même résultat. Le LEFT
OUTER JOIN ou Le RIGHT OUTER JOIN n’a de sens que si la bonne table est
placée au bon endroit.

G. Quelques fonctions en SQL


Ces fonctions sont utilisées pour traiter des groupes de rangées et d'afficher un
seul résultat.
Même si ce sont des fonctions de groupement, elles ne s'utilisent pas tout le temps
avec la clause GROUP BY.
Les fonctions MIN et MAX
Ce sont des fonctions qui s'utilisent pour afficher la valeur MIN (ou MAX) parmi
l'ensemble des valeurs de la colonne indiquée.
Syntaxes
SELECT MIN (COLUMN) FROM Table_NAME [WHERE expression]
SELECT MAX(COLUMN) FROM Table_NAME [WHERE expression]
Exemple:

Les fonctions AVG et SUM


AVG s'utilise pour obtenir une valeur moyenne des valeurs de la colonne indiquée
SUM s'utilise pour obtenir une valeur totale des valeurs de la colonne indiquée
Syntaxes

SELECT AVG (colonne) FROM nomTable [WHERE expression]


SELECT SUM (colonne) FROM nomTable [WHERE expression]
Exemple

66
H.Requêtes imbriquées
 Définition
Une sous requête est une requête avec la commande SELECT imbriquée avec les
autres commandes (UPDATE, INSERT, DELETE et CREATE)
Une sous-requête, peut être utilisée dans les clauses suivantes :
• La clause WHERE d’une instruction UPDATE, DELETE et SELECT
• La clause FROM de l’instruction SELECT
• La clause VALUES de l’instruction INSERT INTO
• La clause SET de l’instruction UPDATE
• L’instruction CREATE TABLE ou CREATE VIEW.
 Utilisation d’une sous-requête avec la clause WHERE
Ce type de sous-requête permet de comparer une valeur de la clause WHERE avec
le résultat retourné par une sous-requête, dans ce cas on utilise les opérateurs de
comparaison suivant : =, ! = , < , <= ,> ,>= , et IN.
Exemple1
Soit les deux tables suivantes :
Table commande

67
Table client

SELECT Nom_client, date from client WHERE Num_client=


(SELECT Num_client FROM commande WHERE Nom_client =”SAMY”);

La requête en rouge, ou entre parenthèse est dite « requête interne » ou sous


requêtes. Les deux requêtes forment des requêtes imbriquées. La requête interne
retourne un seul enregistrement car le num_client est unique dans la table
commande.

Remarque
Quand on regarde l’exemple 1, la requête aurait pu s’écrire à l’aide d’une jointure
interne (INNER JOIN), comme suit :

SELECT client.Nom_client, date from client INNER JOIN commande ON client.


Num_client= commande.Num_client WHERE client.Nom_client =”SAMY”;

Il existe des cas où des jointures peuvent s’écrire à l’aide de requêtes imbriquées.
Mais les SGBDs sont conçus pour les jointures, alors il est vivement conseillé
(même obligatoire) d’utiliser une jointure à la place de requetés imbriquées.

Exemple2 :
Soit les deux tables suivantes :

68
Table commande

Table client

Voici la requête suivante :

SELECT Nom_client, date FROM client WHERE Num_client IN


(SELECT Num_client FROM commande WHERE Nom_client =”SAMY”);
Le résultat de la requête est :

Exemple3

SELECT * FROM commande WHERE EXISTS(SELECT nom_client FROM


client);

69
Ne pas confondre avec IN, qui ramène des résultats lorsqu’une certaine égalité est
vérifiée.
Exemple 4
SELECT * FROM commande WHERE nom_client IN (SELECT nom_client
FROM client);

 Les sous requêtes avec la clause SET de la commande UPDATE


Dans ce cas, la requête interne doit retourner une seule valeur.
Exemple 5
Cette requête met à jour la table client. Elle met à jour le nom du client SAMY par
le nom du client de numéro de commande110 qui est « LILI ».
UPDATE client SET nom_client= (SELECT nom_client FROM commande
WHERE num_commande=110) WHERE nom_client= ‘SAMY’ ;
Le résultat de la requête est :

 Les sous requêtes avec la commande INSERT


Ce type de sous-requête permet d’insérer des données dans une table à partir d’une
autre table.
La sous requête est utilisée à la place de la clause VALUES de la requête principale
et peut retourner plusieurs résultats.
Exemple 6
INSERT INTO client (nom_client,num_client)
(SELECT nom_client,num_client FROM commande WHERE
num_commande=106) ;
Le résultat de la requête est :

70
 Les sous requêtes avec la commande CREATE
Permet de créer une table contenant des données issues d’une autre table.
Exemple 7
La requête suivante permet de créer une table CLIENTprime de tous les clients de
nom « LILI » dans la table client précédente ;

CREATE TABLE CLIENTprime AS


(SELECT* FROM Client WHERE nom_client= ‘LILI’);
Le résultat de la requête est :

I. Vue
Une vue c’est une table dont les données ne sont pas physiquement stockées mais
se réfèrent à des données stockées dans d’autres tables. C’est une fenêtre sur la
base de données permettant à chacun de voir les données comme il le souhaite.
On peut ainsi définir plusieurs vues à partir d’une seule table ou créer une vue à
partir de plusieurs tables. Une vue est interprétée dynamiquement à chaque
exécution d’une requête qui y fait référence.
 Avantages
• Les vues permettent de protéger l’accès aux tables en fonction de chacun des
utilisateurs. On utilise une vue sur une table et on interdit l’accès aux tables. C’est
donc un moyen efficace de protéger les données.
• Les vues permettent de simplifier la commande SELECT avec les sous requêtes
complexes. On peut créer une vue pour chaque sous-requête complexe, ce qui
facilite sa compréhension.
• Il est possible de rassembler dans un seul objet (vue) les données éparpillées ;
Une vue se comporte dans la plupart des cas comme une table. On peut utiliser
une vue comme source d’information dans les commandes SELECT, INSERT,
UPDATE ou DELETE. Une vue est créée à l’aide d’une sous-requête comme suit :

71

Vous aimerez peut-être aussi