Cours BDD Complet
Cours BDD Complet
ESME SUDRIA
ANNÉE UNIVERSITAIRE: 2019-2020
OBJECTIF & ACQUIS D’APPRENTISSAGE VISÉS
Modalités pédagogiques
• 12 séances de 2H de Cours Intégré (Cours-TD).
Evaluation
• Contrôle Continu (50%) : Devoir Surveillé (DS), 2H, Documents non autorisés.
• Examen Pratique (50%) : Examen (TP) individuel sur machine, 2H, Documents non autorisés.
Support de cours et TD disponibles sur Office Teams (SCOLARITE_Paris_Inge1_coworking)
Chargés de cours
• Paris : Salma REBAI-JRIBI; Raouda Kamoun; Maher REBAI
• Lille : Guillaume ROUX
• Lyon : Mazen SAID
• Bordeaux : Michel GILLET
Responsable du module : Salma REBAI-JRIBI ([Link]@[Link])
INGÉ 1 - BASES DE DONNÉES 3 © Salma REBAI-JRIBI
INTRODUCTION
La gestion des données est une nécessité
Service
achat
Entreprise
de
Service Service
production
production financier
ou de
service
Service
vente
Figure : Exemple de services dans l’entreprise
INGÉ 1 - BASES DE DONNÉES 4 © Salma REBAI-JRIBI
LES DONNÉES
Définition:
• Ensemble structuré de données cohérentes qui modélisent un univers réel.
Avantages:
• Informations organisées de façon à être facilement accessibles, gérées et mises à jour, en simultanée par
plusieurs utilisateurs.
• Scalabilité et facilité de la prise de décision
Faible redondance Cohérence et besoin en stockage moindre.
Données Structurées Automatisation
Exhaustivité des données Qualité des décisions.
La structure de la BDD dépend du modèle choisi:
• Hiérarchique ou réseaux
• Objet
• Relationnel: Enregistre et manipule les données dans des tables (relations) à 2 dimensions (lignes & colonnes).
INGÉ 1 - BASES DE DONNÉES 6 © Salma REBAI-JRIBI
SYSTÈME DE GESTION DE BASE DE DONNÉES (SGBD)
L’architecture ANSI/SPARC
définit 3 niveau d’abstraction
des données pour les SGBD :
• Séparation entre la description
externe et la description interne
des données
• Indépendance entre le schéma
conceptuel et les programmes
d’applications.
• Indépendance entre le schéma
conceptuel des données et les
structures de stockage.
Figure: Architecture ANSI/SPARC - 1975
INGÉ 1 - BASES DE DONNÉES 8 © Salma REBAI-JRIBI
CYCLE DE VIE D’UNE BASE DE DONNÉES
Modèle physique
Avantages du MCD
• Représentation graphique simple et accessible, facilitant le dialogue entre les acteurs techniques et non techniques.
• Puissance d’expression élevée (sémantiques, structures relationnelles, …) avec un nombre raisonnable de symboles.
• Formalisme peu ambiguë offrant une spécification détaillée.
Mais
• Propose que des structures (description des données): Pas d’opérations (langage de manipulation associé).
INGÉ 1 - BASES DE DONNÉES 13 © Salma REBAI-JRIBI
MODÈLE CONCEPTUEL DE DONNÉES (MCD)
Modèle Entité-Association (E-A)
Modèle Entité-Association (Entity-Relationship Model):
• Un modèle conceptuel de très haut niveau : structuration sémantique des données du monde réel.
• Correspond au niveau conceptuel de la méthode Merise (Méthode d'Étude et de Réalisation Informatique pour les
Systèmes d'Entreprise, 1978) , et est à la base de plusieurs autres méthodes de conception (OMT, UML…).
3 Concepts de base
• Entités : les objets du monde réel.
Exemples :
• Dans une banque, l’entité CLIENT, représente l’ensemble des personnes physiques ou morales possédant au
moins un compte bancaire.
• Les différents produits vendus par une entreprise peuvent être regroupés dans une même entité ARTICLE,
car tous les produits partagent les mêmes propriétés (désignation, référence, prix unitaire, etc.).
Définition – Un attribut (ou propriété ) est une information élémentaire qui caractérise
une entité ou une association :
• unique dans le modèle et ne peut être rattaché qu’à un seul concept.
• typé : le domaine des valeurs que peut prendre l'attribut est fixé a priori.
• atomique (ex: nom, prénom, âge ) ou composé (ex. adresse=n° rue + code_postal + ville).
• prend une valeur précise pour chaque occurrence.
DEPARTS BILLET
APPREIL LIAISON
Num-Vol Num-Billet
Num-Immatricul Num-Liaison
Date-Départ Date_Emission
Type Ville_Départ
Nb_Places_Libres Prix
Capacité Ville_Arrivée
NB_Places_Occup Nom_Client
Prenom_Client
Règles de définition :
• Les associations n’ont pas d’existence propre, elles n’existent qu’a travers les entités qu’elles relient.
• Une association est défini par un nom (en général, on utilise un verbe à l'infinitif) et une liste d’entités participantes
• Une association peut être, ou non, porteuse de propriétés particulières qui la décrivent (ex: date achat).
• Une association n’a pas d’identifiant explicite. Elle est identifiée par la concaténation des identifiants des entités reliées.
• Chaque occurrence d’une association est constituée d’une et une seule occurrence des entités participantes.
Caractéristiques :
• Collection : l’ensemble des entités intervenant dans la relation.
• Dimension (ou degré, ou arité): le nombre d’entités de la collection.
INGÉ 1 - BASES DE DONNÉES 21 © Salma REBAI-JRIBI
MODÈLE CONCEPTUEL DE DONNÉES (MCD)
Modèle Entité-Association (E-A) : Association
Exemple :
• Collection: { ETUDIANT, DIPLOME }
• Dimension: 2 Association binaire
• Identifiant de l’association : (nom, prenom,date_naissance)x(titre)
Exemple : Une personne est parent/enfant d’une autre personne (relation non symétrique).
Signification:
• La cardinalité minimale à 0: des occurrences de l’entité peuvent exister sans être impliquées dans aucune association.
• La cardinalité minimale à 1 : une occurrence de l’entité ne peut exister que si elle est impliquée dans au moins une
occurrence de l’association.
• La cardinalité maximale à 1: toute occurrence de l’entité ne peut participer qu’à une seule occurrence de l’association
au plus
• La cardinalité maximale à N : une occurrence de l’entité peut être impliquée dans plusieurs occurrences de
l’association.
• Exemple 2 :
Une commande concerne un ou plusieurs produits.
Un produit est associé à aucune ou à plusieurs commandes.
• Exemple 3 :
1) Un professeur peut ne pas enseigner, ou enseigner dans plusieurs
salles à différentes périodes (plusieurs couples (Salle, Période)).
2) A une période donnée, il peut ne pas y avoir des professeurs
enseignant dans les salles, ou plusieurs professeurs enseignant dans
plusieurs salles différentes (plusieurs couples d’occurrences
(Professeur, Salle)).
3) .…
INGÉ 1 - BASES DE DONNÉES 26 © Salma REBAI-JRIBI
MODÈLE CONCEPTUEL DE DONNÉES (MCD)
Modèle Entité-Association (E-A) : Résumé
Rappel : Quelques règles de construction / validation du MCD :
• Chaque entité doit avoir une propriété clé qui l’identifie.
• Chaque propriété doit avoir une seule valeur pour une occurrence donnée.
• Les attributs composés et/ou dérivées (calculables à partir d’autres attributs) sont a éviter.
• Un attribut d’une association doit dépendre directement des identifiants de toutes les entités en relation.
Exemple : Une association ayant toutes ses cardinalités de type (1,1) doit être supprimée.
INGÉ 1 - BASES DE DONNÉES 27 © Salma REBAI-JRIBI
MODÈLE CONCEPTUEL DE DONNÉES (MCD)
Exercice d’application
Enoncé : Dans un magasin de vente de disques, le responsable voulait créer une base de
données pour assurer la bonne gestion de ses ventes. Cette BDD repose sur les règles de
gestion suivantes :
• Les clients doivent être répertoriés dans la base de données.
• Un client est identifié par un numéro unique, un nom, un prénom, une date de naissance et une adresse.
• Un client peut acheter plusieurs disques à différentes dates. Chaque achat concerne au moins un disque.
• Un disque est réalisé par un seul artiste dont on connait le nom, le pays et le domaine, ainsi que la date de
réalisation du disque.
• Chaque disque est identifié par un titre, une date de gravure et un numéro de référence unique et est rangé dans
l’un des rayons du magasin à une date donnée. On souhaite garder l’historique des différents
déplacements/rangements des disques. Chaque rayon est identifié par un libellé et un numéro.
• Le directeur doit pouvoir visualiser la liste des clients, la liste des disques et leurs emplacements, ainsi que les achats
en fonction de leurs dates.
Question: Représenter le MCD correspondant à cette base de données.
INGÉ 1 - BASES DE DONNÉES 28 © Salma REBAI-JRIBI
MODÈLE CONCEPTUEL DE DONNÉES (MCD)
Exercice d’application
Correction (MCD Entités):
Dans cet exercice on remarque qu’on a:
• Plusieurs objets « Client » qui partagent les mêmes caractéristiques (Nom, Prénom, date_naissance et
Adresse).
• Plusieurs objets « Disque » qui partagent les mêmes caractéristiques (Titre, Date_Gravure).
• Plusieurs objets « Rayon » qui partagent les mêmes caractéristiques (Libellé, Num_Rayon).
• Plusieurs objets « Artiste » qui partagent les mêmes caractéristiques (Nom, Prénom, Pays, Domaine).
Modèle physique
• Le lien entre 2 tables relationnelles est défini par une clé étrangère (Clé externe):
Une clé étrangère est constituée d’une ou plusieurs colonnes faisant référence aux colonnes d’une autre table (la table référencée).
La colonne de la table référencée doit faire partie d’une contrainte de clé primaire ou d’une contrainte d’unicité.
Une clé étrangère garantit que les valeurs de chaque ligne de la table référençant existent dans la table référencée. Cela permet de
garantir l’intégrité et la cohérence des données enregistrées dans les tables.
• Chaque attribut appartient à un domaine qui définit l’ensemble, fini ou infini, de ses valeurs possibles (INT, STRING, etc.).
• Passage d’un modèle à deux structures ( entités + associations ) vers un modèle à une structure (relations).
• La sémantique n’est pas complètement préservée il faut ajouter des contraintes d’intégrité.
Règles de Passage :
• Etape 1: Chaque entité est transformée en une table avec le même nom.
Chaque propriété de l’entité devient un attribut de la table (une colonne).
Les attributs composant l’identifiant de l’entité sont transformés en clé primaire de la table (clé simple ou composé).
Remarque : Cette transformation des propriétés concerne les propriétés simples et monovalués. La normalisation
des propriétés (attributs) devait être faite avant le passage au modèle relationnel (voir règles de construction du MCD).
• 3 Règles de base en fonction des cardinalités maximales sur les liens de l’association (à adapter selon le type
de l’association : binaire, ternaire, réflexive, etc… )
Les éventuelles propriétés de l’association deviennent des attributs de la table issue de l’entité coté cardinalités (*,1).
• Application :
Le schéma MCD :
Le schéma relationnel :
• Application :
Le schéma MCD :
Le schéma relationnel :
COMMANDE (N°commande, Date, Statut) ;
PORTER (#N°article , #N°commande, Qte_commandée)
ARTICLE (N°article, Désignation, Prix)
• Application :
Le schéma MCD : DIRECTEUR DEPARTEMENT
Id_Dir 1,1 Id_Depart
Nom
Diriger
1,1 Nom_Dep
Prénom Lieu
Grade
Le schéma relationnel :
DIRECTEUR_DEPARTEMENT (ID_Dir, ID_Depart, Nom, Prénom, Grade, Nom_Dep, lieu)
• Application :
Le schéma MCD :
Le schéma relationnel :
EDIFICE (N°edifice, Type)
MAISON (N°maison, #N°édifice, Adresse)
• Remarque: Dans le cas d’une association de type (0, 1) (0, 1), la clé primaire de l’une des 2 tables est
dupliquée dans l’autre table où elle devient clé externe qui peut prendre une valeur nulle.
INGÉ 1 - BASES DE DONNÉES 40 © Salma REBAI-JRIBI
MODÈLE LOGIQUE DE DONNÉES (MLD)
Passage du MCD au MLD
Transformation des associations selon les cardinalités
• Exemple :
Le schéma MCD Schéma relationnel associé
• Application :
Le schéma MCD Schéma relationnel associé
• Application :
Le schéma MCD :
Le schéma relationnel :
TACHE (N°tâche, #N°tâche_précédente, Désignation, Durée)
• Application :
Le schéma MCD :
Le schéma relationnel :
DISQUE
CLIENT 1,n Acheter 0,1 Num_ref_Dsq 1,n Ranger
Id Clt Date_Achat Titre Date_Rangement
Nom Date_Gravure
Prénom
Date_Naiss ARTISTE 1,1 0,n
Adresse Id Artiste RAYON
Nom 1,n Réaliser
Id Rayon
Prénom Date_Réalisation Libellé
Pays Num_Rayon
Domaine
• L’association « Ranger » a deux liens de type (*,n). Il faut créer une nouvelle table avec une clé composée :
RANGER(#refId_Rayon, #refId_Dsq, Date_Rangement)
• L’association « Réaliser » a un lien (1,n) et un autre lien (1,1). Il faut ajouter une clé étrangère dans la table
correspondante à la cardinalité (1,1):
DISQUE(Num_ref_Dsq,Titre, Date_Gravure #refId_Client, Date_Achat, #refId_Art, Date_réalisation).
INGÉ 1 - BASES DE DONNÉES 46 © Salma REBAI-JRIBI
MODÈLE LOGIQUE DE DONNÉES (MLD)
Exercice d’application
Principe : Appliquer les règles de passage de MCD au MLD dans le sens inverse.
• Etape 1 : Chaque table dont la clé primaire ne contient pas de clé étrangère, devient une entité dont
l’identifiant est la clé primaire de la table, et les attributs sont le reste des colonnes non clés étrangères.
• Etape 2 : Chaque table dont la clé primaire est intégralement composée de clés étrangères, devient une
association multivaluée (toutes ses cardinalités maximales valent n) entre les entités correspondant aux
clés étrangères. Les autres colonnes non clés étrangères de la table deviennent les attributs de l’association.
• Etape 3 : Pour les tables possédant des clés étrangères à l’extérieur de la clé primaire, les colonnes clés
étrangères deviennent des associations monovalués (de type (*,1)--(*,n) ) vers l’entité correspondant à la
clé étrangère.
Question: En appliquant les règles de passage du MCD au MLD ("dans le sens inverse"),
déterminer le modèle Entité-Association équivalent à ce schéma relationnel.
• Exemple: Soit la relation Personne(NSS, Nom, Prénom, Marque, Modèle, Puiss, Date, Prix)
On peut poser les exemples de DF suivants:
NSS→Nom NSS→Prénom Modèle→Marque Modèle→Puiss (NSS,Modèle,Date)→Prix …
Les DF traduisent la perception de la réalité (la sémantique des données et les contraintes qui les relient.)
• Les DF font partie du schéma d’une BD et doivent être contrôlées par le SGBD.
• l'identification des DF est la base indispensable pour déterminer dans quelle forme normale est une relation.
Augmentation : (W →R X) ⇒ (W,Y →R X, Y)
Transitivité : (W →R X ∧ X →R Y) ⇒ (W →R Y)
Union : (W →R X ∧ W →R Y) ⇒ (W →R X, Y)
Pseudo-transitivité : (W →R X ∧ X, Y →R Z) ⇒ (W,Y →R Z)
Décomposition : (W →R X ∧ Y ⊆ X) ⇒ (W →R Y)
• Une DF de la forme (X →R Y) est dite élémentaire, si et seulement si, il n’existe aucun (Z ⊂ X ) tel que Z
détermine Y.
INGÉ 1 - BASES DE DONNÉES 55 © Salma REBAI-JRIBI
MODÈLE LOGIQUE DE DONNÉES (MLD)
Dépendance fonctionnelle (DF)
Définition - Clé candidate :
• Soit R une relation
Cet attribut a une valeur distincte pour chaque occurrence et forme alors l'unique clé candidate de R.
Si on a X →R Y avec X est minimal, alors X est une clé candidate de R (il peut y en avoir plusieurs).
Si aucun X ne peut être trouvé ainsi, toutes les occurrences de R sont distinctes et l'unique clé
candidate de R est formée de tous ses attributs.
Si R comporte plusieurs clés candidates, l’une d’elle est choisie pour être la clé primaire.
Question: L’activité du centre est décrite par la relation universelle suivante englobant ces informations:
Centre_Loisirs ( No-Enft, Nom-Enft, Prenom-Enft, Age-Enft, No-Groupe, Nom-Groupe, No-Anim,
Nom-Anim, Prenom-Anim, Creneau-Hor, No-Activite, Type-Activite )
Trouver la liste de dépendances fonctionnelles entre les attributs en respectant les hypothèses
annoncées. En déduire une clé candidate de cette relation. Est-elle unique ?
INGÉ 1 - BASES DE DONNÉES 57 © Salma REBAI-JRIBI
MODÈLE LOGIQUE DE DONNÉES (MLD)
Dépendance fonctionnelle (DF)
No-Enft No-Groupe
No-Groupe Nom-Groupe
No-Groupe No-Anim
No-Activite Type-Activite
• L’ensemble d’attributs minimal qui détermine tout les reste d’attributs de la relation « Centre_Loisirs » est
l’ensemble X = (No-Enft , Creneau-Hor). C’est la seule clé candidate, et qui représente alors la clé
primaire de la relation :
Centre_Loisirs ( No-Enft, Creneau-Hor, Nom-Enft, Prenom-Enft, Age-Enft, No-Groupe, Nom-Groupe,
No-Anim, Nom-Anim, Prenom-Anim, No-Activite, Type-Activite )
• Exemple: Soit la relation Voiture(Numéro, Marque, Modèle, Puissance, Couleur) avec les dépendances
fonctionnelles suivantes :
La relation Voiture peut être décomposée en préservant les DF, en deux relations :
R1( Numéro, Modèle , Couleur ) et R2( Modèle, Puissance, Marque )
• Effets de normalisation :
Facilite l’accès aux données et minimise les besoins de mises à jour.
• Exemple :
Id_emp Nom Adresse Téléphone Id_emp Nom Adresse Téléphone
Id_emp Téléphone
101 Dupont Paris 0658963247 101 Dupont Paris 0658963247
101 0658963247
0758649823 163 Martin Troyes 0655487921
101 0758649823
163 Martin Troyes 0655487921 123 Renault Caen 0699659878
163 0655487921
123 Renault Caen 0699659878 123 0699659878
INGÉ 1 - BASES DE DONNÉES 62 © Salma REBAI-JRIBI
MODÈLE LOGIQUE DE DONNÉES (MLD)
Les Formes Normales
Deuxième Forme Normale (2FN)
• Contraintes à respecter :
1 FN
Tout attribut non clé est totalement dépendant de toute la clé. Autrement dit, aucun attribut non clé ne doit dépendre
d’une seule partie de la clé.
Remarque: Cette forme concerne les relations (tables) avec une clé primaire composée.
• Effets de normalisation : Réduire la redondance des données et les besoins en espace disque.
• Exemple :
La première table est en 1FN, mais pas en 2FN:
l’attribut « Age » dépend d’une seule partie de la
clé primaire (seulement de l’attribut « Id », mais pas de
« Matière »).
Il faut décomposer la table/relation en 2 relations
respectant la 2FN, comme suit :
INGÉ 1 - BASES DE DONNÉES 63 © Salma REBAI-JRIBI
MODÈLE LOGIQUE DE DONNÉES (MLD)
Les Formes Normales
Troisième Forme Normale (3FN)
• Contraintes à respecter :
2FN.
Un attribut non clé ne doit pas dépendre d’un ou plusieurs attribut(s) non clé.
• Effets de normalisation : Réduire la redondance des données et les besoins en espace disque.
• Exemple : Les colonnes non-clés « Pays » et « ville » de la première table dépendent de la colonne «code_zip» qui
est un attribut non-clé et dépendent aussi de la clé primaire «Id ».
La table n’est pas en 3 FN (elle est en 1FN et 2FN). Pour la rendre normalisée en 3FN, on doit la décomposer:
Id Nom Prénom Pays Code zip Ville Id Nom Prénom Code zip Id-Code Pays Ville
101 Dupont John France 7500 Paris 101 Dupont John 7500 7500 France Paris
105 Martin Steve EC1Y 8SY EC1Y 8SY UK London
105 Martin Steve UK EC1Y 8SY London
163 Renault Max 10000 10000 France Troyes
163 Renault Max France 10000 Troyes
Clé étrangère faisant référence à la Clé primaire pour la table
INGÉ 1 - BASES DE DONNÉES
colonne (Id-Code) de la 2ème table
64
ajoutée © Salma REBAI-JRIBI
MODÈLE LOGIQUE DE DONNÉES (MLD)
Les Formes Normales
Algorithme de décomposition
• On considère la relation COMMANDE dont le schéma est donné par :
COMMANDE ( N°Commande, date, N°Client, nom, N°Article, désignation, quantité )
• La première forme normale : La mise d’une relation en première forme normale permet d’éliminer les groupes
répétitifs dans la table. La démarche à suivre est la suivante :
Sortir le groupe répétitif de la relation initiale.
Transformer le groupe répétitif en relation, rajouter la clé primaire de la relation initiale dans la clé de la nouvelle relation.
Impose que les attributs non clé dépendent de la totalité de la clé primaire. Tout attribut qui dépendrait d’une partie de
la clé, sera exclu de la table. Le processus est le suivant :
Regrouper dans une relation les attributs dépendant de la totalité de la clé, et conserver cette clé pour cette relation.
Regrouper dans une autre relation, les attributs dépendant d’un sous-ensemble des attributs clé, et faire de cet ensemble la
clé primaire de la nouvelle relation.
Permet d’éliminer des dépendances transitives au sein d’une relation. La démarche est la suivante :
Conserver dans la relation initiale les attributs dépendant directement de la clé.
Regrouper dans une autre relation les attributs dépendant de la clé par transitivité. L’attribut de transition reste dupliqué dans
la relation initiale et devient la clé primaire de la nouvelle relation.
• Question.1: Ce schéma relationnel est-il normalisé ? Est-il en 1FN, en 2FN ou en 3FN ? Expliquer et
justifier votre réponse pour chacune des formes normales.
• Question.2: Apporter les modifications nécessaires sur le schéma, pour qu’il respecte la 3FN, sans perte
d’information.
Transformation en 3 FN : Pour que R1 et R2 soient en 3FN, il faut que chaque attribut non-clé ne dépend pas
fonctionnellement d’un autre attribut non-clé. En appliquant les règles de décomposition (Slide 69), on obtient:
• Q.1 Sachant qu’un film est réalisé par un seul réalisateur et commercialisé par un seul éditeur et est
caractérisé par un genre et une nationalité, déterminer en quelle forme normale est le schéma relationnel
ci-dessus ? Expliquer et justifier votre réponse pour chacune des formes normales.
• Q.2 Apporter les modifications nécessaires sur le schéma, pour qu’il respecte la 3FN, sans perte
d’information.
Le schéma n’est pas en 2 FN : La clé primaire de la table « Video » est composée de (« No-
Casette » , « Date-Location-Casette »), mais il y a plusieurs attributs non-clés qui dépendent
seulement d’une partie de cette clé.
Contre-Exemple : L’attribut « Nom-Réalisateur » dépend uniquement de la clé « No-Casette », mais
pas de l’attribut clé « Date-Location-Casette »
74
RAPPEL - CONCEPTION DE LA BASE
3 Niveaux de Modélisation de Données
Modèle physique
Types numériques :
• Les nombres entiers :
INT / INTEGER : Entier long signé (codé sur 4 octets).
SMALLINT: Entier court signé (2 octets) ; BIGINT: entier très long signé (8 octets) ; etc….
VARCHAR(n_max) : Chaine de caractères de longueur L variable 0< L < n_max, avec n_max <=255. (Coût: L+2 octets)
TEXT : chaine de caractères de longueur L variable, 0 <L < 2 . ( Coût: L+2 octets)
BINARY(n) ; VARBINARY (n_max) ; BLOB : pour des chaines de type binaire tels que des documents multimédia.
Types temporels :
DATE : Date en format "AAAA-MM-JJ".
D’autres types :
MONEY, BOOLEAN, etc. ...
Un schéma d’une BDD = un schéma relationnel (ensemble de relations / tables) + un ensemble de contraintes d’intégrité.
Permettent de garantir la cohérence et l’intégrité de la base de données lors des insertions et mises à jour des données.
Définies au moment de la création des tables de la BDD : Langage de définition de données de SQL.
Toute opération de manipulation des données qui viole une contrainte d’intégrité ne sera pas validée.
Définition d’une liste fermée de valeurs admises, d’un minium et/ou d’un maximum, d’une condition ou une dépendance
entre les valeurs prises par différents attributs, etc…
Exemples : AnnéeEmbauche={1980..2002}, AnnéeEmbauche={1980, 1984, 1995}, 18≤ Age ≤ 65, AnnéeEmbauche>AnnéeNaissance ,
les espèces e3 et e6 ne peuvent pas cohabiter, etc…
Peuvent mettre en jeu une ou plusieurs colonnes, et une ou plusieurs relations (CI Intra-relation et CI inter-relation).
• Un n-uplet est inséré dans la base, si et seulement si, tous ses champs satisfont les CI de domaine précisées lors
de la création de la BDD.
Contrainte UNIQUE ( <liste d’attributs> ) : garantit l’unicité des valeurs de l’ensemble des attributs dans la liste. Peut
être utile pour substituer une PK composite complexe par une PK technique (artificiel).
Contrainte NOT NULL : garantit que la colonne ne prend pas une valeur nulle (valeur conventionnelle NULL pour une
information inconnue).
Contrainte DEFAULT <Valeur> : Donne une valeur par défaut à une colonne, quand aucune valeur n’est spécifiée pour la
remplir.
Ce sont des contraintes de type intra-relation, pouvant mettre en jeu une ou plusieurs colonnes.
La définition d’une CI référentielle entraine un certain nombre de vérification lors de la manipulation des données :
Vérification de l’existence de la valeur de la clé étrangère (dans la table référencée) lors de l’insertion d’un nouveau n-uplet.
Vérification de l’absence d’une clé étrangère qui fait référence à la clé primaire d’un n-uplet de la table référencée qu’on cherche à le
modifier ou à le supprimer. Si c’est le cas, plusieurs stratégies sont envisageables :
o Suppression (ou mise à jour ) interdite, Suppression (ou mise à jour) en cascade, Suppression (ou mise à jour) avec initialisation
(Ex: valeur NULL si l’opération est possible).
Le langage SQL est un langage déclaratif standardisé, qui définit différentes catégories
d’instructions pour la gestion des bases de données relationnelles :
• Langage de Définition de Données (LDD) : La définition de la structure et des objets de la BDD.
• Langage de Manipulation de Données (LMD) : La manipulation des données stockées dans la BDD.
• Langage de Contrôle de Données (LCD) : Le contrôle des droits d’accès des utilisateurs de la BDD.
• Langage de Contrôle de Transaction (LCT) : La gestion des transactions.
Remarque : Le langage SQL est non sensible à la casse (select = SELECT), chaque requête doit se terminer par « ; ».
• Rôle : Gestion des transactions (validation ou annulation d’une séquence d’opérations sur les données).
Exemples : INSERT INTO Personne (N°SS, nom, Prenom, Age) VALUES ( '4546788', 'Dupont' , 'Jean', 45) ;
INSERT INTO Livre (id, name, pub_date) VALUES (6578, 'BDD', '2017-03-30');
La requête Select doit retourner le même nombre de propriétés que celles à valoriser.
• La clause « SELECT » spécifie les attributs (colonnes) qui doivent apparaitre dans le résultat.
« * » : permet de récupérer toutes les colonnes de la (les) table(s) interrogée(s) par la requête.
• La clause « FROM » spécifie les tables sur lesquelles portent la requête.
• La clause « WHERE » est facultative et énonce une condition pour restreindre les tuples sélectionnés.
Les opérateurs logiques (AND, OR, NOT,…) peuvent être utilisés pour accumuler plusieurs conditions.
• La clause « ORDER BY » est facultative et permet de trier les tuples sélectionnés.
Nom Prénom
Requête SQL
Evain Sofia
SELECT Nom, Prénom
FROM Personne Bornon Aline
WHERE Age < 30 ; Monot Alexis
Prénom Poids_arrondi
Requête SQL
Sofia 64
SELECT Prénom, Poids As Poids_arrondi
FROM Personne ; Aline 70
Sofia 90
Q2. Donner les noms et adresses des hôtels « 4 étoiles » qui ont été inaugurés entre janvier 2015 et décembre 2018.
Q3. Trouver la liste des chambres doubles, ayant une « vue sur mer » et un tarif inférieur à 250 euro par nuit.
Q4. Trouver les dates de réservation et les identifiants des clients qui ont réservé au moins 3 jours consécutifs dans une
chambre d’hôtel.
INGÉ 1 - BASES DE DONNÉES 107 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD – Projection & Restriction
Q2. Donner les noms et adresses des hôtels « 4 étoiles » qui ont été inaugurés entre janvier 2015 et décembre
2018.
Select NomH, AdresseH
From Hotel
Where Nombre_Etoiles = '4 étoiles' and
Date_Inauguration >= '2015-01-01' and Date_Inauguration <= '2018-12-31' ;
INGÉ 1 - BASES DE DONNÉES 108 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD – Projection & Restriction
Exercice d’application : Correction (2/2)
Q3. Trouver la liste des chambres doubles, ayant une « vue sur mer » et un tarif inférieur à 250 euro par nuit.
Select NumChambre
From Chambre
Where Nbre_Lits = 2 and Vue = 'vue sur mer' and tarif < 250 ;
Q4. Trouver les dates de réservation et les identifiants des clients qui ont réservé au moins 3 jours consécutifs
dans une chambre d’hôtel.
Select Date_Reservation, Client
From Reservation
Where datediff( Date_Depart, Date_Arrivee ) >= 3 ;
Requête SQL
• Exemple: Table Achat
id client tarif date SELECT client, tarif, date
FROM Achat
1 Marie-Pierre 102 2012-10-23 WHERE client LIKE 'Ma%' ;
2 Song 47 2012-10-27
3 Marie-sophie 18 2012-11-05 client tarif date
4 Marie 20 2012-11-14 Marie-Pierre 102 2012-10-23
5 Alexis 160 2012-12-03 Marie-sophie 18 2012-11-05
Marie 20 2012-11-14
INGÉ 1 - BASES DE DONNÉES 111 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD – Restriction
Restriction :
• La clause « WHERE » : définie une condition pour filtrer les n-uplets à conserver.
Opérateurs de comparaison : LIKE motif, NOT LIKE motif pour les conditions sur les chaines de caractères.
Le caractère « % » peut être utilisé pour désigner une suite de 0 à N caractères inconnus, le caractère « _ » pour désigner un
caractère quelconque, les fonctions « UPPER( ) » et « LOWER( ) », etc…
3 Marie-sophie 18 2012-11-05
4 Marie 20 2012-11-14 client tarif date
5 Alexis 160 2012-12-03 Song 47 2012-10-27
Marie-sophie 18 2012-11-05
INGÉ 1 - BASES DE DONNÉES 112 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD – Restriction
Restriction :
• La clause « WHERE » : définie une condition pour filtrer les n-uplets à conserver.
Opérateurs de comparaison « IS NULL » et « IS NOT NULL » : test sur la détermination ou indétermination
des valeurs d’un attribut.
• Exemple: Sélectionner les informations des produits dont le stock est renseigné
Table Approvisionnement Requête SQL
id Produit tarif stockProd dep SELECT *
FROM Approvisionnement
1 lait 102 null 75 WHERE stockProd IS NOT NULL ;
2 biscuit 47 2500 78
3 jus 18 1000 75 id Produit tarif stockProd dep
4 yaourt 50 null 98
2 biscuit 47 2500 78
3 jus 18 1000 75
INGÉ 1 - BASES DE DONNÉES 113 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD – Restriction
Restriction :
• La clause « WHERE » : définie une condition pour filtrer les n-uplets à conserver.
Opérateurs de comparaison : IN (constante1, const2, …), NOT IN (const1, const2, …)
• Exemple : Donner les commandes passées après la dernière livraison des produits ? Requête SQL
Table Commande Table Approvisionnement SELECT *
id Produit tarif DateLiv dep FROM Commande
WHERE dateCmde > ALL (
1 lait 102 01-05-2018 75 SELECT dateLiv
2 biscuit 47 01-11-2017 78 FROM Approvisionnement) ;
3 jus 18 30-09-2018 75
4 yaourt 20 15-08-2018 98 numCmde dateCmde numCl
4 14-10-2018 1
INGÉ 1 - BASES DE DONNÉES 119 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD - Requêtes corrélées
Restriction : Requêtes corrélées
• La clause « WHERE » : définie une condition pour filtrer les n-uplets à conserver.
Opérateur [NOT ] EXISTS (sous-requête) : Teste l’existence de tuples (lignes) retournés par la sous-requête.
Aucun champ n’est spécifié dans la condition WHERE principale. La corrélation entre les deux requêtes est spécifiée dans la
clause where de la sous requête (on relie la clé de la table de la sous-requête à la clé de la table de la requête principale ).
• Exemple : Donner les informations des clients qui ont passé au moins une commande ?
Requête SQL
Table Client Table Commande
SELECT * FROM Client
numCl nomClient Téléphone numCmde dateCmde numCl
WHERE EXISTS (
1 Jean Dupont 0611546788 1 20-10-2017 1 SELECT * FROM Commande
2 Michel Keller 0745632345 2 01-01-2018 2 WHERE numCl = [Link] ) ;
• Questions:
Q1. Donner la liste des chambres (numéros des chambres et des hôtels correspondants) qui n’ont jamais été réservées.
Q2. Donner le numéro, le tarif et la vue des chambres qui ont été occupées par le client N°145787 depuis le début de
l’année 2017.
Q3. Trouver l’hôtel ayant la chambre double avec le tarif le plus élevé dans la chaine hotellière.
Q4. Donner la liste des chambres doubles ayant un tarif inférieur à celui proposé pour une chambre simple avec une « vue
sur mer », triées par ordre décroissant de leurs tarifs.
INGÉ 1 - BASES DE DONNÉES 121 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD - Requêtes avancées
Exercice d’application : Correction (1/2)
Q1. Donner la liste des chambres (numéro des chambres et des hôtels correspondants) qui n’ont jamais été
réservées.
Select NumChambre, Hotel From Chambre
Where NumChambre NOT IN (
Select Chambre From Reservation
);
Q2. Donner le numéro, le tarif et la vue des chambres qui ont été occupées par le client N°145787 depuis
l’année 2017.
Select NumChambre, Tarif, Vue From Chambre
Where NumChambre IN (
Select Chambre From Reservation
Where Client = 145787 AND Date_Arrivee >= '2017-01-01' ) ;
INGÉ 1 - BASES DE DONNÉES 122 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD - Requêtes avancées
Exercice d’application : Correction (2/2)
Q3. Trouver l’hôtel ayant la chambre double avec le tarif le plus élevé dans la chaine hotellière.
Select Hotel From Chambre
Where Nbre_Lits =2 and Tarif >= ALL (
Select Tarif From Chambre Where Nbre_Lits = 2 ) ;
Q4. Donner la liste des chambres doubles ayant un tarif inférieur à celui proposé pour une chambre simple
avec une « vue sur mer », triées par ordre décroissant de leurs tarifs.
Select NumChambre From Chambre
Where Nbre_Lits =2 and Tarif < ANY (
Select Tarif From Chambre
Where Nbre_Lits = 1 and lower(Vue) Like '% mer % ' )
Order by Tarif DESC ;
INGÉ 1 - BASES DE DONNÉES 123 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD - Requêtes ensemblistes
Opérations Ensemblistes:
• UNION : permet d’unir tous les tuples issus de plusieurs requêtes « SELECT ».
• INTERSECTION : permet de récupérer les tuples communs à plusieurs requêtes « SELECT ».
• DIFFERENCE : permet de récupérer les tuples de la première requête SELECT après élimination de ceux
résultants des autres requêtes.
• Syntaxe SQL :
< SELECT 1 > [ UNION / EXCEPT / MINUS/ INTERSECT ] < SELECT 2 >
N.B: Les tables résultats des requêtes SELECT doivent avoir le même schéma.
Seulement la commande UNION est supporté par MySQL.
• Exemple : La liste des départements, où on peut trouver soit un Magasin d’approvisionnement soit un Fournisseur?
Table Approvisionnement Table Fournisseur
Requête SQL
id Produit tarif dep Id_F Nom dep
SELECT dep FROM Approvisionnement
1 lait 102 75 1 Produit frais 75 UNION
2 biscuit 47 78 SELECT dep FROM Fournisseur ;
2 L’agriculteur 99
3 jus 18 75
dep
4 yaourt 20 98
75 Les doublons sont
78 éliminés du résultat.
98
99
INGÉ 1 - BASES DE DONNÉES 125 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD - Requêtes multi-tables
Produit Cartésien :
• La clause « FROM » : spécifie les tables sur lesquelles portent la requête.
• Quand plusieurs tables sont énumérées, la table résultat est le produit cartésien de toutes les tables énumérées:
Les colonnes de la table résultat correspond à la concaténation des différents attributs des tables spécifiées par la clause FROM
Les lignes (enregistrements) de la table résultat correspond à la concaténation des différentes combinaisons entre les tuples des
tables énumérées.
Les tables peuvent être renommées dans la requête pour simplifier leurs référencement : FROM nom_de_table [AS] nouveau_nom
• Syntaxe SQL :
SELECT <liste colonnes>
FROM <TablePrincipale> tp [ INNER / LEFT/ RIGHT ] JOIN
<TableJointe> tj
ON <tp.nom_colonne = tj. nom_colonne>
[ AND / OR tp.cl2 = tj.cl2 ]
INGÉ 1 - BASES DE DONNÉES 128 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD - Requêtes multi-tables
La Jointure : INNER JOIN
• C’est la jointure par défaut, qui compare deux tables et retourne tous les
enregistrements comportant une concordance, en général, entre une clé primaire PK
et une clé étrangère FK.
• Exemple:
Requête SQL
SELECT e.ID_Eleve, [Link], [Link], [Link], [Link]
FROM Eleve e INNER JOIN Note n
ON n.Id_Eleve = e.Id_Eleve ;
Exercice d’application : Soit le Schéma relationnel suivant pour la gestion de l’activité d’une chaine hotellière :
Hotel ( NumHotel , NomH, AdresseH, TelephoneH, Date_Inauguration, Nombre_Etoiles)
Client ( Id_Client , Nom, Date_Naissance, Adresse, Email )
Chambre ( NumChambre, Nbre_Lits, Vue, Tarif, #Hotel)
Reservation (NumReservation, Date_Reservation, Date_Arrivee, Date_Depart, #Chambre, #Client)
• Questions:
Q1. Donner la liste des chambres (nom de l’hôtel et numéro de chambre) qui n’ont jamais été réservées par des
clients.
Q2. Donner les noms et les adresses des clients qui ont réservé au moins 3 jours consécutifs dans une chambre
d’hôtel, ayant une « vue sur mer ».
Q2. Donner les noms et les adresses des clients qui ont réservé au moins 3 jours consécutifs dans une
chambre d’hôtel, ayant une « vue sur mer ».
Select Nom, Adresse
From Client Cl join Reservation R on Cl.Id_Client = [Link]
join Chambre Ch on [Link] = [Link]
Where datediff(R.Date_Depart, R.Date_arrivee) >= 3 and lower([Link] ) Like '% mer % ' ;
INGÉ 1 - BASES DE DONNÉES 133 © Salma REBAI-JRIBI
INTERROGATION DES BASES DE DONNÉES
RELATIONNELLES
REQUÊTES AVANCÉES - LES AGRÉGATS
SQL – LANGAGE LMD
Interrogation d’une BDD - Requêtes d’agrégation
Les requêtes d’agrégation :
• Jusqu’à présent, les requêtes SQL étudiées permettent d’appliquer des opérations sur les données de la BDD
tuple à tuple (ligne par ligne).
• Les requêtes d’agrégation permettent d’exprimer des conditions et de faire des opérations sur des groupes de
tuples en même temps.
• Avec le langage SQL, nous pouvons :
Agréger des valeurs sur un groupe de tuples en utilisant les fonctions d’agrégation :
Ensemble de fonctions prédéfinies qui permettent d’effectuer des opérations statistiques sur un ensemble d’enregistrements
(récupérer le minimum ou le maximum des valeurs, calculer la moyenne ou la somme sur plusieurs enregistrements, etc…)
Partitionner (logiquement) une relation/table en groupes de tuples et exprimer des conditions sur ces groupes, en
utilisant les opérateurs de groupement « GROUP BY » et « HAVING » :
Ce groupement est souvent associé à des fonctions d’agrégation.
Table Achat
id client tarif date Requête SQL
1 Pierre 102 2012-10-23 SELECT COUNT( Distinct client ) As nbre_clients
FROM Achat
2 Simon 47 2012-10-27 WHERE tarif > 30 ;
3 Marie 18 2012-11-05
4 Marie 20 2012-11-14
5 Pierre 160 2012-12-03 nbre_clients
2
Table Achat
id client tarif date Requête SQL
1 Pierre 102 2012-10-23 SELECT MIN(tarif), MAX(tarif), AVG(tarif), SUM(tarif)
FROM Achat
2 Simon 47 2012-10-27 WHERE date < '2012-11-30' ;
3 Marie 18 2012-11-05
4 Marie 20 2012-11-14
5 Pierre 160 2012-12-03 MIN(tarif) MAX(tarif) AVG(tarif) SUM(tarif)
18 102 46.75 187
Requête SQL
Table Achat
SELECT client, SUM (tarif)
id client tarif date
FROM Achat
1 Pierre 102 2012-10-23 GROUP BY client ;
2 Simon 47 2012-10-27
3 Marie 18 2012-11-05
client SUM(tarif)
4 Marie 20 2012-11-14
Pierre 262
5 Pierre 160 2012-12-03
Simon 47
Marie 38
INGÉ 1 - BASES DE DONNÉES 141 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD - Requêtes d’agrégation
« HAVING » : conditions exprimées sur les agrégats et les caractéristiques des groupes: fonctions d’agrégation (count(),
min(), etc…) appliquées aux attributs de groupement ne peut pas contenir des conditions sur des valeurs
d’attributs.
Une requête « SELECT » peut contenir à la fois les clauses « WHERE » et « HAVING ».
La clause « WHERE » est évaluée avant le calcul d’agrégat (formation de la partition).
La clause « HAVING » est évaluée après l’agrégat pour effectuer des restrictions sur les groupes .
Requête SQL
Table Achat
id client tarif date SELECT client, SUM (tarif) AS dépenses
FROM Achat
1 Pierre 102 2012-10-23 GROUP BY client
2 Simon 47 2012-10-27 HAVING dépenses > 45 ;
3 Marie 18 2012-11-05
4 Marie 20 2012-11-14 client dépenses
5 Pierre 160 2012-12-03
Pierre 262
Simon 47
INGÉ 1 - BASES DE DONNÉES 144 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD - Résumé
Syntaxe Générale
• Questions:
Q1. Donner la requête SQL permettant d’afficher, pour chaque client (identifiant et nom), le nombre total de
réservations effectuées, triés par ordre décroissant du nombre de réservations effectuées.
Q2. Donner les identifiants des clients ayant effectué au moins une réservation dans chacun des hôtels de la chaine.
Q3. Donner le nom et l’adresse de l’hôtel qui a eu le plus de réservations effectuées durant l’année 2015.
Q2. Donner les identifiants des clients ayant effectué au moins une réservation dans chacun des hôtels de la chaine.
Select [Link]
From Reservation R join Chambre Ch on [Link] = [Link]
Group By [Link]
Having COUNT(DISTINCT [Link]) = ( Select COUNT(*) From Hotel) ;
INGÉ 1 - BASES DE DONNÉES 147 © Salma REBAI-JRIBI
SQL – LANGAGE LMD
Interrogation d’une BDD - Requêtes d’Agrégation
Exercice d’application : Correction (2/2)
Q3. Donner le nom et l’adresse de l’hôtel qui a eu le plus de réservations effectuées durant l’année 2015.
Select [Link], [Link]
From Hotel H join Chambre Ch on [Link] = [Link]
join Reservation R on [Link] = [Link]
Where R.Date_Reservation like '2015-%-%’
Group by [Link]
Having Count (*) >= ALL (
Select Count(*)
From Hotel H join Chambre Ch on [Link] = [Link]
join Reservation R on [Link] = [Link]
Where R.Date_Reservation like '2015-%-%’
Group by [Link] ) ;
INGÉ 1 - BASES DE DONNÉES 148 © Salma REBAI-JRIBI
ALLER PLUS LOIN AVEC SQL
OPTIMISER SES REQUÊTES D’INTERROGATION
SQL – LES VUES (VIEW)
Définition :
• Une Vue est une table virtuelle dérivée d’une ou plusieurs tables de la BDD, contenant le résultat d’une requête
d’interrogation « SELECT » sur ces tables :
Seulement la définition de la vue (la requête) est stockée dans la BDD, mais pas son contenu (données/tuples résultats).
Le contenu de la vue est généré dynamiquement : la requête est ré-évaluée à chaque fois que le vue est référencée.
Toute modification des données dans les tables d’origine est immédiatement visible dans la vue dés qu’elle est référencée à nouveau.
Les vues s’utilisent dans les requêtes « SELECT » comme une table réelle de la BDD.
• Exemple : CREATE VIEW ParisCinemas AS SELECT * FROM Cinema WHERE ville = 'paris' ;
INGÉ 1 - BASES DE DONNÉES 150 © Salma REBAI-JRIBI
SQL – LES VUES (VIEW)
• Question : Trouver les noms des lecteurs ayant emprunté plus de 3 romans policier de 'Simenon' le même jour.
Vue pour la restructuration des informations pertinentes pour la requête Requête pour la réponse
• Question : Trouver les noms des lecteurs ayant emprunté plus de 3 romans policier de 'Simenon' le même jour.
Vue pour la restructuration des informations pertinentes pour la requête Requête pour la réponse
Requête SQL Requête SQL
CREATE VIEW lecteur_de_policier AS SELECT DISTINCT ident_lecteur
SELECT N°lecteur, ident_lecteur, N°livre, auteur, date_emprunt FROM lecteur_de_policier
FROM livre Lv join Prêt P on Lv.N°livre = [Link] WHERE auteur = 'Simenon'
join lecteur Lc on [Link] = Lc.N°lecteur GROUP BY N°lecteur, date_emprunt
WHERE [Link] = 'roman policier' ; HAVING COUNT(*) > 3;
INGÉ 1 - BASES DE DONNÉES 154 © Salma REBAI-JRIBI
SQL – LES VUES (VIEW)
Requêtes de Modification et de Suppression
Modification d’une Vue :
Syntaxe SQL
ALTER VIEW nom_vue [ ( nom_colonne1 [, nom_col2, ...] ) ] AS <Nouvelle_SELECT > ;
• Exemple :
Requête SQL
ALTER VIEW lecteur_de_policier AS
SELECT N°lecteur, ident_lecteur, N°livre, date_emprunt
FROM livre Lv join Prêt P on Lv.N°livre = [Link] join lecteur Lc on [Link] = Lc.N°lecteur
WHERE [Link] = 'roman policier’ AND date_emprunt >'2018-01-01' ;
Quelques fonctions prédéfinies sur MySQL pour la Manipulation des chaines de caractères :
Fonction / Syntaxe Description Exemple
Retourne la taille d’un chaine de SELECT LENGTH("SQL Tutorial")
LENGTH (text)
caractères AS LengthOfString ;
Convertit une chaine de caractères SELECT LOWER(CustomerName)
UPPER (text) / LOWER (text)
en majuscules/minuscules FROM Customers;
SELECT CustomerName,
Concatène deux ou plusieurs
CONCAT(expression1, expression2, ...) / CONCAT_WS (" ", Address,
expressions ensembles, en utilisant
CONCAT_WS(séparateur, expr1, expr2, …) PostalCode) AS Address
éventuellement un séparateur.
FROM Customers;
Retourne la position de la première
SELECT Name, POSITION ( "a" IN
POSITION(substring IN string) occurrence d'une sous-chaîne dans
Name ) FROM Customers;
une chaîne.
Remplace toutes les occurrences
SELECT REPLACE("XYZ FGH
REPLACE(string, from_string, new_string) d'une sous-chaîne dans une chaîne
XYZ", "X", "m");
par une nouvelle sous-chaîne.
INGÉ 1 - BASES DE DONNÉES 157 © Salma REBAI-JRIBI
SQL – Les fonctions intégrées
Fonctions Numériques