Base - Données - VF

Télécharger au format pptx, pdf ou txt
Télécharger au format pptx, pdf ou txt
Vous êtes sur la page 1sur 248

Système d’Information et Base de

Données

Pr. Siham EDDAMIRI


Plan de cours

 Chapitre 1: Introduction aux bases de données

 Chapitre 2: Conception d’un système d’information


(Méthodologie MERISE)

 Chapitre 3: Le Modèle Relationnel

 Chapitre 4: Le Langage SQL (Structured Query Language)

2
CHAPITRE 1:
INTRODUCTION AUX BASES DE DONNÉES

3
INTRODUCTION

Les BD sont omniprésentes ...

... vous utilisez des BD tous les jours !

4
PROBLÉMATIQUE

 Les applications sont de plus en plus complexes vis à vis à la structuration des données

 Besoin de stocker les données de façon persistante


 Données volatiles (variables d’un programme)
 Elles disparaissent à la fin d’exécution
 Elles sont gardées dans la mémoire centrale RAM (RAM cher, alimentation
électrique permanente donc non utilisable pour les données permanents)

 Données persistantes (fichiers, bases de données)


 Permanentes, gardées dans des mémoires de masse (disques durs magnétiques,
disquettes magnétiques….)

5
IMPORTANCE ET UTILISATION DES DONNÉES

Besoin de stocker et de manipuler les données


 Un Particulier
 Données: nom, prénom, tél., émail, adresse, etc.
 Une bibliothèque
 Données: livres, dates_emprunts, emprunteurs, etc.
 Un réseau social
 Données: nom, prénom, liste_amis, âge, ville, photos, vidéos, stories, etc.
 Une Université
 Données: étudiants, enseignants, cours, etc.
 Entreprises
 Données: fichiers_clients, fournisseurs, commandes_facturation, gestion_stock, inventaire, etc.
6
LES FICHIERS

 Définition :
 C’est une unité d’informations homogènes portant un nom et physiquement
stockée sur une mémoire de masse permanente
 Intérêts :
 Stockage permanent des informations et manipulation de gros volumes de
données
 Exemples :
 Une source de programme C, un annuaire de personnes "annuaire.dat" où
chaque élément est un triplet <nom, prenom, téléphone>, un fichier image
(.jpg), etc.

7
PROPRIÉTÉS D'UN FICHIER

 Un nom, par exemple « Etudiant.txt » , un type, un propriétaire, une date de création,


une date de dernière modification, une taille exprimée en octets, un chemin d’accès
(localisation physique sur un disque), une description des droits d'accès par les autres
utilisateurs

 Chaque fichier a un contenu, soit une suite ordonnée d'octets, qui peut représenter
n'importe quelle donnée binaire déterministe : un programme informatique, un
document, un texte, etc.

 Chaque ligne d’un fichier s'appelle article ou enregistrement.


8
ACTIONS SUR LES FICHIERS

 Création : Ecriture et organisation des articles sur leur support physique.


 Consultation : Les données sont lues et éventuellement imprimées.
 Fusion : Réunir plusieurs fichiers en un seul fichier
 Eclatement : l’inverse de la fusion
 Mise à jour : ….

9
ACTIONS SUR LES FICHIERS

 Mise à jour :
a) Ajout : insertion d’un ou plusieurs enregistrements / de nouvelles zones
b) Modification :
 Par substitution : correction d’une ou plusieurs rubriques d’un article
 Par addition : addition de nouvelles valeurs dans une zone d’accumulation
de l’enregistrement
 Par soustraction : soustraction de certaines quantités d’une zone
d’accumulation d’un enregistrement
c) Suppression :
 D’articles : suppression d’un ou plusieurs enregistrement d’un fichier
 De zones : élimination de certaines zones dans les articles d’un fichiers qui
sont inutiles.
10
LE SYSTÈME DE GESTION DES FICHIERS

 Le Système de Gestion des Fichiers (SGF) est la partie du système d’exploitation permettant de
stocker les informations, de les récupérer et de les organiser dans des fichiers.
 Rôle :
 Il gère:
 Le catalogue des fichiers (emplacement, organisation, droits d’accès)
 Les opérations d’enregistrement et de lecture (entrées/sorties) dans les fichiers
 La sécurité et contrôle des fichiers
 La récupération de pannes.
 Principe :
 Chaque fichier créé est décrit par un certain nombre de propriétés
 La description d'un fichier est stockée sur disque dur, dans une zone accessible en lecture et
en écriture au SGF

11
ORGANISATION DES FICHIERS

 L’organisation des fichiers est la façon dont sont organisées les données sur le
support externe. Elle constitue la structure interne du fichier, dont dépendent les
algorithmes de lecture/écriture du SGF

 L’organisation des enregistrements dans un fichier peu être :


 Séquentielle, Relative, Aléatoire, Indexée, etc.

 Dans la plupart des langages de programmation, l'organisation d'un fichier se


décide au moment de sa création.

12
ACCÈS AUX ENREGISTREMENTS DES FICHIERS

 Une méthode d’accès est une façon d’accéder à un enregistrement dans un fichier
(séquentielle, indexée). C’est le mode d’exploitation d’un fichier dans un programme
d’application.
 Elle dépend de l’organisation adoptée
 Trois façons d’accéder aux fichiers
 Séquentiel : on ne peut accéder à un élément que si on lit tous les éléments qui le
précèdent.
 lire: fichier  enregistrement (notion d’enregistrement courant)
 Direct (relatif)
 lire: fichier  no_enregistrement  enregistrement
 Indexé (par la clé)
 13
lire: fichier  valeur_clé  enregistrement
LES LIMITES À L'UTILISATION DES FICHIERS

 Travailler directement sur des fichiers présente plusieurs inconvénients :

 Manipulation de données lourdes et compliquées  il faut être expert en programmation.

 Le programmeur doit connaître l’organisation des fichiers (séquentielle, indexé), la localisation


physique des fichiers, la structure physique des enregistrements, le mode d’accès aux fichiers.

 Toute modification de la structure des enregistrements (ajout d’un champ par exemple) entraîne
la réécriture de tous les programmes qui manipulent ces fichiers.

14
LES LIMITES À L'UTILISATION DES FICHIERS

 Redondance des données

15
LES LIMITES À L'UTILISATION DES FICHIERS

 Intégrité sémantique

Supprimer
16
LES LIMITES À L'UTILISATION DES FICHIERS

 Isolation des données et accessibilité


 Les données sont stockées sous différents formats.
o Ex: Numéro de la sécurité sociale
 type caractère dans un fichier
 type entier dans un autre fichier.

 Un accès aux données = un programme

 Grande difficulté d'écrire un programme d'accès général à toute l'information.

 Il faut un programme spécifique pour toute nouvelle demande d'information.


o Ex : Estimation pour l’augmentation de 10% sur le prix des produits vendus du mois dernier.

 Le temps d'accès à une requête non prévue peut être très long.
17
LES LIMITES À L'UTILISATION DES FICHIERS

 Fiabilité
 Les SGF permettent de stocker les données de façon persistante. Cependant, lorsque des
pannes se produisent, les SGF n’ont pas de mécanisme permettant de récupérer les fichiers
dans un état cohérent malgré la panne.

 Environnement multi-utilisateurs
 Impossible de partager les données

 Sécurité et protection des données


 La sécurité des données et les accès non-autorisés ne sont pas garanties.

18
DES FICHIERS AUX BASES DE DONNÉES

 La multiplication des fichiers entraînait la redondance des données, ce qui rendait difficile
les mises à jour.
 D'où l'idée d'intégration et de partage des données
19
C’EST QUOI UNE BASE DE DONNÉES ?

 Une Base de Données (BD) est un ensemble structuré de données (1) enregistrées sur des
supports permanents accessibles par l’ordinateur (2) pour satisfaire simultanément plusieurs
utilisateurs (3) de manière sélective (4) en un temps opportun (5).

(1) Organisation et description des données


(2) Stockage sur disque
(3) Partage de données
(4) Confidentialité
(5) Performance
Exemples :
 Gestion des personnels, étudiants, cours, inscriptions, ... d’une université.
 Système de réservation de billets.
 Gestion des comptes clients d’une banque.
20
POURQUOI UNE BD?

 Pour contourner les limites des fichiers


 Disponibilité des données pour une consultation, une saisie ou une mise à jour, tout en
s'assurant des droits accordés à ces derniers.
 Limiter la redondance des données
 Accès simultané à la base par plusieurs utilisateurs
 Partage et sécurité de données
 Fiabilité de données : Transactions, Reprises sur pannes, Tolérance de pannes
 Langages assertionnels de requêtes : SQL, QBE
 Interfaces conviviales : 4-GL (Langage de quatrième Génération , ex: générateurs : de
formes, de rapports, des applications) & interface Web
 Locale et répartie.
21
LA GESTION DES BASES DE DONNÉES

 Pour contrôler les données ainsi que les utilisateurs, le besoin d'un système de gestion s'est vite fait
ressentir.
 La gestion de la BD se fait grâce à un système appelé Système de Gestion de Bases de Données
(SGBD).
 Le SGBD est une collection de logiciels permettant de créer, gérer et interroger de manière
efficace une BD indépendamment du domaine d’application.

User 1

User 2

22
HISTORIQUE DES SGBD

 1960 : organisation classique des données en fichiers.


 1970 : apparition des premiers SGBD : Les systèmes réseaux et hiérarchiques.
 couplage encore assez fort entre données et programmes
 difficulté d'accès aux données
 1980 : deuxième génération de SGBD : Les systèmes relationnels.
 modèle fondé sur une théorie mathématique
 langage déclaratif d'accès aux données, "simple" à utiliser
 1990 : troisième génération de SGBD : Les systèmes orientés objet.
 intégration de types de données plus divers
 A partir des années 2000 : Les systèmes Relationnels - Objet.
23
FONCTIONS D’UN SGBD

1) Persistance : Données stockées sur disque


2) Gestion du disque :
 Techniques spécifiques pour de bonnes performances
 Index, hash-coding
 Regroupement des données sur disque
 Optimisation des requêtes

3) Description des données qui seront stockées grâce au Langage de Description de Données
(LDD) (create table, create user, alter table, drop table).
4) Manipulation des données (ajouter, modifier, supprimer des informations) grâce au Langage
de Manipulation de Données (LMD).

24
FONCTIONS D’UN SGBD

5) Consultation des données et traitement des informations obtenues (sélectionner, trier, calculer,
agréger,...) grâce au Langage d’Interrogation de Données (LID).
Ces langages (LDD, LMD, LID, LCD) fournissent des requêtes qui doivent être :
 Simples
 Déclaratives
 Optimisées avant leur exécution
Langages :

 SQL (Structured Query Language) : mélange d’algèbre relationnelle et de calcul relationnel


 QBE (Query By Example) : s’appuie sur le calcul relationnel, mais permet de formuler des
requêtes et d’effectuer des manipulations de données à l’aide de représentations graphiques
 OQL (Object Query Language) : conçu pour s’intégrer avec des programmes écrits en
langage objet (C++, Smalltalk, Java)
 XQUERY (XML Query language)
25
FONCTIONS D’UN SGBD

6) Partage des données


 Autoriser un accès aux informations à de multiples d’utilisateurs de façon simple.
 Notion de transaction (begin, abort, commit).
 Cohérence des mises à jour effectuées par un utilisateur.
 Cohérence collective.

7) Sécurité des données


 Les données sont protégées contre les accès non autorisés.
 Tous les utilisateurs ne peuvent pas tout faire sur toutes les données.
 Notion de groupes d’utilisateurs.
 Notion d’autorisation (lecture, écriture, exécution).
 Granularité des autorisations : base de données, table, colonne, n-uplet, ...
 Possibilité d’accorder ou de supprimer des droits.
26
FONCTIONS D’UN SGBD

8) Fiabilité et Contrôle des données :


 Vérification de contraintes d’intégrité sur les données (contraintes de domaines, d'existence,...)
 Résolution des problèmes d'accès multiples aux données (blocages, inter-blocages)
 Atomicité des transactions : transaction complètement effectuée ou pas du tout Résistance aux
pannes
 Prévention des procédures de reprise en cas d'incident (sauvegardes, journaux,...)
 Si panne mémoire : restauration automatique de la base intégrant les dernières
transactions validées avant la panne
 Si panne disque : restauration d’une sauvegarde et déroulement du journal archivé

 Mise en place d’un mécanisme de réplication synchrone de la base dans une base miroir :
mirroring

27
FONCTIONS D’UN SGBD

9) Indépendance logique / physique


 Un même ensemble de données peut être vu différemment par des utilisateurs différents. Toutes
ces visions personnelles des données doivent être intégrées dans une vision globale.

 L’organisation physique de la BD est transparente pour le développeur d’application et


indépendante des structures de stockage utilisées.

28
MODÈLES D’UN SGBD

Il existe cinq modèles de SGBD, différenciés selon la représentation des


données qu'elle contient :

1) le modèle hiérarchique: il a été introduit par IMS d’IBM (1964). Les


données sont classées hiérarchiquement, selon une arborescence
descendante (structure en arbre). Ce modèle utilise des pointeurs entre les
différents enregistrements. Il s'agit du premier modèle de SGBD. le modèle hiérarchique

2) le modèle réseau: il a été introduit par IDS2 (1964). Les données sont
représentées sous la forme d’un graphe. Ce modèle utilise aussi des
pointeurs entre des enregistrements.

le modèle réseau
29
MODÈLES D’UN SGBD

3) le modèle relationnel (SGBDR, Système de gestion de bases de données


relationnelles): il a été introduit par Codd (1970). les données sont
enregistrées dans des tableaux à deux dimensions (lignes et colonnes). La
manipulation de ces données se fait selon la théorie mathématique des
relations. Les SGBD relationnels dominent le marché et le langage SQL
est un standard. le modèle relationnel
4) Le modèle Entité-Association : il a été introduit par Chen en 1976.
L’objectif de ce modèle est de décrire, à travers d’un diagramme, les
données qu’on souhaite intégrer dans la base ainsi que les relations qui
les lient.
5) le modèle déductif: Le modèle Objet, Relationnel-Objet, … le modèle Entité-Association

30
ARCHITECTURE D’UN SGBD 

L'architecture ANSI/SPARC, datant de 1975, définit des niveaux d'abstraction pour un système de
gestion de bases de données:
 Niveau externe: Il définit les vues des utilisateurs
 Niveau conceptuel: appelé aussi MCD (modèle conceptuel des données) ou MLD (modèle
logique des données). Il définit l'arrangement des informations au sein de la base de données.
 Niveau interne (ou physique): Il définit la façon selon laquelle sont stockées les données et les
méthodes pour y accéder

31
Exemples de SGBD

il existe un ensemble des systèmes de gestion de bases de données a savoir:

 Interbase
 Microsoft SQL server
 Microsoft Access
 Microsoft FoxPro
 DB2-IBM
 Oracle
 Sybase
 MySQL
 PostgreSQL
32
 ….
CHAPITRE 2:
CONCEPTION D’UN SYSTÈME D’INFORMATION
(MÉTHODOLOGIE MERISE)

33
NOTION DE SYSTÈME

Définition:

Un système est un tout constitué d’éléments unis par des relations, ces éléments et ces
relations étant munis de propriétés.

Description d’un système :


 Déterminer les éléments et les relations
 Déterminer les propriétés des éléments et des relations
 Déterminer les valeurs que peuvent prendre les propriétés
 Décrire l’activité du système
 Décrire son organisation

34
NOTION DE SYSTÈME
Exemple :
 Système :
 Entreprise
 Éléments :
 Employés, services, articles, entrepôt....
 Propriétés des éléments :
 Nom, matricule d’employé…
 Référence d’article, Nom_d’article…
 Relations :
 Un employé est rattaché à un service
 Un article est stocké dans un entrepôt
 Propriétés des relations :
 Date d’entrée dans le service
 Quantité stockée
35
NOTION DE SYSTÈME D’INFORMATION

Définition:

 Le système d’information est une représentation possible de n’importe quel système,


notamment tout système humain organisé.

 Le système d’information est le véhicule de la communication dans l’entreprise. Cette


communication possède un langage dont les mots sont les données.

 Le système d’information assurera le lien entre deux autres systèmes de l’entreprise :


 le système opérant et le système de pilotage 

 SO:  Il réalise toutes les tâches de l’exécution et il représente l’activité de l'entreprise.


 SP: Il dirige l’entreprise et prendre des decisions basée sur l’image de l’activité.
36
NOTION DE SYSTÈME D’INFORMATION

Le système d’information sert comme moyen de communication entre:


 l’entreprise et l’environnement extérieur
 le système opérant et le système de pilotage
37
NOTION DE SYSTÈME D’INFORMATION

Le système d’information peut être décomposé en deux types :


 Système d’information opérant
 Système d’information de pilotage

38
NOTION DE SYSTÈME D’INFORMATION

SI opérant
Il prend en charge la gestion courante de l’entreprise :
 gestion du personnel
 gestion de la production
 gestion des stocks
 facturation
 Comptabilité

SI de pilotage
Il prend en charge le pilotage et le traitement de gestion par exception :
 états statistiques
 historique
 décisions
 plans à long terme

39
Cycles de conception et de développement de SI

 Un projet de conception et de développement d’un SI est composé d’étapes.

 Le découpage du projet en étapes et l’organisation de ces étapes varient selon le modèle


utilisé.

 Il existe quatre modèles :

 Modèle en cascade
 Modèle en V
 Modèle en spirale
 Modèle tridimensionnel

40
MODÈLE EN CASCADE

Principes :
Modèle utilisé pour la conception et le développement de la première génération
d’applications informatiques : années 60 et début des années 70.
Cinq étapes:

41
MODÈLE EN V

Principes :
 C’est une variante du modèle en cascade.
 Le système est décomposé en sous-systèmes permettant la conception des systèmes
complexes.
Sept étapes:

42
MODÈLE EN SPIRALE

Principes :

 C’est le modèle le plus récent.


 Le développement du SI se fait par une série de prototypes correspondant à des sous-
systèmes représentatifs.
 La validation se fait au plus tôt possible, par sous-système, par rapport aux besoins
fonctionnels, aux contraintes matérielles ou logicielles et aux considérations économiques
ou stratégiques.
 Permet de montrer la validité de la compréhension que le concepteur a de la réalité et des
besoins des utilisateurs et le bien fondé des choix techniques.
 Adapté au développement RAD (Rapid Application Development).
43
MODÈLE EN SPIRALE

Les étapes :
Pour chaque sous-ensemble, jusqu'à satisfaction des utilisateurs :
 Définition des besoins, Conception, Implémentation, Test, Validation.

44
MODÈLE TRIDIMENSIONNEL

Principes :
 C’est le modèle introduit par la méthode MERISE (Méthode d’Etude et de Réalisation
Informatique pour les Systèmes d’Entreprise).
 Le développement du système d’information se fait suivant trois axes appelés cycles :
 Cycle de vie : décrit les différentes étapes correspondant au cycle de vie du système
d’information.
 Cycle de décision : décrit le cycle de développement correspondant au cycle de vie du
projet.
 Cycle d’abstraction : comprend les niveaux de description du système d’information.

45
MODÈLE TRIDIMENSIONNEL

 Le cycle de vie :
 Correspond à la vie du système d’information, depuis sa conception jusqu'à l’exploitation en
passant par sa naissance, sa maturité et sa maintenance.
 Cycle de décision
 Correspond aux choix qui doivent être faits durant le cycle de vie du système d’information.
 A travers ce cycle, l’organisation s’assure que le système correspond aux objectifs.
 Le cycle d’abstraction :
 Correspond aux différents niveaux permettant la description et la spécification du système
d’information. 46
MÉTHODOLOGIE MERISE

 MERISE (Méthode d’Etude et de Réalisation Informatique pour les Systèmes


d’Entreprise)

 Apparue en 1979.

 C'est une méthode et une démarche :


 Analyse,
 Conception (Modélisation)
 Réalisation d’un système d’information, d’un système réelle quelconque
(entreprise, organisation, administration…), et plus particulièrement les bases de
données

 Basée sur une séparation nette entre les données et les traitements.

47
MÉTHODOLOGIE MERISE

 La modélisation dans Merise consiste à représenter le système d'information selon trois


niveaux d'abstraction:
 Niveau conceptuel : Représente la finalité du système en s'appuyant sur ses objectifs
et ses aspects invariants indépendamment de la manière dont ils seront réalisés.
Le QUOI
 Niveau logique ou organisationnel : Définit l'organisation que l'on doit mettre en
place pour atteindre les objectifs décrits au niveau conceptuel.
Le QUI, le OÙ et le QUAND
 Niveau physique ou opérationnel : Décrit l'implémentation du système d'information
en tenant compte des choix techniques arrêtés.
Le COMMENT
 Cette modélisation est faite pour les données et les traitements
48
MÉTHODOLOGIE MERISE

 Six modèles de base:

49
MODÉLISATION D'UNE BASE DE DONNÉES AU
NIVEAU CONCEPTUEL

 Il s'agit de l'élaboration du modèle conceptuel des données (MCD) qui est une


représentation graphique et structurée des informations mémorisées par un SI.
 Le MCD est basé sur deux notions principales : les entités et les associations, d'où sa
seconde appellation : le  modèle Entité/Association.
 L'élaboration du MCD passe par les étapes suivantes :
 la mise en place de règles de gestion (si celles-ci ne vous sont pas données) ;
 l'élaboration du dictionnaire des données ;
 la recherche des dépendances fonctionnelles entre ces données ;
 l'élaboration du MCD (création des entités puis des associations puis ajout
des cardinalités).

50
LES RÈGLES DE GESTION 

 Exemple d'un développeur qui doit informatiser le SI d'une bibliothèque. On lui fixe les règles de
gestion suivantes :
 Pour chaque livre, on doit connaître le titre, l'année de parution, un résumé et le type (roman,
poésie, science-fiction…) ;
 Un livre peut être rédigé par un ou plusieurs auteurs dont on connaît le nom, le prénom, la
date de naissance et le pays d'origine ;
 Chaque exemplaire d'un livre est identifié par une référence composée de lettres et de chiffres
et ne peut être paru que dans une et une seule édition ;
 Un inscrit est identifié par un numéro et on doit mémoriser son nom, prénom, adresse,
téléphone et adresse e-mail ;
 Un inscrit peut faire zéro, un ou plusieurs emprunts qui concernent chacun un et un seul
exemplaire. Pour chaque emprunt, on connaît la date et le délai accordé (en nombre de jours).
 Ces règles vous sont parfois données, mais vous pouvez être amené à les établir
51
LE DICTIONNAIRE DES DONNÉES 

 Le dictionnaire des données est un document qui regroupe toutes les données que vous
aurez à conserver dans votre base (et qui figureront donc dans le MCD).
 Pour chaque donnée, il indique :
 Nom de l’attribut: il s'agit d'un libellé désignant une donnée (par exemple
«titre_l» pour le titre d'un livre) ;
 la désignation : il s'agit d'une mention décrivant ce à quoi la donnée correspond
(par exemple «titre du livre») ;
 le type de donnée : A ou Alphabétique, N ou Numérique, AN ou Alphanumérique,
Date, Booléen;
 la taille : ile s'exprime en nombre de caractères ou de chiffres.
 et parfois des remarques ou observations complémentaires

52
LE DICTIONNAIRE DES DONNÉES 
Exemple :
Attribut Désignation Type Taille Remarque
Identifiant numérique d'un
id_i N    
inscrit
nom_i Nom d'un inscrit A 30  
prenom_i Prénom d'un inscrit A 30  
rue_i Rue où habite un inscrit AN 50  
ville_i Ville où habite un inscrit A 50  
cp_i Code postal d'un inscrit AN 5  
Numéro de téléphone fixe
tel_i AN 15  
d'un inscrit
Numéro de téléphone
tel_port_i AN 15  
portable d'un inscrit
email_i Adresse e-mail d'un inscrit AN 100  
Date de naissance d'un
date_naissance_i Date 10 Au format AAAA-JJ-MM
inscrit
53
 LES DÉPENDANCES FONCTIONNELLES

 Soit deux propriétés (ou un groupe de propriétés) A et B.


 On dit que A et B sont reliées par une dépendance fonctionnelle (DF) si et seulement si
une occurrence (ou valeur) de A permet de connaître une et une seule occurrence de B.
 On symbolise la dépendance fonctionnelle par A → B où A est appelé source de la DF
(on dit aussi déterminant ou partie gauche) et B la cible (on dit aussi but, déterminé ou
partie droite) de la DF.
 Exemple: id_i  nom_i
 un identifiant d'un inscrit ne correspond qu’un et un seul nom. En revanche, il n’est
pas impossible qu’à un nom , correspondent plusieurs inscrit .

54
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 La représentation du modèle entités-associations s'appuie sur trois concepts de base :

 L’entité (l'objet) 

 l'association 

 L’ attribut (la propriété)

55
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Entité
 Une entité est un objet autonome (concret ou abstrait) pourvu d’une existence propre
ayant une signification dans l'univers.
 Exemple:
 Gestion Banque : Client, Compte Bancaire,…
 Gestion Scolaire : Etudiant, Professeur, …
 Représentation graphique :

56
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Association
 Une association (ou relation) est perçue dans le réel entre des individus
 Une association définit une relation entre une ou plusieurs entités
 Exemple :
 Un client possède un compte bancaire
 Représentation graphique :

57
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Attribut (propriété)
 Une donnée élémentaire qui caractérise une entité ou une association.
 Exemple :
 L'entité Client est caractérisée par :
 N°Client
 Nom_Client
 Adresse_Client
 L'entité Compte_Bancaire est caractérisée par :
 N°Compte
 Nom_Banque
 Solde
 La relation Possède peut être caractérisée par :
 Date_Ouverture 58
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Les Occurrences
 Occurrence d'un attribut
 Ensemble des valeurs que peut prendre un attribut.
 Exemple :
Alami, Rmaily et Bennani sont des occurrences de la l’attribut
Nom_Client.
 Occurrence d’une entité
 Un ensemble d'occurrences de chacune des attributs de l’entité.
 Exemple :
 L'ensemble (A1200-78, Alami, Casa) constitue une occurrence de
l'individu Client.

59
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 L’ Identifiant (la clé)

 Un ou plusieurs attributs permettant de distinguer de manière unique et sans


ambiguïté les différentes occurrences d'une entité.

 Exemple :

 N°Client est l'identifiant de l'entité Client, car deux clients ne peuvent pas
avoir le même numéro.

60
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Exemple d’entité :

Nom de l’entité Client


Code_Client
L’identifiant
Nom_Client
P rénom_Client
Liste des attributs
A dresse_Client
61
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Exemple d’association :

Nom de l’association

Propriété

62
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Exercice:
Soient les règles de gestions suivantes :
 Un client peut passer plusieurs commandes,
 Une commande est passée par un et un seul client.
 Une commande se compose de plusieurs produits
 Un produit peut être livré par plusieurs fournisseurs.

1. Extraire les entités du problème.


2. Représenter la structure du problème en utilisant le formalisme entité association .

63
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Correction:
Client Commande
Passer

Composer

Fournisseur Produit
Livrer

64
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Dimension d'une association


 Le nombre d'entités concernées par l’association.
 Une association peut être
 Unaire
 Binaire
 Ternaire
 n-aire

65
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Association unaire (Réflexive)

Encadré par

Encadre

66
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Association binaire

67
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Association ternaire

68
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Remarque:
Plusieurs associations peuvent exister entre deux entités
 Exemple:

69
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Cardinalités

 Mesurent la participation minimale et maximale de l'entité à l’association.

 Les cardinalités sont notées sous la forme de (X, Y) où :

 X : cardinalité minimale

 Y : cardinalité maximale

70
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Exemple :

 Un client possède au moins un (1) compte bancaire, comme il peut en posséder plusieurs
(N). D'où les cardinalités (1, N).
 Un compte bancaire appartient à un client et un seul, d'où les cardinalités (1, 1).
71
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Cardinalités

 (0,1) : une occurrence de l'entité ne participe jamais plus d'une fois à l’association
 (1,1) : une occurrence de l'entité participe toujours une et une seule fois à
l’association
 (1, N) : une occurrence de l'entité participe toujours au moins une fois à l’association
 (0, N) : une occurrence de l'entité peut participer plusieurs fois à l’association

72
LE MODÈLE CONCEPTUEL DE DONNÉES (MCD)

 Démarche à suivre pour produire le MCD


1. Déterminer les entités
2. Déterminer les attributs des entités
3. Déterminer les identifiants des entités
4. Déterminer les associations entre entités
5. Déterminer les attributs des associations
6. Évaluer les cardinalités des associations

73
ETUDE DE CAS : MODÉLISATION D’UN ZOO

 Les entités :
 Animal : nom, sexe, date_naissance, date_d’arrivée, remarque, idAnimal
 Espèce : nom_scientifique, population

 Nourriture : nom_aliment
 Régions géographique : libellé_Zone (Afrique centrale, )
 Associations

 Un animal appartient à une espèce (éléphant d'Afrique)

 Une espèce vit dans plusieurs régions géographiques avec un effectif estimatif.
 Un animal mange la nourriture avec une quantité.
74
ETUDE DE CAS : MODÉLISATION D’UN ZOO

Animal
Espèce
idAnimal
Nom 1,1 Appartenir 1,n nom scientifique
Sexe population
Date_naissance
Date_d’arrivée
Remarque
1,n
1,n
Vivre
Manger
Effectif
Quantité

1,n 1,n
Nourriture Régions
Nom_aliment Libellé_Zone

75
ETUDE DE CAS : GESTION DE COMMANDES

 Spécifications:
 Les clients d’un magasin sont caractérisés par un numéro de client, leur nom, prénom,
date de naissance, rue, code postal et ville.
 Ils font des commandes à une date donnée.
 Les commandes contiennent des produits avec des quantités.
 Les produits sont caractérisés par leur numéro de produit, leur désignation et leur prix
unitaire.
 Chaque produit est fourni par un fournisseur unique (mais un fournisseur peut fournir
plusieurs produits).
 Les fournisseurs sont caractérisés par un numéro de fournisseur et leur raison sociale.
76
ETUDE DE CAS : GESTION DE COMMANDES

77
VÉRIFICATION ET NORMALISATION

 La vérification
On dit qu’un modèle conceptuel est vérifié s’il répond aux conditions suivantes :
 Touts les attributs non calculés sont présents dans une entité ou une relation dans le
cas du modèle de MERISE
 Aucun attribut n’est redondant
 Toutes les entités ont un identifiant
 Tous les attributs sont élémentaires (non décomposable ou se traitent comme un tout,
exemple l’attribut adresse peut-être décomposable)

78
VÉRIFICATION ET NORMALISATION

 La normalisation du modèle entités/associations

Les règles de normalisation du modèle conceptuel permettent d’assurer :

 La non redondance des données;

 L’intégrité des données;

 La facilité de mise à jour Lors de la normalisation d’un modèle de données (peu importe
le niveau de modélisation, de conceptualisation ou de représentation) nous devons avoir
au mois la 3eme forme normale.

79
VÉRIFICATION ET NORMALISATION

 1FN - Première forme normale


Une relation est en première forme normale si ces attributs :
 Sont atomique (non divisible).
Etudiant Etudiant
nomPrenom Nom
Prenom
 Ne contiennent pas de valeurs répétitives (pas de liste, pas de tableaux).
Etudiant Etudiant Notes
Avoir
notes Note 1
Note 2
 Constant dans le temps
Etudiant Etudiant
age Date_naissance

80
VÉRIFICATION ET NORMALISATION

 2FN - Deuxième forme normale


Une relation est en deuxième forme normale si :
 Elle est en 1FN;
 Les attributs non clés dépendant fonctionnellement de la totalité de la clé et non pas
d’une partie de la clé .

commande
Article
0,n Commander 1,n
CodeA CodeC
CodeA, CodeC

Quantité commandée ???

81
VÉRIFICATION ET NORMALISATION

 3FN - troisième forme normale


Une relation est en troisième forme normale si :
 Elle est en 2FN;
 Tous les attributs n’appartenant pas a la clés ne dépendant pas d’un attribut non-clé .

Etudiant Etudiant Module


Suivre
Code_etu Code_etu Code_module
Nom Nom Intitulé_module
Prenom Prenom
Code_module
Intitulé_module

82
VÉRIFICATION ET NORMALISATION
 FNBC - Forme normale de Boyce-Codd
Une relation est en FNBC si :
 Elle est en 3FN;
 Seules les dépendances fonctionnelles sont du type clé  attribut non-clé.
 Si un attribut non-clé permet de déterminé un attribut clé la relation n’est pas en FNBC.

 Inscription (id_Etudiant, Id_Cours, Enseignant)  Inscription (id_Etudiant, Id_Enseignant)


 Enseignant (Id_Enseignant, Nom_ Enseignant, Cours)
Id_Etudiant Id_Cours Enseignan Id_Etudiant Id_Enseignant Id_Enseignant Nom_ Cours
t 1 1 Enseignant
1 BD Alami 1 2 1 Alami BDD
1 C Rmaily 2 2 2 Rmaily C
2 C Rmaily 3 3 3 Nasiri C++
3 C++ Nasiri
83
VÉRIFICATION ET NORMALISATION

 Autres formes normales

 La quatrième, cinquième et sixième formes normales évitent principalement la redondance


des informations, elles sont plus précises.

 En pratique la forme normale de Boyce-Codd est suffisante.

 La projection et les jointures sont couteuses pour le système, ainsi une trop forte
normalisation diminue fortement les performances.

84
CHAPITRE 3:
LE MODÈLE RELATIONNEL:
MODÈLE LOGIQUE DES DONNÉES (MLD)

85
LE MODÈLE RELATIONNEL:
MODÈLE LOGIQUE DES DONNÉES (MLD)

 Le Modèle Conceptuel De Données (MCD) décrit les données indépendamment du logiciel


utilisé (concepts)

 Le Modèle Logique Des Données (MLD) :

 Représente les données du MCD en tenant compte du logiciel de gestion choisi;

 Traduit le MCD en formalisme compréhensible par la machine.

 Le plus utilise est le modèle relationnel associe aux bases de données relationnelles
(Oracle, Informix, SQLserver,..., Access, mySQL, postgreSQL...)
86
LE MODÈLE RELATIONNEL:
MODÈLE LOGIQUE DES DONNÉES (MLD)

 Inventé par Edgar Frank Codd en 1970


 Utilise les relations pour représenter les données
 Manipule plusieurs concepts :
 Tables ou Relation
 Clé primaire
 Clé étrangère
 …

87
LE MODÈLE RELATIONNEL:
MODÈLE LOGIQUE DES DONNÉES (MLD)

 Relation ou table: représentée par un tableau constitué:


 d’un Nombre fixé de colonnes (champs)
 d’un Nombre arbitraire de lignes (enregistrements)

 Clé primaire (Primary Key)


 Chaque table doit avoir une clé primaire
 La clé identifie de manière unique et sans ambiguïté les enregistrements
d’une table
 La clé peut être concaténée

 Exemples
 Clients (Code, Nom, …)
 Détails_Cdes (NBC, Ref, QtéC)

88
LE MODÈLE RELATIONNEL:
MODÈLE LOGIQUE DES DONNÉES (MLD)

 Clé étrangère
 Un simple champ qui joue le rôle de clé primaire dans une autre table
 Permet d’établir des liaisons entre tables (utilisée dans les jointures)

 Exemple
 Clients (Code, Nom, …)
 Commandes (NBC, DateC, #Code)

89
PASSAGE DU MCD AU MLD RELATIONNEL

 Règle 1
 Chaque entité du MCD se transforme en une table du MLD
 Les attributs deviennent des champs;
 L’identifiant devient la clé primaire.
 Exemple:

90
PASSAGE DU MCD AU MLD RELATIONNEL

 Règle 2 (Association de type X,1 - X,N)


 Si l’association est de type (X,1) - (X,N), avec X ∈ {0,1} alors:
 L’association disparaît
 L’identifiant de l’entité de cardinalité (X,N) devient clé étrangère dans la table
issue de l’entité de cardinalité (X,1)
 Les attributs de l’association deviennent des champs de la table issue de l’entité
de cardinalité (X,1)

91
PASSAGE DU MCD AU MLD RELATIONNEL

 Règle 2 (Association de type X,1 - X,N)


 Exemple:

CLIENT (code_client, Nom, Prénom, Adresse, code_postal, téléphone)


COMMANDE (numero_commande, date, état, montant_total, #code_client)

92
PASSAGE DU MCD AU MLD RELATIONNEL

 Règle 3 (Association de type X,N - X,N)


 Si l’association est de type (X,N) - (X,N), avec X ∈ {0,1} alors:
 L’association devient une nouvelle table;
 Les attributs de l’association deviennent des champs de la nouvelle table;
 La clé primaire de la nouvelle table est la concaténation des identifiants des
entités qui participent à l’association;
 Les identifiants des entités participantes vont devenir des clés étrangères vers
leurs tables respectives.

93
PASSAGE DU MCD AU MLD RELATIONNEL

 Règle 3 (Association de type X,N - X,N)


 Exemple:

COMMANDE (numero_commande, date, etat, montant_total)


ARTICLE (référence_article, designation, prix_unitaire_de_vente)
CONCERNER (#numéro_commande, #référence_article, quantité)
94
PASSAGE DU MCD AU MLD RELATIONNEL

 Règle 4 (Association de type 0,1 - 1,1)


 Dans ce cas, la clé primaire de la table issue de l'entité du côté des cardinalités (0,1)
devient une clé étrangère dans la table issue de l'entité du côté des cardinalités (1,1).
 Exemple:

CITOYEN (Num_Citoyen, Nom, Prénom, Adresse)


CANDIDAT (Num_Candidat, Parti, #Num_Citoyen)
95
CONTRAINTES D’INTÉGRITÉ

 Les contrainte d’integrité:


 de structure : valeur de la clé primaire unique et toujours définie,
 de domaine : les valeurs prises par un attribut doivent vérifier des contraintes,
 de référence : les valeurs d’une clé étrangère doivent correspondre à des
valeurs existantes dans la table d’origine.
 La vérification des contraintes assurent que la base reste intègre.
 Cette vérification s’effectue, soit directement par le système de gestion de
bases de données utilisé quand c’est possible, soit par l’écriture de
programmes.
96
EXERCICE

Transformez le MCD suivant en un MLD en respectant toutes les règles du passage MCD au MLD.

97
Solution

Client (Num_Client, Nom, Prenom, Date_Naissance, Rue, Code_Postal, Ville)

Fournisseur (Num_Fournisseur, Raison_Sociale)

Produit (Num_Produit, Designation, Prix_Unitaire, #Num_Fournisseur)

Commander (#Num_Client, #Num_Produit, Date_Commande, Quantite)

98
EXERCICE

Transformez le MCD suivant, qui représente «la gestion d'une école» en un MLD en respectant
toutes les règles du passage MCD au MLD.

99
SOLUTION

Elève (NoMatricule, Nom, Prénom, Date_naissance)


Classe (Nom_Classe, Cycle)
Matière (Code_Matière, Libellé)
Professeur (Code_Prof, Nom, Prénom)
Fréquenter (#NumMatricule, #NumClasse, Année_Scolaire)
Enseigner (#CodeProf, #CodeMatière, #NumClasse, Année)

100
MODÈLE PHYSIQUE DES DONNÉES (MPD)
 Le Modèle Physique Des Données (MPD) précise notamment le stockage de chaque donnée
(champs ou attribut) à travers son type et sa taille (en octets ou en bits).
 Les types de données peuvent varier selon les systèmes de gestion de bases de données.
 Champs numériques

101
MODÈLE PHYSIQUE DES DONNÉES (MPD)

 Champs alpha-numériques et binaires

 Champs date et heure

102
PASSAGE VERS MODÈLE PHYSIQUE DES DONNÉES
(MPD)

 MCD
CLIENT COMMANDE
code_client 1,n PASSER 1,1 numero_commande
Nom Date
Prénom État
Adresse montant_total
 MLD

CLIENT (code_client, Nom, Prénom, Adresse)


COMMANDE (numero_commande, date, état, montant_total, #code_client)
 MPD COMMANDE
CLIENT
numero_commande int
code_client int Date date
Nom varchar (30) État varchar
Prénom varchar (30) Passer: 1,1
(30)
Adresse varchar (50) montant_total double
103
#code_client int
PASSAGE VERS MODÈLE PHYSIQUE DES DONNÉES
(MPD)

 MCD

 MLD
COMMANDE (numero_commande, date, etat, montant_total)
ARTICLE (référence_article, designation, prix_unitaire_de_vente)
CONCERNER (#numéro_commande, #référence_article, quantité)
 MPD CONCERNER_ COMMANDE: 1,n
COMMANDE CONCERNER ARTICLE
numero_commande int #numéro_commande int référence_article varchar (30)
Date date #référence_article varchar (30) Designation varchar (30)
État varchar Quantité int prix_unitaire_de_vente double
(30)
montant_total double 104 CONCERNER_ ARTICLE: 0,n
CHAPITRE 4:
LE LANGAGE SQL
(STRUCTURED QUERY LANGUAGE)

105
INTRODUCTION

 Un SGBD doit permettre la manipulation de la structure de la base de données, comme


l'ajout et la modification de champs, de manière transparente.
 Pour réaliser ces opérations avec l'indépendance souhaitée par rapport à la
représentation, le SGBD offre trois langages de haut niveau :
 Langage de Définition de Données (LDD) qui permet d'agir sur la structure de la
base de données (ajout, suppression et modification 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.

106
LANGAGE SQL

 SQL est un langage de manipulation de données qui est devenu un standard dans le
monde des bases de données.

 Il simplifie la manipulation des tables en autorisant la recherche d'informations et la


mise à jour des relations par l'intermédiaire de requêtes.

 SQL contient l’aspect :


 LDD
 LMD
 LID

107
LANGAGE DE DÉFINITION DE DONNÉES
(LDD)

108
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Le langage de définition de données (LDD) est un langage orienté au niveau de la


structure de la base de données.

 Le LDD permet de créer, modifier, supprimer des objets.

 Il permet également de définir le type des données (nombre, chaîne de caractères, date,
booléen…) et d'ajouter des contraintes de valeur sur les données.

 Il permet enfin d'autoriser ou d'interdire l'accès aux données.

 Les instructions du LDD sont : CREATE, ALTER, DROP, ANALYZE, RENAME,


TRUNCATE.

109
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Création d’une base de données: CREATE DATABASE

 La création d’une base de données en SQL est possible en ligne de commande. Même
si les systèmes de gestion de base de données (SGBD) sont souvent utilisés pour créer
une base, il convient de connaître la commande à utiliser, qui est très simple.

 Pour créer une base de données qui sera appelé « ma_base » il suffit d’utiliser la
requête suivante :

CREATE DATABASE ma_base;

 N’oublier pas le point virgule.


110
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

⌘ Création d’une table: CREATE TABLE

 Une table est un ensemble de lignes et de colonnes.

 La création consiste à définir le nom de ces colonnes, leur format (type), la valeur par
défaut à la création de la ligne (DEFAULT) et les règles de gestion s'appliquant à la
colonne (CONSTRAINT).
 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 type,
nom_col2 type,
... );

111
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Exemple :
CREATE TABLE Etudiant

CNE INT,    
nom VARCHAR(20),    
prenom VARCHAR(20),    
date_naissance DATE,
email VARCHAR(25),
ville VARCHAR(25),
pays VARCHAR(25)
);
112
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Contraintes d’intégrité
Lors de la création de la table, il faut spécifier les contraintes que doit respecter le contenu de
la table, pour assurer l’intégrité de la base:

 Un attribut doit toujours avoir une valeur (contrainte Not NULL)


 La valeur d’un attribut doit être unique au sein de la relation (UNIQUE)
 Clé de la relation (PRIMARY KEY)
 Intégrité référentielle: un attribut dans une table est lié à la clé primaire d’une autre
table (Clé étrangère FOREIGN KEY)

113
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Contraintes d’intégrité

 Valeur par défaut d’un attribut (DEFAULT valeur)


 Vérification d’une condition lors de l’insertion des données d’un attribut
(CHECK condition)
 Règle s’appliquant à la valeur d’un attribut (min et max par exemple)

114
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Exemple : PRIMARY KEY

CREATE TABLE CLIENT


(
ID_CLIENT INT(20) NOT NULL PRIMARY KEY AUTO_INCREMENT,
NOM_CLIENT CHAR(32) NOT NULL
);

115
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Exemple : FOREIGN KEY REFERENCES


CREATE TABLE FACTURE
(
FCT_ID INT NOT NULL PRIMARY KEY,
ID_CLIENT INT NOT NULL FOREIGN KEY REFERENCES
CLIENT (ID_CLIENT),
FCT_DATE DATETIME NOT NULL DEFAULT
CURRENT_TIMESTAMP ,
FCT_MONTANT DECIMAL (16,2) NOT NUL
116
);
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Exemple : UNIQUE

CREATE TABLE personne


(
PRS_NOM VARCHAR(32),
PRS_PRENOM VARCHAR(32),
PRS_TELEPHONE CHAR(14) UNIQUE
);

117
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Exemple : DEFAULT

CREATE TABLE personne2


(
PRS_ID INT,
PRS_NOM VARCHAR(32),
PRS_PRENOM VARCHAR(32),
PRS_SEXE CHAR(1) DEFAULT 'M',
PRS_DATE_NAISSANCE DATE DEFAULT CURRENT_DATE
); 118
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Exemple : CHECK

CREATE TABLE personne3


(
PRS_ID INT CHECK (VALUE > 0),
PRS_NOM VARCHAR(32) CHECK (CHARACTER_LENGTH(VALUE) > 2),
PRS_PRENOM VARCHAR(32) ,
PRS_SEXE CHAR(1) CHECK (VALUE IN ('M', 'F')
);
 La colonne PRS_ID ne peut avoir de valeurs inférieures à 0.
 La colonne PRS_NOM doit avoir des valeurs contenant au moins 3 caractères.
 La colonne PRS_SEXE peut avoir exclusivement les valeurs M ou F.
119
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Exemple : CONSTRAINT

CREATE TABLE CLIENT


(
CLI_NOM CHAR(32) NOT NULL,
CLI_PRENOM VARCHAR(32) NOT NULL,
CONSTRAINT PK_CLIENT PRIMARY KEY (CLI_NOM, CLI_PRENOM)
);

120
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Exemple 2 : CONSTRAINT

CREATE TABLE personne


(
PRS_ID INT,
PRS_NOM VARCHAR(32),
PRS_PRENOM VARCHAR(32),
CONSTRAINT UNI_NOM_PRENOM UNIQUE (PRS_NOM,
PRS_PRENOM)
); 121
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Suppression d'une table: DROP

 Supprimer une table revient à éliminer sa structure et toutes les données qu'elle
contient.

 Les index associés sont également supprimés.

 La syntaxe est la suivante :

DROP TABLE nom_table;

122
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Suppression d'une table

 Attention : il faut utiliser cette commande avec attention car une fois supprimée, les
données sont perdues. Avant de l’utiliser sur une base importante il peut être judicieux
d’effectuer un backup (une sauvegarde) pour éviter les mauvaises surprises.

 Intérêts Il arrive qu’une table soit créé temporairement pour stocker des données qui
n’ont pas vocation à être ré-utiliser. La suppression d’une table non utilisée est
avantageux sur plusieurs aspects :
 Libérer de la mémoire et alléger le poids des backups
 Éviter des erreurs dans le futur si une table porte un nom similaire ou qui porte à
123
confusion
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Vider une table: TRUNCATE TABLE

 En SQL, la commande TRUNCATE permet de supprimer toutes les données d’une


table sans supprimer la table en elle-même. En d’autres mots, cela permet de purger la
table.

 Cette instruction diffère de la commande  DROP  qui à pour but de supprimer les
données ainsi que la table qui les contient.

TRUNCATE TABLE nom_table;

124
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Modification d'une table : ALTER TABLE

 L'instruction ALTER TABLE permet:


 d'ajouter une nouvelle colonne;
 de modifier une colonne existante;
 de définir une valeur par défaut pour une nouvelle colonne;
 de supprimer une colonne.
 Vous pouvez ajouter une colonne à la table existante.
ALTER TABLE nom_table
ADD nom_colonne types_données ;
125
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Exemple:
 Pour ajouter une colonne qui correspond à une rue sur une table utilisateur, il est possible
d’utiliser la requête suivante:

ALTER TABLE utilisateur ADD adresse_rue VARCHAR(255);


 La nouvelle colonne est placée à la fin de la table.
Code Nom Prénom Tél
12 Alaoui Said 066623412 Table utilisateur
13 Samadi Anas 052368793

Code Nom Prénom Tél. Adresse_rue

Après le requête 12 Alaoui Said 066623412


13 Samadi Anas 052368793
126

LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Modification d'une table : ALTER TABLE


 Vous pouvez modifier le type de données, la taille et la valeur par défaut d'une colonne.

ALTER TABLE nom_table

MODIFY nom_colonne type_donnees;

Exemple:

ALTER TABLE utlisateur


MODIFY Nom VARCHAR(60);

127
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Modification d'une table : ALTER TABLE


 La clause DROP COLUMN permet de supprimer d'une table les colonnes qui ne sont plus
utiles.
ALTER TABLE nom_table
DROP COLUMN nom_colonne;

Ou

ALTER TABLE nom_table


DROP nom_colonne;

128
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Modification d'une table : ALTER TABLE


 Exemple :

ALTER TABLE utilisateur Code Nom Prénom Tél


12 Alaoui Said 066623412
DROP COLUMN Tél;
13 Samadi Anas 052368793

Code Nom Prénom


12 Alaoui Said
13 Samadi Anas

129
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Modification d'une table : ALTER TABLE

 Pour renommer une colonne, il convient d’indiquer l’ancien nom de la colonne et le


nouveau nom de celle-ci.

ALTER TABLE nom_table


RENAME COLUMN colonne_ancien_nom To colonne_nouveau_nom;

130
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Modification d'une table : ALTER TABLE


 Exemple :

Code Nom Prénom Tél


ALTER TABLE utilisateur
12 Alaoui Said 066623412
RENAME Tél To Phone; 13 Samadi Anas 052368793

Code Nom Prénom Phone


12 Alaoui Said 066623412
13 Samadi Anas 052368793

131
LANGAGE DE DÉFINITION DE DONNÉES (LDD)

 Modification d'une table : ALTER TABLE

 Renommer une table :


ALTER TABLE nom_table
RENAME To nouveau_nom ;
 Exemple :
ALTER TABLE utlisateur
RENAME To personne ;

132
LANGAGE DE MANIPULATION DE DONNÉES
(LMD)

133
134
LANGAGE DE MANIPULATION DE DONNÉES (LMD)

Insertion des données

 L’insertion de données dans une table s’effectue à l’aide de la commande INSERT INTO.

 Cette commande permet au choix d’inclure une seule ligne à la base existante ou plusieurs
lignes d’un coup.

134
135

LANGAGE DE MANIPULATION DE DONNÉES (LMD)

Insertion des données : INSERT INTO

Insertion d’une ligne à la fois :

 Insérer une ligne en indiquant les informations pour chaque colonne existante (en respectant
l’ordre). La syntaxe est la suivante :

INSERT INTO nom_table VALUES ('valeur 1', 'valeur 2', ...);

 Il est possible d’insérer une ligne renseignant seulement une partie des colonnes que vous
souhaiter . Cette deuxième solution est très similaire, excepté qu’il faut indiquer le nom des
colonnes avant « VALUES ». La syntaxe est la suivante :

INSERT INTO table (nom_colonne_1, nom_colonne_2, ...) VALUES ('valeur 1', 'valeur 2', ...);

135
136

LANGAGE DE MANIPULATION DE DONNÉES (LMD)

Insertion des données : INSERT INTO

 Insertion de plusieurs lignes à la fois :

 Il est possible d’ajouter plusieurs lignes à une table avec une seule requête. Pour ce faire, il
convient d’utiliser la syntaxe suivante :
INSERT INTO client (nom, prenom, ville, age) VALUES ('Alami', 'Saad', 'Casablanca', 24),
('Sbaii', 'Bader', 'Kénitra', 36), ('Rahimi', 'Ali', 'Mohammedia', 27);

Id nom prenom ville age

1 Alami Saad Casablanca 24

2 Sbaii Bader Kénitre 36

3 Rahimi Ali 136 Mohammedia 27


LANGAGE DE MANIPULATION DE DONNÉES (LMD)

 Modification des enregistrements : UPDATE

 La commande UPDATE permet d’effectuer des modifications sur les enregistrements


existantes. Très souvent cette commande est utilisée avec WHERE pour spécifier sur
quelles lignes doivent porter la ou les modifications.

 La syntaxe basique d’une requête utilisant UPDATE est la suivante :

UPDATE nom_table SET nom_colonne_1 = 'nouvelle valeur'


WHERE condition;
 Cette syntaxe permet d’attribuer une nouvelle valeur à la colonne nom_colonne_1 pour les
lignes qui respectent la condition stipulé avec WHERE

137
LANGAGE DE MANIPULATION DE DONNÉES (LMD)

 Modification des enregistrements : UPDATE

 Il est aussi possible d’attribuer la même valeur à la colonne nom_colonne_1 pour toutes les
lignes d’une table si la condition WHERE n’était pas utilisée.

 Pour spécifier en une seule fois plusieurs modifications, il faut séparer les attributions de valeur
par des virgules. Ainsi la syntaxe deviendrait la suivante :

UPDATE table SET colonne_1 = 'valeur 1', colonne_2 = 'valeur 2', colonne_3 = 'valeur 3'

WHERE condition;

138
LANGAGE DE MANIPULATION DE DONNÉES (LMD)

 Modification des enregistrements : UPDATE

 Exemple

Imaginons une table « client » qui présente les coordonnées de clients.


id prenom rue ville code_postal pays

1 Rachid Mohamed V Casablanca 92800 Maroc

2 Said la victoire Rabat 51300 Maroc

3 Romain liberté Fès 35190 Maroc

 Modifier une ligne


Pour modifier l’adresse du client Said?
139
LANGAGE DE MANIPULATION DE DONNÉES (LMD)

 Modification des enregistrements : UPDATE

 Exemple

UPDATE client SET rue = 'Fars', ville = 'Salé', code_postal = '14500' WHERE id = 2;

id prenom rue ville code_postal pays

1 Rachid Mohamed V Casablanca 92800 Maroc

2 Said Fars Salé 14500 Maroc

3 Romain liberté Fès 35190 Maroc

140
LANGAGE DE MANIPULATION DE DONNÉES (LMD)

 Modification des enregistrements : UPDATE


 Modifier toutes les lignes
 Il est possible d’effectuer une modification sur toutes les lignes en omettant d’utiliser
une clause conditionnelle.
 Il est par exemple possible de mettre la valeur «Morocco» dans la colonne « pays »
pour toutes les lignes de la table, grâce à la requête SQL ci-dessous.
 UPDATE client SET pays = 'Morocco';
id prenom rue ville code_postal pays

1 Rachid Mohamed V Casablanca 92800 Morocco

2 Said Fars Salé 14500 Morocco

3 Romain liberté Fès 35190 Morocco

141
142

LANGAGE DE MANIPULATION DE DONNÉES (LMD)

 Suppression des données: DELETE FROM


• La commande DELETE en SQL permet de supprimer des lignes dans une table.

• En utilisant cette commande associé à WHERE il est possible de sélectionner les lignes
concernées qui seront supprimées.

• La syntaxe pour supprimer des lignes est la suivante :

DELETE FROM table WHERE condition;

• Attention : s’il n’y a pas de condition WHERE alors toutes les lignes seront supprimées et
la table sera alors vide

142
143

LANGAGE DE MANIPULATION DE DONNÉES (LMD)

 Suppression des données: DELETE FROM

 Exemple

Imaginons une table « Etudiant » qui contient des informations sur les étudiants d’un
établissement.
id nom prenom date_inscription
1 Samadi Said 2022-02-13
2 Fellah Amina 2022-04-03
3 Alami Kaouter 2022-04-12
4 Sabbar Latifa 2022-06-24
5 Raiss Nabil 2022-07-02

 Supprimer une ligne


Supprimer la ligne de l’étudiant dont id est 1 (càd la première ligne)

143
144

LANGAGE DE MANIPULATION DE DONNÉES (LMD)

 Suppression des données: DELETE FROM

 Exemple

DELETE FROM Etudiant WHERE id = 1;

id nom prenom date_inscription


2 Fellah Amina 2022-04-03
3 Alami Kaouter 2022-04-12
4 Sabbar Latifa 2022-06-24
5 Raiss Nabil 2022-07-02

144
145

LANGAGE DE MANIPULATION DE DONNÉES (LMD)

 Suppression des données: DELETE FROM


 Supprimer plusieurs lignes

Si l’ont souhaite supprimer les utilisateurs qui se sont inscrit avant le 10/04/2022, il va
falloir effectuer la requête suivante :

DELETE FROM Etudiant WHERE date_inscription< '2022-04-10';

La requête permettra alors de supprimer les utilisateurs «Samadi» et «Fellah». La table


contiendra alors les données suivantes :
id nom prenom date_inscription
3 Alami Kaouter 2022-04-12
4 Sabbar Latifa 2022-06-24
5 Raiss Nabil 2022-07-02

145
146

LANGAGE DE MANIPULATION DE DONNÉES (LMD)

 Suppression des données: DELETE FROM


 Supprimer toutes les données

Pour supprimer toutes les lignes d’une table il convient d’utiliser la commande DELETE
sans utiliser de clause conditionnelle.

DELETE FROM Etudiant;


TRUNCATE TABLE Etudiant;

146
LANGAGE D’INTERROGATION DE DONNÉES SQL
(LID)

147
148

LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

 L’utilisation la plus courante de SQL consiste à lire des données issues de la base de
données: interrogation de la base de données.

 Cela s’effectue grâce à la commande SELECT, qui retourne des enregistrements dans un
tableau de résultat.

 Cette commande peut sélectionner une ou plusieurs colonnes d’une table.

148
149

LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sélectionner des données: SELECT

L’utilisation basique de cette commande s’effectue de la manière suivante:

SELECT nom_du_champ FROM nom_du_tableau;

Cette requête SQL va sélectionner (SELECT) le champ « nom_du_champ » provenant


(FROM) du tableau appelé « nom_du_tableau ».

149
150

LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sélectionner des données: SELECT

 Exemple
Imaginons une table appelée « client » qui contient des informations sur les clients d’une entreprise.
identifiant prenom nom ville
1 Ali Allaoui Casa
2 Ahmed Alami Fes
3 Jawad Lotfi Tanger
4 Ute Dubois Rabat
5 khadija Mandel Dakhla

 On veut avoir la liste de toutes les villes des clients, il suffit d’effectuer la requête SQL suivante :
150
151

LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sélectionner des données: SELECT

 Exemple

SELECT ville FROM client;

De cette manière on obtient le résultat suivant :


ville
Casa
Fes
Tanger
Rabat
Dakhla

151
152

LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sélectionner des données: SELECT


 Obtenir plusieurs colonnes

 Avec la même table client il est possible de lire plusieurs colonnes à la fois. Il suffit tout
simplement de séparer les noms des champs souhaités par une virgule.

 Pour obtenir les prénoms et les noms des clients il faut alors faire la requête suivante:

SELECT prenom, nom FROM client;

 Ce qui retourne ce résultat:

152
153

LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sélectionner des données: SELECT


 Obtenir plusieurs colonnes

prenom nom
Ali Allaoui
Ahmed Alami
Jawad Lotfi
Ute Dubois
khadija Mandel

153
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sélectionner des données: SELECT

 Obtenir toutes les colonnes d’un tableau

Il est possible de retourner automatiquement toutes les colonnes d’un tableau sans avoir à
connaître le nom de toutes les colonnes. Au lieu de lister toutes les colonnes, il faut
simplement utiliser le caractère « * » (étoile). Il s’utilise de la manière suivante:

SELECT * FROM client;

154
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sélectionner des données: SELECT


 Obtenir toutes les colonnes d’un tableau

Le résultat est le suivant:

identifiant prenom nom ville


1 Ali Allaoui Casa
2 Ahmed Alami Fes
3 Jawad Lotfi Tanger
4 Ute Dubois Rabat
5 khadija Mandel Dakhla

155
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sélection avec condition: SELECT … WHERE


 La commande WHERE dans une requête SQL permet d’extraire les lignes d’une base de données
qui respectent une condition. Cela permet d’obtenir uniquement les informations désirées.

 Syntaxe
La commande WHERE s’utilise en complément à une requête utilisant SELECT.
La façon la plus simple de l’utiliser est la suivante:

SELECT nom_colonnes FROM nom_table


WHERE condition;

Nom_de_champs Operateur Valeur.

156
157

LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sélectionner des données: SELECT

 Exemple
Imaginons une table appelée « client » qui contient des informations sur les clients d’une entreprise.
identifiant prenom nom ville
1 Ali Allaoui Dakhla
2 Ahmed Alami Fes
3 Jawad Lotfi Tanger
4 Ute Dubois Rabat
5 khadija Mandel Dakhla
 Pour obtenir seulement la liste des clients qui habitent à Dakhla, il faut effectuer la requête
suivante:
SELECT * FROM client WHERE ville = 'Dakhla';
157
158

LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sélectionner des données: SELECT

 Exemple
Le résultat est le suivant:
identifiant prenom nom ville
1 Ali Allaoui Dakhla
5 khadija Mandel Dakhla

158
159

LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sélectionner des données: SELECT


 Opérateurs de comparaisons
Il existe plusieurs opérateurs de comparaisons. La liste ci-jointe présente quelques uns des
opérateurs les plus couramment utilisés.
Opérateur Description
= Égale
<> Pas égale
!= Pas égale
> Supérieur à
< Inférieur à
>= Supérieur ou égale à
<= Inférieur ou égale à

IN Liste de plusieurs valeurs possibles

BETWEEN Valeur comprise dans un intervalle donnée (utile pour les nombres ou dates)

LIKE Recherche en spécifiant le début, milieu ou fin d'un mot.


IS NULL Valeur est nulle
IS NOT NULL Valeur n'est pas nulle

159
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL AND & OR


 Une requête SQL peut être restreinte à l’aide de la condition WHERE. Les
opérateurs logiques AND et OR peuvent être utilisées au sein de la commande
WHERE pour combiner des conditions.
 Les opérateurs sont à ajoutés dans la condition WHERE. Ils peuvent être combinés à
l’infini pour filtrer les données comme souhaités.
 L’opérateur AND permet de s’assurer que la condition1 ET la condition2 sont vraies:
SELECT nom_colonnes FROM nom_table WHERE condition1 AND condition2;
 L’opérateur OR vérifie quant à lui que la condition1 OU la condition2 est vraie :
SELECT nom_colonnes FROM nom_table WHERE condition1 OR condition2;
160
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL AND & OR


 Exemple
Pour illustrer les prochaines commandes, nous allons considérer la table « produit » suivante :
id nom categorie stock prix
1 ordinateur informatique 5 950
2 clavier informatique 32 35
3 souris informatique 16 30
4 crayon fourniture 147 2

 Filtrer uniquement les produits informatiques qui sont presque en rupture de stock (moins de 20
produits disponibles) il faut exécuter la requête suivante :
SELECT * FROM produit WHERE categorie = 'informatique' AND stock < 20;
161
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL AND & OR


 Exemple
La requête retourne les résultats suivants :

id nom categorie stock prix


1 ordinateur informatique 5 950
3 souris informatique 16 30

162
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL AND & OR


 Exemple
 Filtrer les produits « informatique » avec un stock inférieur à 20 Ou les produits
« fourniture » avec un stock inférieur à 200

SELECT * FROM produit


WHERE ( categorie = 'informatique' AND stock < 20 ) OR ( categorie = 'fourniture'
AND stock < 200 );
id nom categorie stock prix
1 ordinateur informatique 5 950
3 souris informatique 16 30
4 crayon fourniture 147 2
163
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ SQL IN, NOT IN
 L’opérateur logique IN dans SQL  s’utilise avec la commande WHERE pour vérifier si
une colonne est égale à une des valeurs comprise dans set de valeurs déterminés.

 C’est une méthode simple pour vérifier si une colonne est égale à une valeur OU une autre
valeur OU une autre valeur et ainsi de suite, sans avoir à utiliser de multiple fois
l’opérateur OR.

 Syntaxe

Pour chercher toutes les lignes où la colonne « nom_colonne » est égale à ‘valeur 1’ OU
‘valeur 2’ OU ‘valeur 3’, il est possible d’utiliser la syntaxe suivante:

SELECT nom_colonne FROM table

WHERE nom_colonne IN ( valeur1, valeur2, valeur3, ... );


164
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL IN, NOT IN


 Exemple
Imaginons une table « adresse » qui contient une liste d’adresses associée à des utilisateurs d’une
application.

id_utilisateur addr_num addr_rue addr_code_postal addr_ville

23 35 Madeleine Pelletier 25250 Bournois

43 21 Moulin Collet 75006 Paris


65 28 Cornouaille 27220 Mousseaux-Neuville
67 41 Marcel de la Provoté 76430 Graimbouville
68 18 Navarre 75009 Paris

 On souhaite obtenir les enregistrements des adresses de Paris ou de Graimbouville, il est possible
d’utiliser la requête suivante:
SELECT * FROM adresse WHERE addr_ville = 'paris' OR addr_ville = 'Graimbouville' ;
165
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL IN, NOT IN


 Exemple
SELECT * FROM adresse WHERE addr_ville IN ( 'Paris', 'Graimbouville' );
id_utilisateur add_num addr_rue addr_code_postal addr_ville

43 21 Moulin Collet 75006 Paris


67 41 Marcel de la Provoté 76430 Graimbouville
68 18 Navarre 75009 Paris

SELECT * FROM adresse WHERE addr_ville NOT IN ( 'Paris', 'Graimbouville' );


id_utilisateur add_num addr_rue addr_code_postal addr_ville

23 35 Madeleine Pelletier 25250 Bournois

65 28 Cornouaille 27220 Mousseaux-Neuville

166
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ SQL BETWEEN

 L’opérateur BETWEEN est utilisé dans une requête SQL pour sélectionner un
intervalle de données dans une requête utilisant WHERE. L’intervalle peut être
constitué de chaînes de caractères, de nombres ou de dates.

 L’exemple le plus concret consiste par exemple à récupérer uniquement les


enregistrements entre 2 dates définies.

 Syntaxe

L’utilisation de la commande BETWEEN s’effectue de la manière suivante :

SELECT * FROM table

WHERE nom_colonne BETWEEN valeur1 AND valeur2;


167
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL BETWEEN
 Exemple: filtrer entre 2 dates
Imaginons une table « utilisateur » qui contient les membres d’une application en ligne :
id nom date_inscription
1 Maurice 2022-01-02
2 Simon 2022-01-05
3 Chloé 2022-02-14
4 Marie 2022-02-15
5 Clémentine 2022-02-26

 On souhaite obtenir les membres qui se sont inscrit entre le 13 février 2022 et le 20 février 2022,
il est possible d’effectuer la requête suivante:

SELECT * FROM utilisateur


WHERE date_inscription >'2022-02-13' AND date_inscription <'2022-02-20';
168
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL BETWEEN
 Exemple: filtrer entre 2 dates
SELECT * FROM utilisateur
WHERE date_inscription BETWEEN '2022-02-13' AND '2022-02-20';
id nom date_inscription
3 Chloé 2022-02-14
4 Marie 2022-02-15

169
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL BETWEEN
 Exemple: filtrer entre 2 entiers
 On souhaite obtenir tous les résultats dont l’identifiant n’est pas situé entre 4 et 10, il
faudra alors utiliser la requête suivante:

SELECT * FROM utilisateur


WHERE id NOT BETWEEN 4 AND 10;

id nom date_inscription
1 Maurice 2022-01-02
2 Simon 2022-01-05
3 Chloé 2022-02-14

170
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ SQL LIKE
 L’opérateur LIKE est utilisé dans la clause WHERE des requêtes SQL.

 Ce mot-clé permet d’effectuer une recherche sur un modèle particulier. Il est par
exemple possible de rechercher les enregistrements dont la valeur d’une colonne
commence par telle ou telle lettre. Les modèles de recherches sont multiples.

 Syntaxe
La syntaxe à utiliser pour utiliser l’opérateur LIKE est la suivante :
SELECT * FROM table WHERE colonne LIKE modele;

171
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ SQL LIKE
Le «modèle» ressemble très généralement à l’un des exemples suivants:
 LIKE ‘*a’ : le caractère « * » ou   « % » est un caractère joker qui remplace tous les autres caractères.
Ainsi, ce modèle permet de rechercher toutes les chaines de caractère qui se termine par un « a ».
 LIKE ‘a*’ : ce modèle permet de rechercher toutes les lignes de « colonne » qui commence par un
« a ».
 LIKE ‘*a*’ : ce modèle est utilisé pour rechercher tous les enregistrement qui utilisent le caractère
« a ».
 LIKE ‘pa*on’ : ce modèle permet de rechercher les chaines qui commence par « pa » et qui se
terminent par « on », comme « pantalon » ou « pardon ».
 LIKE ‘a_c’ : peu utilisé, le caractère « _ » (underscore) peut être remplacé par n’importe quel
caractère, mais un seul caractère uniquement (alors que le symbole pourcentage « % » peut être
remplacé par un nombre incalculable de caractères . Ainsi, ce modèle permet de retourner les lignes
« aac », « abc » ou même « azc ».

172
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL LIKE
 Exemple:
Imaginons une table « client » qui contient les enregistrement d’utilisateurs :
id nom ville
1 Léon Lyon
2 Odette Nice
3 Vivien Nantes
4 Etienne Lille

 On souhaite obtenir uniquement les clients des villes qui commencent par un « N », il
est possible d’utiliser la requête suivante:
SELECT * FROM client WHERE ville LIKE 'N*';

173
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL LIKE
 Exemple:
id nom ville
2 Odette Nice
3 Vivien Nantes

 Obtenir les résultats terminent par « e »


SELECT * FROM client WHERE ville LIKE '*e';
id nom ville
2 Odette Nice
3 Vivien Nante
4 Etienne Lille

174
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ SELECT-DISTINCT
 L’utilisation de la commande SELECT en SQL permet de lire toutes les données
d’une ou plusieurs colonnes. Cette commande peut potentiellement afficher des
lignes en doubles. Pour éviter des redondances dans les résultats il faut simplement
ajouter DISTINCT après le mot SELECT.

 L’utilisation basique de cette commande consiste alors à effectuer la requête


suivante:
SELECT DISTINCT ma_colonne FROM nom_du_table;

 Cette requête sélectionne le champ « ma_colonne » de la table « nom_du_tableau »


en évitant de retourner des doublons.

175
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SELECT-DISTINCT
 Exemple:
Prenons le cas concret d’une table « client » qui contient des noms et prénoms:
identifiant prenom nom
1 Pierre Dupond
2 Sabrina Bernard
3 David Durand
4 Pierre Leroy
5 Marie Leroy

 En utilisant seulement SELECT tous les prénoms sont retournés, or la table contient
plusieurs fois le même prénom (ex:Pierre).

176
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SELECT-DISTINCT
 Exemple:
 Pour sélectionner uniquement les prénoms uniques il faut utiliser la requête suivante:

SELECT DISTINCT prenom FROM client;

 Cette requête va retourner les champs suivants:


prenom
Pierre
Sabrina
David
Marie

177
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ Exercice:

Soit le MCD suivant:


Client Commande
1,n Passe 1,1 Num_commande
Num_client
Nom_client Date_commande
Prenom_client
Tel_client 1,n
Ville
Contient
Qté
1,n
Produit
Num_produit
Prix_unitaire
libellé
178
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Exercice:

 Quel est le nom du client n°11?


 Trouver le numéro de chaque client dont le nom est « Amrani »;
 Trouver les numéros, nom, prénom des clients qui habitent à « Casablanca »;
 Trouver les numéros, nom, prénom des clients qui n’habitent ni à « Dakhla » ni à
«laayoun » ni à « guelmim »;
 Donner toutes les informations des clients dont leur ville contient des lettres « ab »;
 Quels sont les clients dont leur nom commence par « R »?
 Donner les numéros des commandes dont la date de commande est comprise entre
01/01/2021 et 01/01/2022; 179
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ SQL ORDER BY
 Par défaut les résultats sont classés par ordre ascendant (ASC), toutefois il est
possible d’inverser l’ordre en utilisant le suffixe DESC après le nom de la colonne.
Par ailleurs, il est possible de trier sur plusieurs colonnes en les séparant par une
virgule.

 Une requête plus élaborée ressemblerait à cela :

SELECT colonne1, colonne2, colonne3


FROM table
ORDER BY colonne1 DESC, colonne2 ASC;

180
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL ORDER BY
 Exemple:
Pour l’ensemble de nos exemples, nous allons prendre une base « utilisateur » de test,
qui contient les données suivantes:
id nom prenom date_inscription tarif_total
1 Durand Maurice 2022-02-05 145
2 Dupond Fabrice 2022-02-07 65
3 Durand Fabienne 2022-02-13 90
4 Dubois Chloé 2022-02-16 98
5 Dubois Simon 2022-02-23 27

 Pour récupérer la liste de ces utilisateurs par ordre alphabétique du nom de famille, il


est possible d’utiliser la requête suivante :
181
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL ORDER BY
 Exemple:
SELECT * FROM utilsateur
ORDER BY nom;

id nom prenom date_inscription tarif_total


4 Dubois Chloé 2022-02-16 98
5 Dubois Simon 2022-02-23 27
2 Dupond Fabrice 2022-02-07 65
1 Durand Maurice 2022-02-05 145
3 Durand Fabienne 2022-02-13 90

182
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ SQL ORDER BY
 Exemple:
 En utilisant deux méthodes de tri, il est possible de retourner les utilisateurs par ordre
alphabétique ET pour ceux qui ont le même nom de famille, les trier par ordre
décroissant d’inscription.
SELECT * FROM utilisateur
ORDER BY nom, date_inscription DESC;
id nom prenom date_inscription tarif_total
5 Dubois Simon 2022-02-23 27
4 Dubois Chloé 2022-02-16 98
2 Dupond Fabrice 2022-02-07 65
3 Durand Fabienne 2022-02-13 90
1 Durand Maurice 2022-02-05 145
183
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ SQL AS (alias)
 Dans le langage SQL il est possible d’utiliser des alias pour renommer
temporairement une colonne ou une table dans une requête. Cette astuce est
particulièrement utile pour faciliter la lecture des requêtes.
 Intérêts et utilités
 Alias sur une colonne
o Permet de renommer le nom d’une colonne dans les résultats d’une requête
SQL. C’est pratique pour avoir un nom facilement identifiable dans une
application qui doit ensuite exploiter les résultats d’une recherche.
 Alias sur une table
o Permet d’attribuer un autre nom à une table dans une requête SQL. Cela peut
aider à avoir des noms plus court, plus simple et plus facilement
compréhensible. Ceci est particulièrement vrai lorsqu’il y a des jointures.
184
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ SQL AS (alias)
 Alias sur une colonne
 Syntaxe
Pour renommer une colonne de colonne1 à c1:

SELECT colonne1 AS c1, colonne2 FROM table;

Cette syntaxe peut également s’afficher de la façon suivante:

SELECT colonne1 c1, colonne2 FROM table;

185
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ SQL AS (alias)
 Exemple: id nom prenom date_inscription tarif_total
1 Durand Maurice 2022-02-05 145
2 Dupond Fabrice 2022-02-07 65
3 Durand Fabienne 2022-02-13 90
4 Dubois Chloé 2022-02-16 98
5 Dubois Simon 2022-02-23 27
SELECT id, nom, prenom, date_inscription AS date, tarif_total AS tarif
FROM utilisateur;
id nom prenom date tarif
1 Durand Maurice 2022-02-05 145
2 Dupond Fabrice 2022-02-07 65
3 Durand Fabienne 2022-02-13 90
4 Dubois Chloé 2022-02-16 98
5 Dubois Simon 2022-02-23 27 186
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ SQL AS (alias)
 Alias sur une table
 Syntaxe
 La syntaxe pour renommer une table dans une requête est la suivante:
SELECT * FROM nom_table AS t1;

 Cette requête peut également s’écrire de la façon suivante:


SELECT * FROM nom_ table t1;

o La requête ci-dessous renomme la table «nom_table» en « t1 » 


o Cette astuce est encore plus pratique lorsqu’il y a des noms de tables encore plus
compliqués et lorsqu’il y a beaucoup de jointures.

187
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ Extractions de données de plusieurs tables (Jointures)
 Soit le MLD suivant :

Etudiant (CNE, Nom, Prénom)


Module (Id_Mod, Libellé)
Examen (#CNE, #Id_Mod, Note)

 Répondre à la question : « Quel est le nom de l’étudiant qui a eu la note 19 dans le


module Base de données? » nécessite le fait de récupérer :
N. B:
 Le nom depuis la table Etudiant, SELECT Nom FROM Etudiant;
 La note depuis la table Examen, 
 Le libellé depuis la table Module. SELECT Etudiant.Nom FROM Etudiant;
188
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)
⌘ Extractions de données de plusieurs tables (Jointures)

SELECT Etudiant.Nom
FROM Etudiant, Module, Examen
WHERE Etudiant. CNE = Examen . CNE
AND Module. Id_Mod = Examen . Id_Mod
AND Examen. Note =19
AND Module. Libellé = ‘Base de données’;

189
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Extractions de données de plusieurs tables (Jointures)


 La jointure est un processus qui permet d’associer plusieurs tables dans une même
requête afin d’obtenir des résultats qui combinent plusieurs tables d’une manière
efficace.
 Pour coupler deux tables, il faut d’abord préciser ces tables, ainsi que la règle qui va
permettre d’associer les lignes de ces deux tables dont les valeurs sont extraites.
 Cette règles se présente, généralement, sous la forme d’une égalité entre les valeurs
de deux colonnes.
 Elle s’écrit comme suit :
SELECT table1.champ2, table2.champ2,
FROM table1, table2 WHERE table1.champ1 = table2.champ1;
190
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Extractions de données de plusieurs tables (Jointures)


 Exemple :
Soient les deux tables « Client » et « Commande » décrites comme suit :
CIN Nom Prenom Ville Cat Num_Cmd CIN Datecmd

A100 Amani Mohamed casablanca A 1 A100 2021-10-01

B200 Sellami Amine rabat A 5 B200 2021-10-15

C300 Asmour Jalil agadir C 6 B200 2021-11-15

D400 Tounsi Mostafa casablanca B 9 D400 2022-01-10

E500 Kalami Samira fes C 10 E500 2022-11-25

F600 Alami Sanaa casablanca B 11 F600 2022-03-11

191
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Extractions de données de plusieurs tables (Jointures)


 Exemple :
 On souhaite savoir le nom est la ville des clients qui en effectuer une commande en
2022.
SELECT client.nom, client.ville FROM client, commande WHERE client.CIN =
commande.CIN AND YEAR (DateCmd)=2022

Nom Ville

Tounsi casablanca

Kalami fes

Alami casablanca

192
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Extractions de données de plusieurs tables (Jointures)


 Exemple :
 Pour afficher les numéros des commandes, leurs dates, ainsi que les noms et les
villes des clients qui ont passé ces commandes, la requête serait:
SELECT Commande.Num_Cmd, Commande.Datecmd, Client.nom,
Client.ville
FROM Commande, Client
WHERE Commande.CIN = Client.CIN;

193
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Extractions de données de plusieurs tables (Jointures)


 Exemple :
Le retour de cette requête serait comme suit :
Num_Cmd Data_Cmd Nom Ville

1 2021-10-01 Amani casablanca

5 2021-10-15 Sellami rabat

6 2021-11-15 Selami rabat

9 2022-01-10 Tounsi casablanca

10 2022-11-25 Kalami fes

11 2022-03-11 Alami casablanca

194
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Conditions de jointure et conditions de sélection


 Les conditions telles que Commande.CIN = Client.CIN qui apparaissent dans les
requêtes de jointure sont appelées « Conditions de Jointure », car ce sont elles qui
régissent les associations entre les lignes des tables Commande et Client.

 On observera d'ailleurs que dans cette condition de jointure, Commande.CIN


correspond à une clé étrangère et Client.CIN à une clé primaire.

 Il s'agit d'une condition ordinaire appliquée aux colonnes de chaque couple de


lignes, et qui peut apparaître au milieu d'autres conditions de sélection.

195
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Conditions de jointure et conditions de sélection


 Exemple :
 En utilisant les mêmes tables « Client » et « Commande », si on veut afficher le numéro et la
date de commande, ainsi que le CIN, le nom, et la ville des clients de catégorie A et qui ont
passé des commandes avant le 05 Octobre 2021;
o La requête serait :

SELECT Commande.Num_Cmd, Commande.Datecmd, Client.CIN, Client.nom, Client.ville


FROM commande, client
WHERE commande.CIN = client.CIN
AND Client.Cat=‘A’
AND Commande.date_Cmd < ‘2021-10-05‘;
196
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Conditions de jointure et conditions de sélection

 Exemple :
Le retour de cette requête serait comme suit :

Num_Cmd Data_Cmd CIN Nom Ville

1 2021-10-01 A100 Amani casablanca

197
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation SQL

 C’est des fonctions prédéfinies de SQL qui permettent de réaliser des tâches bien
précises qui ont généralement comme objectif d’afficher un résultat de calcul ou de
comparaison sur plusieurs données.

 Les plus connues sont SUM(), COUNT(), AVG(), MIN(), et MAX().

198
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: SUM( )

 Dans le langage SQL, la fonction d’agrégation SUM( ) permet de calculer la somme


totale d’une colonne contenant des valeurs numériques. Cette fonction ne fonctionne
que sur des colonnes de types numériques (INT, FLOAT …) et n’additionne pas les
valeurs NULL.
 Syntaxe

SELECT SUM(nom_colonne) FROM table;

 Cette requête SQL permet de calculer la somme des valeurs contenu dans la colonne
« nom_colonne ».
 A savoir : Il est possible de filtrer les enregistrements avec la
commande WHERE pour ne calculer la somme que des éléments souhaités.
199
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: SUM( )


 Exemple :
Imaginons un système qui gère des factures et enregistre chaque achat dans une base
de données: Table achat.
Ce système utilise une table « facture » contenant une ligne pour chaque produit. La
table ressemble à l’exemple ci-dessous :
Table achat: id facture_id produit prix
1 1 calculatrice 17
2 1 agrafeuse 4
3 1 ciseaux 3
4 1 agenda 15
5 2 calculatrice 17
6 2 agenda 15
200
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: SUM( )


 Pour calculer le montant de la facture n°1 il est possible d’utiliser la requête
SQL suivante:

SELECT SUM(prix) AS prix_total


FROM achat
WHERE facture_id = 1;

prix_total
Résultat :
39

Ce résultat démontre bien que tous les achats de la facture n°1 représente un
montant de 39 (somme de 17 + 4 + 3 + 15).
201
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: MAX ( )


 Dans le langage SQL, la fonction d’agrégation MAX ( ) permet de retourner la
valeur maximale d’une colonne dans un set d’enregistrement. La fonction peut
s’appliquée à des données numériques ou alphanumériques. Il est par exemple
possible de rechercher le produit le plus cher dans une table d’une boutique en
ligne.

 Syntaxe
La syntaxe de la requête SQL pour retourner la valeur maximum de la colonne
« nom_colonne » est la suivante:

SELECT MAX(nom_colonne) FROM table;

202
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: MAX ( )


 Imaginons qu’on a une table « produit » sur lequel on peut retrouver des produits
informatiques.
id nom prix
1 clavier 50
2 souris 21
3 écran 120
4 disque dur 150

 Connaître la valeur la plus élevée


Pour extraire uniquement le tarif le plus élevé dans la table, il est possible d’utiliser la
requête suivante: max(prix)
SELECT MAX(prix) FROM produit; 150
203
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: MIN ( )


 La fonction d’agrégation MIN ( ) de SQL permet de retourner la plus petite valeur
d’une colonne sélectionnée. Cette fonction s’applique aussi bien à des données
numériques qu’à des données alphanumériques.

 Syntaxe
Pour obtenir la plus petite valeur de la colonne « nom_colonne » il est possible
d’utiliser la requête SQL suivante:

SELECT MIN(nom_colonne) FROM table;

204
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: MIN( )


 Imaginons la base de données contenant la table Produit:
id categorie nom prix date_ajout
1 informatique Ordinateur 980 2021-01-24
2 informatique Imprimante 70 2021-02-10
3 maison Canapé 450 2021-02-11
4 maison Aspirateur 200 2021-04-04

 Pour extraire le prix du produit le moins cher de la catégorie « maison », il est


possible d’effectuer la requête SQL ci-dessous:
SELECT MIN(prix) AS Prix_minimum FROM produits
WHERE categorie = 'maison'; Prix_minimum
200
205
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: COUNT( )


 En SQL, la fonction d’agrégation COUNT( ) permet de compter le nombre
d’enregistrements dans une table.

 Connaître le nombre de lignes dans une table est très pratique dans de
nombreux cas, par exemple pour savoir combien d’utilisateurs sont présents
dans une table

 Syntaxe
Pour connaître le nombre de lignes totales dans une table, il suffit d’effectuer la
requête SQL suivante :
SELECT COUNT(*) FROM table;
206
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: COUNT( )


 Il est aussi possible de connaître le nombre d’enregistrements sur une colonne
en particulier.

 Les enregistrements qui possèdent la valeur NULL ne seront pas


comptabilisés.

 La syntaxe pour compter les enregistrements sur la colonne « nom_colonne »


est la suivante :

SELECT COUNT(nom_colonne) FROM table;

207
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: COUNT( )


 Il est également possible de compter le nombre d’enregistrements distincts
pour une colonne.

 La fonction ne comptabilisera pas les doublons pour une colonne choisie.

 La syntaxe pour compter le nombre de valeurs distinctes pour la colonne


« nom_colonne » est la suivante :

SELECT COUNT(DISTINCT nom_colonne) FROM table;

208
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: COUNT ( )


 Exemple :
Soit la table « Client » décrite comme suit :
id nom nbr_commande ville

1 Allaoui 3 Casa

2 Alami 0 Fes

3 Lotfi 1 Tanger

4 Mandel 7 Casa

209
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: COUNT ( )


 Exemple :
 Pour compter le nombre total des clients, il suffit d’utiliser COUNT(*) sur toute la
table :

SELECT COUNT(*) AS nombre_total FROM client;

 Le retour de cette requête serait comme suit :

nombre_total

4
210
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: COUNT ( )


 Exemple :
 Pour compter le nombre de client de Casa, il suffit de faire la même chose mais en
filtrant les enregistrements avec WHERE :

SELECT COUNT(*) FROM client WHERE ville=’Casa’;

COUNT(*)

211
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: COUNT ( )


 Exemple :
 L’utilisation de la clause DISTINCT peut permettre de connaître le nombre de villes
des clients.

 La requête serait la suivante :

 SELECT COUNT(DISTINCT ville) FROM client;

 Le retour de cette requête serait comme suit : COUNT(DISTINCT ville)

3
212
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: AVG ( )


 La fonction d’agrégation AVG ( ) dans le langage SQL permet de calculer la valeur
moyenne sur un ensemble d’enregistrements de type numérique et non NULL.

 La syntaxe pour utiliser cette fonction de statistique est simple :

SELECT AVG(nom_colonne) FROM nom_table;

213
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: AVG ( )


  Soit la table « Etudiant » décrite comme suit :

Id_etud nom Moyenne


1 Rahimi 15
2 Alaoui 12
3 Eddamiri 19
4 Fares 16

 Pour calcul de la moyenne de la classe à partir de notre table étudiant, On utilise la


requête suivante:
SELECT AVG( moyenne ) AS Moyenne_classe FROM etudiant ;
214
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Fonctions d’agrégation: AVG ( )

 Le retour de cette requête serait comme suit :

Moyenne_classe

15,5

215
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Regroupement : GROUP BY
 Soit le MLD suivant :

o Etudiant(CNE, Nom, Prénom, Ville)


o Module(Id_Mod, Libellé)
o Examen(#CNE, #Id_Mod, Note)

 On voudrait répondre à des questions du genre :


o Quelle est la note moyenne par module ?
SELECT AVG(NOTE) FROM Examen GROUPE BY Id_Mod;

216
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Regroupement : GROUP BY
 La clause GROUP BY est utilisée en SQL pour grouper plusieurs résultats et utiliser
une fonction d’agrégation sur un groupe de résultats.

 De façon générale, la commande GROUP BY s’utilise de la façon suivante:

SELECT colonne1, fonction(colonne2)


FROM table
GROUP BY colonne1;

217
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Regroupement : GROUP BY
 Exemple
Soit la table « Achat » décrite comme suit :
id client tarif date

1 Pierre 102 2022-01-23

2 Simon 47 2022-01-27

3 Marie 18 2022-02-05

4 Marie 20 2022-02-14

5 Pierre 160 2022-03-03

 Pour obtenir le coût total payé par chaque client, il suffit de regrouper selon les clients.
218
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Regroupement : GROUP BY
 Exemple
La requête serait, donc, comme suit :
SELECT client, SUM(tarif) FROM Achat
GROUP BY client;
La fonction SUM() permet d’additionner la valeur de chaque tarif pour un même
client.
client SUM(tarif)
Le résultat sera donc le suivant :
Pierre 262
Simon 47
Marie 38
219
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Regroupement : GROUP BY
 Exemple
 Pour connaître le montant moyen payé par chaque client, on peux utiliser une requête qui va
utiliser :

 GROUP BY pour regrouper les ventes des mêmes clients


 La fonction AVG() pour calculer la moyenne des enregistrements

 La requête serait comme suit :

SELECT client, AVG(tarif) FROM Achat


GROUP BY client;

220
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Regroupement : GROUP BY
 Exemple
Le retour de cette requête serait comme suit :

client AVG(tarif)

Pierre 131

Simon 47

Marie 19

221
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Condition : HAVING
 La condition HAVING en SQL est presque similaire à WHERE à la seule
différence que HAVING permet de filtrer en utilisant des fonctions telles que
SUM(), COUNT(), AVG(), MIN() ou MAX().

 L’utilisation de HAVING est comme suit :

SELECT colonne1, fonction(colonne2)


FROM nom_table
GROUP BY colonne1
HAVING fonction(colonne2) operateur valeur;

222
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Condition : HAVING
• Soit la table « Achat » décrite comme suit :
id client tarif date

1 Pierre 102 2022-01-23

2 Simon 47 2022-01-27

3 Marie 18 2022-02-05

4 Marie 20 2022-02-14

5 Pierre 160 2022-03-03

223
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Condition : HAVING
 Si on souhaite récupérer la liste des clients qui ont commandé pour un tarif total
supérieur à 40, alors il est possible d’utiliser la requête suivante :

SELECT client, SUM(tarif)


FROM Achat
GROUP BY client
HAVING SUM(tarif) > 40;
client SUM(tarif)

Pierre 262

Simon 47

224
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Condition : HAVING
 Si on souhaite récupérer la liste des clients qui ont commandé pour un tarif total
supérieur à 40, alors il est possible d’utiliser la requête suivante :

SELECT client, SUM(tarif)


FROM Achat
GROUP BY client
HAVING SUM(tarif) > 40;
client SUM(tarif)

Pierre 262

Simon 47

225
SOUS-REQUÊTES (OU REQUÊTES IMBRIQUÉES)

226
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)


 Soit le MLD suivant :

o Etudiant(CNE, Nom, Prénom, Ville)


o Module(Id_Mod, Libellé)
o Examen(#CNE, #Id_Mod, Note)

 On voudrait répondre à des questions du genre :


o Qui sont les étudiants qui viennent de la même ville que l’étudiant Jalili ?
o Qui sont les étudiants qui ont une note supérieure à celle de l’étudiant Alaoui ?

227
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)

 Dans le langage SQL, une sous-requête (aussi appelée "requête imbriquée" ou


"requête en cascade") consiste à exécuter une requête à l'intérieur d'une autre
requête.

 Une requête imbriquée est souvent utilisée au sein d'une clause WHERE ou
de HAVING pour remplacer une ou plusieurs constantes.

228
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)


 Exemple:
Soit la table Employé décrite comme suit :
id nom prenom DEP_ID Id_Poste Salaire

1 Samadi Said 30 140 7000

2 Fellah Amina 32 145 8000

3 Alami Kaouter 42 140 11000

4 Sabbar Latifa 58 160 5000

5 Farah Ismail 60 140 15000

6 Raiss Nabil 80 180 6000

Qui touche un salaire supérieur à Fellah ?


229
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)


 Exemple:
 Requête principale :

 Quels employés touchent un salaire supérieur à celui de Fellah ?

 Sous-requête :

 Quel est le salaire de Fellah ?

 La sous-requête (requête interne) s'exécute une fois avant la requête principale.

 La requête principale (requête externe) utilise le résultat de la sous-requête.


230
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)


 Exemple:
SELECT nom nom

FROM Employe 8000


Fellah
WHERE salaire >=
Alami
( SELECT salaire
FROM Employe Farah

WHERE nom = ‘Fellah‘


);

231
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)


 Sous-requêtes monolignes

 Renvoient une seule ligne


 Utilisent des opérateurs de comparaison monolignes
Opérateur Description
= Égale
<> ou != Pas égale
> Supérieur à
< Inférieur à
>= Supérieur ou égale à
<= Inférieur ou égale à
232
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)

 Sous-requêtes monolignes
Soit la table Employé décrite comme suit :
id nom prenom DEP_ID Id_Poste Salaire

1 Samadi Said 30 140 7000

2 Fellah Amina 32 145 8000

3 Alami Kaouter 42 140 11000

4 Sabbar Latifa 58 160 5000

5 Farah Ismail 60 140 15000

6 Raiss Nabil 80 180 6000

233
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)


 Sous-requêtes monolignes
Pour récupérer le nom, l’Id_Poste et le salaire des employés qui ont le même Id_Poste que l’employé
« Samadi » et qui ont un salaire supérieur à celui de l’employée « Fellah », la requête serait comme suit :
SELECT nom, id_Poste, salaire
FROM Employe
WHERE id_Poste =
( SELECT id_Poste
FROM Employe
WHERE nom = ‘Samadi’ )
AND salaire >
( SELECT salaire
FROM Employe
WHERE nom = ‘Fellah’ );
234
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)

 Sous-requêtes monolignes
Le retour de cette requête serait comme suit :

nom Id_Poste Salaire

Alami 140 11000

Farah 140 15000

235
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)


 Utiliser des fonctions dans une sous-requête
 Il est aussi possible d’utiliser les fonctions d’agrégation dans les sous-requêtes.

 Exemple :

Pour récupérer le nom, l’Id_Poste et le salaire des personnes qui touchent le salaire minimum, la
requête serait :

SELECT nom, id_Poste, salaire


FROM Employe
WHERE salaire = (
SELECT MIN(salaire)
FROM Employe ); 236
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)

 Utiliser des fonctions dans une sous-requête


Le retour de cette requête serait :

nom Id_Poste Salaire

Sabbar 160 5000

237
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)


 HAVING et sous-requêtes
Pour récupérer le DEP_ID et le salaire des personnes qui touchent le salaire minimum de chaque
département mais de telle sorte à ce qu’il soit supérieur ou égal au salaire de l’employé « Raiss », la
requête serait :
SELECT DEP_ID, MIN(salaire)
FROM Employe
GROUP BY DEP_ID
HAVING MIN(salaire) > = (
SELECT salaire
FROM Employe
WHERE nom = ‘Raiss’
);
238
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)

 HAVING et sous-requêtes
Le retour de cette requête serait comme suit :

DEP_ID Min(Salaire)

50 6000

42 11000

60 15000

239
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)

 Sous-requêtes multilignes
Ce sont des requêtes qui retournent plusieurs lignes et qui utilisent des opérateurs de
comparaison multilignes.
Opérateur Description

IN Égale à une des valeurs dans la liste

Permet de vérifier si une valeur est supérieure, inférieure,


ALL
ou égale à toutes les valeurs renvoyées par la sous-requête

Permet de vérifier si une valeur est supérieure, inférieure,


ANY ou égale à au moins une des valeurs retournées par la
sous-requête

240
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)

 ANY dans les sous-requêtes multilignes


Soit la table Employé décrite comme suit :
id nom prenom DEP_ID Id_Poste Salaire

1 Samadi Said 50 140 7000

2 Fellah Amina 50 145 8000

3 Alami Kaouter 42 140 11000

4 Sabbar Latifa 58 160 5000

5 Farah Ismail 42 140 15000

6 Raiss Nabil 50 180 6000

241
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)


 ANY dans les sous-requêtes multilignes
Pour récupérer l’Id, le nom, l’Id Poste et le salaire des employés qui ont un Id Poste
différent de 140 et un salaire inférieur au salaire d’au moins un employé ayant l’Id
Poste 140, la requête serait :

SELECT id, nom, Id_Poste, salaire


FROM Employe
WHERE salaire < ANY (SELECT salaire
FROM Employe
WHERE id_Poste = 140)
AND id_Poste != 140;
242
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)

 ANY dans les sous-requêtes multilignes

Le retour de cette requête serait :


id nom Id_Poste Salaire

2 Fellah 145 8000

4 Sabbar 160 5000

6 Raiss 180 6000

243
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)


 ALL dans les sous-requêtes multilignes
Pour récupérer l’Id, le nom, l’Id_Poste et le salaire des employés qui ont un Id_Poste
différent de 140 et un salaire inférieur au salaire de tous les employés ayant l’Id_Poste 140,
la requête serait :

SELECT id, nom, id_Poste, salaire


FROM Employe
WHERE salaire < ALL (
SELECT salaire
FROM Employe
WHERE id_Poste = 140 )
AND id_Poste != 140;
244
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)

 ALL dans les sous-requêtes multilignes

Le retour de cette requête serait :

id nom Id_Poste Salaire

4 Sabbar 160 5000

6 Raiss 180 6000

245
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)


 IN dans les sous-requêtes multilignes

Pour récupérer l’Id, le nom, l’Id Poste et le salaire des employés qui ont un Id Poste différent
de 140 et un salaire égal à un des salaires des employés ayant l’Id Poste 140, la requête serait :

SELECT id, nom, id_Poste, salaire


FROM Employe
WHERE salaire IN (
SELECT salaire
FROM Employe
WHERE id_Poste = 140 )
AND id_Poste != 140;

246
LANGAGE D’INTERROGATION DE DONNÉES SQL (LID)

⌘ Sous-Requêtes (ou Requêtes Imbriquées)

 IN dans les sous-requêtes multilignes

Le retour de cette requête serait :

id nom Id_Poste Salaire

2 Fellah 145 7000

247
Système d’Information et Base de
Données

Vous aimerez peut-être aussi