Vous êtes sur la page 1sur 134

17/03/2020

Licence Génie logiciel

Pr : Aziz BAATAOUI

Bases de données avancées


Module I618

Année universitaire : 2019/2020

Licence Génie logiciel

Plan
Chapitre 1 : Introduction aux bases de données

Chapitre 2 : Conception des bases de données : Modèle Entité-Association

Chapitre 3 : Modèle Relationnel

Chapitre 4 : Dépendances fonctionnelles et normalisation

Chapitre 5 : Algèbre relationnelle

Chapitre 6 : Langage SQL

1
17/03/2020

Introduction aux Bases de Données

Bases de données : Collection homogène et structurée d'informations ou de données


persistantes (les données sont conservées de manière permanente, elles sont disponibles
pour chaque utilisateur.) permettant de décrire les activités d'une ou plusieurs
organisations.

Exemple :

Organisation : une bibliothèque

Données : les livres, les emprunts, les emprunteurs

Organisation : une Université

Données : les étudiants, les enseignants, les cours, etc.

Les données sont mémorisées dans un ordinateur, utilisé par de nombreuses personnes et
possédant une organisation régie par un modèle de données.

Introduction aux Bases de Données


Les BD sont conçues pour traiter de gros volumes d'informations. La gestion de ces
données demande :
v Une structuration de ces données.

v Une rationalisation des procédures d'accès et de traitement.

v Une assurance de la sécurité des informations stockées dans la BD.


L'utilisateur dispose de moyens très élaborés pour effectuer un large éventail
d'opérations:
v Créations de nouveaux fichiers,

v Consultation, ajout, modification ou suppression de données,

v Calculs et éditions de résultats.

v etc …

Les langages et les outils logiciels pour effectuer ces opérations sont évolués et très
pratiques.

2
17/03/2020

Système de Gestion de Bases de Données (SGBD)

Ensemble de logiciels systèmes permettant aux utilisateurs d'insérer, de modifier, et de


rechercher efficacement des données spécifiques dans une grande masse d'informations
(pouvant atteindre plusieurs milliards d'octets) partagée par de multiples utilisateurs.
Exemple : MySQL, PostgreSQL, Oracle, Microsoft SQLServer, etc.

Le SGBD permet à chaque utilisateur d’effectuer les tâches suivantes :


v Mettre en forme
v Sauvegarder
v Manipuler
v Interroger
v Mettre à jour la BD, tout en garantissant : L’intégrité, la confidentialité des
données dans un environnement multiutilisateurs et la sécurité des données

Modèles de base de données

Un modèle de BDD illustre la structure logique d'une BDD, y compris les relations et les
contraintes qui déterminent comment les données peuvent être stockées et accessibles.

Les modèles de BDD individuels sont conçus en fonction des règles et concepts du modèle
de données plus général adopté par les concepteurs.

La plupart des modèles de données peuvent être représentés par un diagramme de base de
données.
Il existe de nombreux types de modèles de bases de données. Parmi les plus courants:

v Modèle hiérarchique

v Modèle réseau

v Modèle relationnel

v Modèle orientée objet

v Modèle relationnel – objet

3
17/03/2020

Modèles de base de données : Modèle hiérarchique (1965)

Le modèle hiérarchique organise les données dans une structure arborescente (avec une racine
et plusieurs niveaux de sous-arbres), où chaque enregistrement dispose d'un seul parent
(racine).
Liaison père-fils Liaison père-fils

Avantages : Inconvénients :
vAdéquation du modèle avec les v Ne décrit pas toujours la réalité.
entreprises à structure arborescente (un v Accès fastidieux.
grand nombre d'organisations v Ne supporte pas les relations N-N.
v Anomalies pour les opérations de stockage .
économiques et sociales correspondent à
v La suppression d'un noeud entraîne la disparition
ce modèle).
des descendants.
vSimplicité du modèle et implémentation
v L'insertion d'une information impose la création d'un
facile. segment parent.
vAdéquation de la structure du schéma et v Le remplacement d'une information doit s'effectuer
des besoins des utilisateurs. pour toutes ses occurrences dans des arbres distincts.

Modèles de base de données : Modèle réseau (1973)

Le modèle réseau est une extension du modèle hiérarchique qui autorise des relations
plusieurs-à-plusieurs entre des enregistrements liés, ce qui implique plusieurs
enregistrements parents..

Avantages : Inconvénients :

vReprésentation naturelle des liens maillés (N : vSystème complexe ;


N) implique élimination des redondances de
données. vDifficile à construire et supporter ;

vCréation de chemins d'accès multiples à une ü Associations complexes ardues.


même donnée.

ü Pas d'indépendance vis à vis des


vAbsences d'anomalies pour les opérations de
stratégies d'accès.
stockage.

4
17/03/2020

Modèles de base de données : Le modèle relationnel (SGBD-R 1970)

Le modèle relationnel est le modèle le plus courant, trie les données dans des tables, que
l'on appelle aussi des relations, dont chacune se compose de colonnes et de lignes.

Avantages : Inconvénients :
vModèle simple vStructure de données trop simple : pas d'attribut
vLangage standard (SQL), complexe, ni multivalué
déclaratif. vPeu compatible avec les langages de programmation
vNiveau logique (essentiellement). vDonnées alphanumériques uniquement : pas
vTechnologie la plus répandue. d’images, sons, vidéo…
vEfficace pour les applications de vMécanisme de transactions inadapté aux nouvelles
gestion classique. applications.

Modèles de base de données : Le modèle objet (1982)

Les données sont stockées sous forme d'objets (une collection d'objets, ou d'éléments
logiciels réutilisables, associés à des caractéristiques et des méthodes) et non pas tables,
c'est-à-dire de structures appelées classes présentant des données membres. Les champs
sont des instances de ces classes.

5
17/03/2020

Modèles de base de données : Le modèle Objet relationnel (1992)

Le modèle OR est une fusion entre les concepts présents dans le modèle relationnel et

certains concepts du modèle orientée objet.

Modèle Objet Relationnel= Modèle Relationnel + Notion d’Objet

La technologie a été introduite en 1992 (Informix achète Illustra qui développait une

version commerciale de PostGres, un sgbd relationnel étendu). Autres éditeurs (IBM DB2,

Oracle...).

Les SGBD-R : Les niveaux de conception d’une BD

Monde extérieure
niveau externe
niveau vue

6
17/03/2020

Les SGBD-R : Les objectifs des SGBD-R

vIndépendance physique des données (données/programmes) : indépendance des

programmes d’application vis à vis du modèle physique.

• Possibilité de modifier les structures de stockage (fichiers, index, chemins

d’accès,…) sans modifier les programmes.

• Meilleure portabilité des applications et indépendance vis-à-vis du matériel.

vIndépendance logique des données : Modification du schéma conceptuel sans


modification des programmes.

vAccès aux données : L’accès aux données se fait par un langage de manipulation de
données (DML), tel que SQL. Le langage doit être optimisé de manière à minimiser le
nombre d’accès disques, de façon transparente pour les utilisateurs . Efficacité et
rapidité au niveau des accès sur les supports.

Les SGBD-R : Les objectifs des SGBD-R

vAdministration centralisée des données : toutes les données doivent être centralisées
dans un lieu de stockage commun à toutes les applications.

vNon redondance des données : chaque information ne doit être représentée qu’une seule
fois dans la base, pour éviter les problèmes lors des mises à jour.

vCohérence des données : Les données sont soumises à des contraintes d’intégrité pour
définir un état cohérent de la base. Elles doivent être exprimées simplement et vérifiées
à chaque insertion, suppression ou modification des données.

Exemple :
Salaire entre 5000Dhs et 10000Dhs,
ou
Nom de type alphabétique
ou
relations entre les données ex : prix de vente > prix d’achat).

7
17/03/2020

Les SGBD-R : Les objectifs des SGBD-R

vPartage des données : plusieurs utilisateurs peuvent intervenir sur les données
simultanément. Plus particulièrement permettre la modification du contenu de la base.

vSécurité des données : associe des droits d’accès aux utilisateurs. Pour protéger l’accès à
certaines données.

vRésistance aux pannes : pouvoir récupérer les données après une panne, soit en
récupérant l’état de la BD avant la panne, soit terminer l’opération interrompue.

Licence Génie logiciel

Chapitre 2 : Conception des bases de données : Modèle Entité-Association

Introduction

Entité et type-Entité

Association et type-association

Attribut et valeur

Identifiant

Cardinalités d’un type-association

Contrainte d’intégrité fonctionnelle (CIF)

Généralisation et spécialisation

8
17/03/2020

Conception des bases de données :


Modèle Entité-Association
La modélisation d’un problème est le passage du monde réel à sa représentation
informatique.

En général, le processus de modélisation des données passe par deux phases :

1. Réalisation d’un modèle conceptuel : c’est une phase d’analyse du problème réel. Cette
phase est assez délicate et permet de définir les données à utiliser, leur mode
d’évolution dans le temps et les relations entre elles.

2. Traduction en un modèle relationnel qui consiste à élaborer l’ensemble des objets


manipulables par un SGBD-R. Il peut être découpé en deux étapes :

v La conception de modèle logique (représentation en tables indépendantes du


SGBD)

v La traduction en un modèle physique (propre à un SGBD spécifique). Tous les


SGBD n’ont pas les mêmes caractéristiques du langage SQL.

Modèle Conceptuel de données (MCD)


Un schéma conceptuel (MCD) représente :
q Les faits et les évènements qui décrivent le monde à modéliser.
Exemple : une compagnie aérienne, ses avions et ses pilotes.

q Certaines contraintes.
Exemple : un pilote ne doit vole que s’il détient une licence en cours de validité et une
qualification correspondant au type d’avion.

Le MCD est basé sur le Modèle Entité-Association (en anglais E-R pour Entity
Relationship).

Un MCD est un diagramme avec des entités et des associations. Pour le réaliser il faut
s’aider d’outils graphiques informatiques spécialisés

v Avec licence : - Microsoft Visio - Maestro SQL - Oracle Designer - PowerAMC (de
Sybase) - ERwin - ER/Studio …

v Libres - MySQL Workbench - DBDesigner

9
17/03/2020

Modèle Entité-Association : Entité


L’idée force du modèle entité-association est de représenter, par un schéma standarisé, les
différents éléments constitutifs du système d’information, appelés attributs (exemple :
nom, âge, ...), et les relations qui les unissent, appelées associations.

Modèle E/A : 3 concepts principaux : entité, association, attribut.

q Entité

v Une entité est un objet, une chose concrète ou abstraite ayant une existence propre
et conforme aux besoins de l ’application.

ADHERENT Type entité

En+té
Alaoui Karim
Chahir Khalid En+té
Lamnii Loubna En+té
El Ouardi Hamid En+té

Il faut noter que les entités ne sont pas représentées sur un modèle entité-association.

Modèle Entité-Association : Type entité


q Type-entité (classe entité)

v Un type-entité désigne un ensemble d’entités qui possèdent une sémantique et


propriétés communes.

Exemple : Les personnes, les livres, les voitures sont des type-entités.

v Dans un diagramme entité-association, un type-entité est représenté par un rectangle


à cartouche.

Le nom du type-entité est placé dans


ADHERENT le cartouche en majuscules

Type entités « ADHERENT »

Une entité est une occurrence ou instance de son type-entité.

Par abus de langage, le terme entité est régulièrement utilisé pour désigner le type-entité et
ses entités. Il ne faut cependant pas confondre ces deux notions.

10
17/03/2020

Modèle Entité-Association : Type entité


q Exercice

v L’entreprise ALuMeknes fabrique des tuyaux d’aluminium. Elle emploie 25


salariés (ouvriers, cadres et chauffeurs) et possède 12 machines (laminoir,
soudeuse…). En outre elle dispose de 3 véhicules de livraison pour desservir 4
entrepôts, ce qui lui permet d’être plus réactive aux commandes de ses clients..

Quelle sont les entités liées à l’entreprise AluMeknes.

Entités probables :
Ø Salarié,
Ø Machine,
Ø Véhicule (de livraison),
Ø Entrepôt,
Ø Client,
Ø Produit,
Ø Commande.

Modèle Entité-Association : Type entité


q Exercice
v Un club sportif possède 5 équipes : 2 de volley-ball, 2 de football et 1 de
rugby. Chaque équipe appartient à l’une des catégories suivantes : junior,
senior, vétéran. Les joueurs s’entraînent dans différents lieux (stade, gymnase,
salle de sport…) sous la responsabilité d’un entraîneur. Les matchs opposent des
équipes d’une même division et d’une même poule (sous-division).

Quelle sont les entités liées à ce club sportif.

Entités probables :
Ø Lieu d'entrainement,
Ø Entraineur,
Ø Match,
Ø Equipe,
Ø Joueur.
Nota bene : « catégorie », « division » et « poule » seront plus probablement des
propriétés de « équipe » et de « match ».

11
17/03/2020

Modèle Entité-Association : Association


q Association
v Une association (ou relation) est un lien entre plusieurs entités.
Exemple : L’ADHERENT Alaoui Karim Emprunte le LIVRE « Java ».

Selon le modèle entité-association :

v Dans le modèle entité-association, le type-association est représenté par une ellipse à


cartouche.
v Le nom du type-association est placé dans le cartouche.

Modèle Entité-Association : Association


q Association (suite)

v Les type-entités intervenant dans un type-association sont appelés participants.

v Les associations sont caractérisées par les propriétés suivantes :

ü Classe fonctionnelle d’une association : Cette propriété décrit le nombre


maximum d’occurrences de l’entité B pour chaque occurrence de l’entité A et
inversement. Trois classes fonctionnelles d’associations :

§ Association de type 1:1 (ou un-à-un) si à une occurrence de l’entité E peut


correspondre par l'association A au plus une occurrence de l’entité F.

12
17/03/2020

Modèle Entité-Association : Association


q Association (suite)
§ Association de type 1 : n (ou un-à-plusieurs) : si à une occurrence de l’entité
E peut correspondre par l'association A plusieurs occurrences de l’entité F
mais à une occurrence de l’entité au plus une occurrence de l’entité E.

§ Association de type n : n (ou plusieurs-à-plusieurs) : si à une occurrence de


l’entité E peut correspondre plusieurs occurrences de l’entité F et
réciproquement.

Modèle Entité-Association : Association


q Association (suite)

ü Cardinalités d’une association : Chaque entité participant à une association y est


caractérisée par un couple de valeurs min- max appelé cardinalités.

ü Dimension d’une association : C’est le nombre d’entités participant à


l’association. Une association entre deux entités est appelée association binaire.
Une association entre trois entités est appelée association ternaire. Une association
entre n entités est appelée association n-aire.

ü Association réflexive : C’est une association d’une entité sur elle-même. En effet, il
est parfaitement possible d’établir une association entre une entité et elle-même,
définissant par là une association cyclique.
Exemple : pour traduire le fait que Nisrine est la fille
de Asma, on pourra utiliser une association A-
POUR-MERE entre les deux entités représentant ces
personnes.

13
17/03/2020

Modèle Entité-Association : attribut et valeur


q Attribut et valeur

v Un attribut (ou propriété) est une caractéristique associée à un type-entité ou à un


type association.

v Plusieurs type :

ü attribut simple : un attribut qui n'est pas décomposé en d'autres attributs: ses
valeurs sont atomiques. Un domaine lui est associé.
Exemple : salaire, jour

ü attribut complexe : un attribut qui est décomposé en d'autres attributs : ses


valeurs sont des valeurs composées.

Exemple : adresse, composé de: rue, ville, code postal

ü Dérivé: attribut qui est en étroite relation avec un autre attribut.


Exemple : Age et date de naissance

Modèle Entité-Association : attribut et valeur


q Attribut et valeur (suite)
v Plusieurs type :
ü attribut monovalué : un attribut qui ne peut prendre qu'une seule valeur par
occurrence (cardinalité max=1).
Exemple : nom, date de naissance

ü attribut multivalué : un attribut qui peut prendre plusieurs valeurs par


occurrence (cardinalité max>1) .
Exemple : Couleur pour une voiture (rouge, verte, bleue, jaune, etc…)
Une personne peut avoir plusieurs numéros de téléphone différents ou aucun
ü Attribut obligatoire : un attribut qui doit prendre une valeur au moins par
occurrence (cardinalité min=1).

Exemple : nom et prénoms

ü attribut facultatif: un attribut qui peut ne prendre pas de valeur dans une
occurrence (cardinalité min=0).
Exemple : téléphone

14
17/03/2020

Modèle Entité-Association : attribut et valeur


q Attribut et valeur (suite)
v Exemple :

Deux attributs simples,


monovalués et obligatoires

multivalué et obligatoire

Complexe et multivalué et facultatif

Complexe et multivalué et obligatoire

Modèle Entité-Association : attribut et valeur


q Attribut et valeur (suite)
v Une valeur au niveau du type-entité ou de type-association, chaque attribut
possède un domaine qui définit l’ensemble des valeurs possibles qui peuvent être
choisies pour lui (entier, chaîne de caractères, booléen…). Au niveau de l’entité,
chaque attribut possède une valeur compatible avec son domaine.

v Règles :

ü Dans le modèle entité-association, chaque attribut est destiné à recevoir une


valeur.

ü Un attribut ne peut être partagé par plusieurs types-entité ou type-associations.

ü Un attribut est une donnée élémentaire, ce qui exclut les données calculées ou
dérivées.

ü Un attribut peut être placé dans un type-association uniquement lorsqu’il dépend


de toutes les entités liées par le type-association.

15
17/03/2020

Modèle Entité-Association : Identifiant


q Identifiant
v Un identifiant (ou clé) d’un type-entité ou d’un type-association, est un ensemble
minimal d’attributs qui permet d’identifier chaque entité ou association de manière
unique.

v Un identifiant est représenté comme suit dans le modèle entité-association :

Modèle Entité-Association : Identifiant


q Identifiant (suite)

v Règles :

ü Chaque type-entité (ou type-association) possède au moins un identifiant,


éventuellement formé de plusieurs attributs.

ü Il ne peut y avoir la même valeur d’identifiants pour deux instances d’un


type-entité (ou type-association).

16
17/03/2020

Modèle Entité-Association : Cardinalité d’un type-association


q Cardinalités d’un type-association
Les cardinalités d’une patte reliant un type-association et un type-entité précisent le nombre
de fois minimal et maximal d’interventions d’une entité du type-entité dans une association
de type-association. La cardinalité minimale doit être inférieure ou égale à la maximale.

Min,Max
Il faut lire la cardinalité comme suit :
v Un adhérent peut Emprunter plusieurs livres.
v Un livre ne peut être Emprunté que par un seul adhérent.

Modèle Entité-Association : Cardinalité d’un type-association


q Cardinalités d’un type-association (suite)

v Règles :
ü L’expression de la cardinalité est obligatoire pour chaque patte d’un type-
association.

ü Il ne peut y avoir de cardinalité maximale égale à 0, car elle rendrait le type-


association inutile.

ü Une cardinalité minimale est toujours 0 ou 1 et une cardinalité maximale est


toujours 1 ou n.

ü Si une cardinalité est connue et vaut 2 ou plus, alors nous considérons qu’elle
est indéterminée et vaut n.

17
17/03/2020

Modèle Entité-Association : Contrainte d’intégrité fonctionnelle


q Contrainte d’intégrité fonctionnelle CIF
v Une Contrainte d’Intégrité Fonctionnelle (CIF) est un type d’association entre 2
entités caractérisée par un 1 en cardinalité supérieure (0,1 ou 1,1) sur une des
pattes de la relation.

v Cette particularité indique que l’une des entités est totalement déterminée par la
connaissance d’une (ou plusieurs) autre entité présente dans l’association (On dit
aussi que la relation est porteuse d’une dépendance fonctionnelle).

Exemple : si on connaît une facture bien précise, on connaît un client bien précis...

Pour un client, on a au minimum une facture Pour une facture, on a au minimum un


et au maximum n factures. Donc : 1, n client et au maximum un client. Donc : 1,1

Modèle Entité-Association : Généralisation et spécification


q Généralisation et spécialisation
v Spécialisation : Un ensemble d’entités E1 est un sous-ensemble de E si toute
occurrence de E1 est aussi une occurrence de E. L’ensemble d’entités E1 hérite des
attributs de E.

v Généralisation : Un ensemble d’entités E est une généralisation de E1, E2,… En si


chaque occurrence de E est aussi une occurrence d’une et une seule entité E1,
E2,… En.

v Les ensembles E1, E2,… En sont des spécialisations de l’ensemble d’entités E.

v Les ensembles d’entité E1, E2,… En héritent des attributs de E et possèdent en


outre des attributs spécifiques qui expriment leur spécialisation.

18
17/03/2020

Modèle Entité-Association : Généralisation et spécification


q Généralisation et spécialisation

Exemple : l’entité EMPLOYE est une

généralisation des entités

INGENIEUR,PILOTE, TECHNICIEN.

Exemple : L’ensemble des VEHICULES

est une généralisation de l’ensemble

des AUTOMOBILES et des

CAMIONS.

Modèle Entité-Association : Généralisation et spécification


q Exercice

Le club sportif d’une école veut enregistrer les informations sur ses adhérents. Il lui

importe de connaître, pour chaque adhérent, le nom et prénom, la date de naissance, la

commune et quartier de naissance, la section et année d'études (pour les étudiants), le

département (pour les enseignants), le service (pour les administratifs). On veut aussi

connaître les années d'adhésion précédentes, les sports pratiqués pour l'année en cours

ainsi que le niveau de l'adhérent dans chacun de ces sports.

Proposer deux diagrammes entité-association, l’un sans lien de

généralisation/spécialisation, l’autre avec.

19
17/03/2020

Modèle Entité-Association : Généralisation et spécification


q Execice
On veut représenter le personnel d'une entreprise et son affectation. L'entreprise est organisée en services

auxquels est affecté le personnel. Chaque service est décrit par son nom, son chef (qui est nécessairement un

cadre de l'entreprise) et la liste de ses locaux. Le personnel est réparti en trois catégories, les administratifs,

les techniciens et les cadres. Tous possèdent un numéro d'employé, un nom, un prénom, une adresse, une

identification bancaire (nom banque, nom agence, numéro de compte), un salaire et sont rattachés à un

service. Chaque catégorie possède en outre des renseignements qui lui sont propres:

- pour un administratif ou un technicien, le prix de l'heure supplémentaire;

- pour un technicien, les machines dont il est responsable;

- pour un administratif, le(s) cadre(s) pour le(s)quel(s) il travaille;

- pour un cadre, son bureau, son numéro de poste téléphonique et l'(les) administratif(s) (s'il en existe) qui

lui est (sont) attaché(s).

Proposer un diagrammes entité-association.

Modèle Entité-Association : Diagramme E/A


q Diagramme Entité/Association
v Pour avoir un modèle E/A cohérent, il faut respecter des règles de validation
(vérification/normalisation)
ü Règle 1 : Existence d’un identifiant pour chaque entité.
ü Règle 2 : Toutes les propriétés d’une entité, autres que l’identifiant, doivent
être en dépendance fonctionnelle complète et directe de l’identifiant.
ü Règle 3 : Toutes les propriétés d’une association doivent dépendre
complètement de l’identifiant de l’association ; chaque attribut doit dépendre
de tout l’identifiant et non d’une partie de cet identifiant.
ü Règle 4 : Un attribut ne peut apparaître qu’une seule fois dans un même
modèle E/A, c’est ainsi qu’il ne peut qualifier qu’une seule entité ou une
association.
ü Règle 5 : Les attributs qui sont le résultat d’un calcul ne doivent pas, en
principe, figurer dans un modèle E/A sauf s’ils sont indispensables à la
compréhension de celui-ci.

20
17/03/2020

Modèle Entité-Association
q Diagramme Entité/Association
Exemple : Diagrammes E/A

Ce diagramme met en œuvre trois entités : étudiant, module et enseignant. Chaque entité
possède des attributs y compris un identifiant. Nous avons aussi deux associations
binaires entre les entités. L’association Inscrit est une association porteuse de données,
qui contient un attribut année-inscr dépendant des deux entités étudiant et module.

Licence Génie logiciel

Chapitre 3 : Modèle Relationnel

Introduction

Concepts de base de modèle relationnel

Domaine

Attribut

Relation et sa représentation

Contraintes d’intégrité

Passage du modèle E/A au modèle relationnel

21
17/03/2020

Chapitre 3 : Le Modèle Relationnel


q Modèle Relationnel
v Le modèle relationnel a été proposé par Codd au début des années 70. Il peut être
défini de la manière suivante :
ü Les données sont organisées sous forme de tables à deux dimensions, encore
appelées relations, dont les lignes sont appelées n-uplet ou tuple en anglais ;

ü Les données sont manipulées par des opérateurs de l’algèbre relationnelle


(!, #, ⋈,∪,∩, … );

ü L’état cohérent de laBDD est défini par un ensemble de contraintes d’intégrité.

Le Modèle Relationnel : Concepts de base M R


q Concepts de base de modèle relationnel

v Domaine : c’est un ensemble (fini ou infini)de valeurs atomiques (indivisibles)


caractérisées par un nom.

Exemple :
D1= {chaîne de caractères}
D2= {lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche}

v Attribut : est une variable prenant ses valeurs dans un domaine.

Exemple :
Domaine (Nom)= {chaîne de caractères}
Domaine (jour)= {lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche}

22
17/03/2020

Le Modèle Relationnel : Concepts de base M R


q Concepts de base de modèle relationnel

v Relation : Une relation n-aire sur les attributs A1, A2,..., An, de domaines
respectifs D1, D2,..., Dn, est un sous-ensemble du produit cartésien des domaines
D1, D2,..., Dn.

v Représentation d’une relation : Une relation est représentée sous la forme d’une
table de deux dimensions dans laquelle les n attributs correspondent aux titres des
n colonnes.
Relation CLIENT
Exemple :
numClient nomClient adresseClient
Cl1 Ali Fes
Cl2 Mohamed Meknes
Cl3 Salah Taza

v Chaque tuple est unique. Les duplications ne sont pas autorisées. L’ordre des
tuples est indifférent.

Le Modèle Relationnel : Concepts de base M R


q Concepts de base de modèle relationnel

v Un schéma de relation précise le nom de la relation ainsi que la liste des


attributs avec leurs domaines.

R=(numClient : Entier, nomClient : chaîne, adresseClient : chaîne)


Ou
CLIENT(numClient, nomClient, adresseClient)

v Degré d’une relation : Le degré d’une relation est son nombre d’attributs
(Degre(CLIENT)=3).

v Occurrence(ou n-uplets ou tuples) est une ligne de la table qui représente la


relation.

23
17/03/2020

Le Modèle Relationnel : Concepts de base M R


q Concepts de base de modèle relationnel

v Cardinalité d’une relation : la cardinalité d’une relation est son nombre


d’occurrences.

v Clé candidate : une clé candidate d’une relation est un attribut ou groupe
d’attributs minimal qui peut identifier de façon unique chaque tuple de la relation.
Chaque relation contient au moins une clé candidate.

v La valeur d’une clé candidate est distincte pour tous les tuples de la
relation. La notion de clé candidate est essentielle dans le modèle
relationnel.

Le Modèle Relationnel : Contrainte d’intégrité


q Contraintes d’intégrité

v Contraintes d’intégrité : une contrainte d'intégrité est une règle qui définit la
cohérence d'une donnée ou d'un ensemble de données de la BDD. On distingue
les contraintes suivantes :

Ø Contraintes de domaines

Ø Contraintes de clés

ü Contrainte d'intégrité-entité (clé primaire)

ü Contrainte d'intégrité de référence (clé étrangère)

24
17/03/2020

Le Modèle Relationnel : Contrainte d’intégrité


q Contraintes d’intégrité

Ø Contraintes de domaines

v La valeur de chaque attribut dans un tuple est atomique (non divisible) et doit
respecter le format des données du domaine de l’attribut (entier, réel, date,
caractère)

Exemple :
ü CLIENT (numClient, nomClient, adresseClient, dateNaissance)

v Pour ce schéma de relation, la date de naissance du client doit être inférieure à la


date du jour.
Exemple :
ü COMMANDE (numCmd, dateCmd, dateLivr)
v Pour ce schéma de relation, la date de la livraison (dateLivr) doit être supérieure à
la date de la commande (dateCmd).

Le Modèle Relationnel : Contrainte d’intégrité


q Contraintes d’intégrité

Ø Contraintes de clés

v Chaque tuple dans une relation doit être unique et toute relation doit posséder
une clé qui identifie un tuple de façon unique.

v Une clé peut être composée d’un seul attribut ou d’une liste d’attributs qui
caractérise un tuple (n-uplet) de la relation de manière unique.

v Une relation peut avoir plusieurs clés (clés candidates).

25
17/03/2020

Le Modèle Relationnel : Contrainte d’intégrité


q Contraintes d’intégrité

Ø Contraintes de clés

Exemple :
ü CLIENT (numClient, nomClient, prénomClient, adresseClient))

ü (numClient), (nomClient, prénomClient) sont des clés.

ü (numClient) est une clé primaire.

ü (nomClient, prénomClient) est une clé candidate. Par contre (nomClient)

n’est pas une clé à elle seule.

v Remarque : si on choisit pour clé (nomClient, prénomClient), la modélisation ne


permet pas des homonymes habitant la même ville.

Le Modèle Relationnel : Contrainte d’intégrité


q Contraintes d’intégrité

Ø Contrainte d'intégrité-entité (clé primaire)


v Une clé comportant un minimum d’attributs sera choisie comme étant clé
primaire, les autres clés possibles sont appelées clés candidates.

v Par convention, la clé primaire d’une relation est soulignée dans un schéma de
relation et stipulent qu'aucune clé primaire ne doit être nulle.

Ø Contrainte d'intégrité de référence (clé étrangère)

v Une clé étrangère est un ensemble d’une ou de plusieurs colonnes d’une table qui
fait référence à une clé primaire d’une autre table.
v Toutes les valeurs des clés étrangères apparaissent dans une autre relation comme
valeurs d’une clé primaire . C’est une contrainte d’intégrité référentielle.

v Par convention, la clé étrangère d’une relation est précédée (ou suivie) par le
symbole # dans un schéma de relation.

26
17/03/2020

Le Modèle Relationnel : Schéma de BDD rela.onnelle


q Schéma de base de données relationnelle

v Une base de données relationnelle est une collection de relations. L’ensemble des
schémas des relations de la collection est appelé schéma relationnel de la BDD.

v Par convention, un schéma de base de données relationnelle B est un ensemble de


schémas de relations R1, R2,..., Rp.

Le Modèle Relationnel : Passage du modèle E/A au modèle relationnel


q Passage du modèle E/A au modèle relationnel

v Une fois le schéma Entité/Association est établi, il est nécessaire de le

traduire en modèle relationnel afin de créer la base de données sur

ordinateur (sous forme de tables, relations, etc.). Dans cette section,

nous allons présenter les règles qui permettent de transformer un

schéma E/A en un modèle relationnel.

27
17/03/2020

Le Modèle Relationnel : Passage du modèle E/A au modèle rela1onnel


q Passage du modèle E/A au modèle relationnel

v Règle 1 : Chaque entité qui figure dans le diagramme E/A est traduite par une

relation de même nom dans laquelle ses attributs traduisent les propriétés de

l'entité, et la clé primaire traduit l'identifiant de l'entité.

Le Modèle Relationnel : Passage du modèle E/A au modèle relationnel


q Passage du modèle E/A au modèle relationnel

v Règle 2 : Toute associations de type binaire *, 1 - *, n (* peut être 0 ou 1) va

disparaître et on duplique l’identifiant de l’entité côté (*, n) dans celle (*, 1). Ce

dernier sera pris comme clé étrangère.

SERVICE(codeService, nomService, responsable) Clé étrangère

EMPLOYE(numMatricule, nom, prénom, dateEmbauche, qualification, #cdeService)

28
17/03/2020

Le Modèle Relationnel : Passage du modèle E/A au modèle relationnel


q Passage du modèle E/A au modèle relationnel

v Règle 3.1 : Toute association binaire de type [*, n : *, n], devient une relation
(table) ayant comme clé le couple composé par les deux relations issue des entités.
v Les éventuelles propriétés dans l'association deviennent des simples attributs
dans cette nouvelle relation.

CLIENT(numClient, nomClient, adresseClient)

PRODUIT(numProduit, désignationProduit,prixUnitaire)

COMMANDE(#numClient,#numProduit, quantité)

Le Modèle Relationnel : Passage du modèle E/A au modèle rela1onnel


q Passage du modèle E/A au modèle relationnel

v Règle 3.2 : Dans une association à trois participants ou plus, l’association devient
une relation ayant comme clé le composé des clés de toutes les relations(tables)
issues des entités participantes à cette association.
v Les éventuelles propriétés dans l'association deviennent des simples attributs
dans cette nouvelle relation.

MAISON(numMaison, dateConstruction, surface)

ENTREPRISE(numEntreprise, nom, adresse)

TYPE_TRAVAUX(numTypeTravaux, désignation)

REALISER(#numMaisonnum, #numEntreprise, #numTypeTravaux, date, montant)

29
17/03/2020

Le Modèle Relationnel : Passage du modèle E/A au modèle relationnel


q Passage du modèle E/A au modèle relationnel

v Règle 4 : Traduction de la généralisation/spécialisation


La traduction du lien « est un » peut se faire selon plusieurs règles. Dans ce qui
suit, nous considérerons une entité mère R avec n entités filles S1, S2, ….Sn. La
traduction d’un lien « est un » se fait selon l’une des trois règles suivantes :

Ø Règle 4.1 : Représenta8on de l’en8té mère et de ses en8tés filles

L’entité mère sera transformée en une nouvelle relation avec ses attributs.
Chaque entité fille Si sera transformée en une relation comportant comme clé
primaire l’identifiant de l’entité mère et comme attributs les attributs de Si.

Le Modèle Relationnel : Passage du modèle E/A au modèle rela1onnel


q Passage du modèle E/A au modèle relationnel
Exemple :

EMPLOYE(id, nom, prénom, fonction)

SECRTAIRE(id#, vitesseFrappe)
INGENIEUR(id#, spécialité)
TECHNICIEN(id#, grade)
Contraintes de clefs étrangères :
SECRETAIRE.id ⊆ EMPLOYE.id
TECHNICIEN.id ⊆ EMPLOYE . id
INGENIEUR.id ⊆ EMPLOYE.id

30
17/03/2020

Le Modèle Relationnel : Passage du modèle E/A au modèle rela1onnel


q Passage du modèle E/A au modèle relationnel

Ø Règle 4.2 : Pas de représentation de l’entité mère

Chaque entité fille Si sera transformée en une relation comportant comme clé
primaire l’identifiant de l’entité mère et comme attributs les attributs de Si et les
attributs de l’entité mère. Cette règle pose un problème lorsque les sous-entités
ne sont pas disjointes.

Dans ce cas, il peut y avoir duplication de certaines données. Certains problèmes


d'incohérence peuvent alors avoir lieu.

Le Modèle Relationnel : Passage du modèle E/A au modèle rela1onnel


q Passage du modèle E/A au modèle relationnel
Exemple :

VOITURE(immat#, carteGrise, prix, nbrePlace, vitesseMax)

CAMION(immat#, carteGrise, prix, tonnage, nbreEssieux)

31
17/03/2020

Le Modèle Relationnel : Passage du modèle E/A au modèle rela1onnel


q Passage du modèle E/A au modèle relationnel

Ø Règle 4.3 : Fusion des en1tés filles et de l’en1té mère

L’entité mère et ses entités filles seront transformées toutes en une seule relation

ayant comme clé primaire l’identifiant de l’entité mère et comme attributs les

attributs de toutes les entités (mère et filles).

Le problème posé par cette règle est que certains attributs risquent d'avoir une

valeur nulle.

Le Modèle Relationnel : Passage du modèle E/A au modèle relationnel


q Passage du modèle E/A au modèle relationnel
Exemple :

EMPLOYE(id, nom, prénom, fonction, vitesseFrappe, grade, spécialité)

32
17/03/2020

Le Modèle Relationnel : Passage du modèle E/A au modèle rela1onnel


q Passage du modèle E/A au modèle relationnel

v Règle 5 : Traduc.on de l’associa.on réflexives


Les associations réflexives sont des associations binaires (un-à-un, un-à-
plusieurs, plusieurs-à̀ plusieurs) ou n-aires. Les transformations sont analogues
Support de Cours : Base de données TI2 ISET Sidi Bouzid
aux associations non réflexives.
Exemple :
Ø Un-à-plusieurs Pilote
Brevet 0,1
Nom
Fonction
compagnie

1,N
chefPilote

Support de Cours : Base de données TI2 ISET Sidi Bouzid

R1 et R2 Pilote (Brevet, nom, fonction, compagnie, #chef)


Exemple :
Pilote
PILOTE (Brevet, nom, fonction,
Figurecompagnie,
Brevet
3.23 : a a#BrevetChef)
d 0,1
a ca réflexive un à plusieurs
Nom
III.3.2. Plusieurs-à-plusieurs
Fonction
Le e R1 ecompagnie
R3 a e a ca e e plusieurs-à-plusieurs de
exemple suivant (modélisation de la distance entre deux aéroports).
Exemple : 1,N
chefPilote
Aeroport

Le Modèle Relationnel
codeAer
nomAer
: Passage
1,N
du modèle E/A au modèle rela1onnel
R1 et R2 Pilote (Brevet, nom, fonction, compagnie, #chef)
ville
q Passage du modèle E/A au modèle relationnel

v Règle 5 : Traduc.on de l’associa.on


Figure 3.23 : réflexives
a a d a ca réflexive un à plusieurs
1,N
Distance
Les associations réflexives sont des associations
III.3.2. Plusieurs-à-plusieurs nautique binaires (un-à-un, un-à-
plusieurs, plusieurs-à̀Leplusieurs)
e R1 e ou
R3 n-aires.
a Les
e transformations
a ca e sont analogues
e plusieurs-à-plusieurs de
exemple Aeroport (codeAer, nomAer,entre
ville)deux aéroports).
aux associations non R1 etsuivant
réflexives.
R3 (modélisation de la distance
Distance (#codeAer1, #codeAer2, nautique)
Exemple :
Ø plusieurs-à-plusieurs
Figure 3.24 : a a d a ca réflexive plusieurs à plusieurs
Aeroport
codeAer 1,N
nomAer
Enseignante : Natija BOUZIDI 34
ville

1,N
Distance
nautique

AEROPORT (codeAer, nomAer, ville)


Aeroport (codeAer, nomAer, ville)
DISTANCE (#codeAer1, #codeAer2,
R1 et R3 nautique)
Distance (#codeAer1, #codeAer2, nautique)

Figure 3.24 : a a d a ca réflexive plusieurs à plusieurs

Enseignante : Natija BOUZIDI 34

33
17/03/2020

Le Modèle Relationnel : Passage du modèle E/A au modèle relationnel


q Passage du modèle E/A au modèle relationnel
Remarques:

Ø association binaire (0,1)-(1,1)

v L ’identifiant de l’entité côté cardinalités (0,1) est dupliquée dans celle de côté

cardinalités (1,1) où il devient clé étrangère.

Ø association binaire (0,1)-(0,1)

v L’identifiant de l’une des entités est dupliquée dans l’autre entité où elle devient

clé étrangère (externe) qui peut être une valeur nulle.

Le Modèle Relationnel : Passage du modèle E/A au modèle rela1onnel


q Passage du modèle E/A au modèle relationnel
Exemple 1: relationnel
Modèle relationnel pour une école
TD 3
Modèle pour une école

a
enseigne 0...n 0...n lieu
Professeur Cours
N° Salle Horaire
Nb heures
0...n
Nom Prénom
ID
ID 0...n
0...n Assiste
Nb Salle
heures a

0...n
0...n
0...n
Matière 0...n prend 0...n Etudiant Nom
Capacité

Numéro
ID
Nom ID Nom
Niveau

Prénom
Nb
matières

34
et textuel). Quelles sont les clés primaires et les clés étrangères ?
4. Ajouter dans le schéma relationnel les types de données possibles, en supposant
que : 17/03/2020
a. le code d un m dicament est de la forme ABC1234 (3 lettres et 4 chiffres)
b. le matricule d un m decin est de la forme 12345 (5 chiffres)
c. le num ro de s curit sociale est de la forme 12345678901234-56 , (13 + 2 chiffres)
d. le num ro d une consultation est un entier (incr ment chaque nou elle
consultation)
5. Donner un exemple de base de données qui suit le schéma relationnel précédent
LeetModèle Relationnel
qui illustre les questions 2.a, 2.b et 2.c. : Passage du modèle E/A au modèle rela1onnel

q Passage
Exercicedu
3 : modèle E/A au modèle relationnel
Exemple 2:
Soit le modèle entités/associations

Que permet de gérer le modèle précédent ?


L'entreprise n'a-t-elle qu'un seul taux de TVA ?
Les camionneurs conduisent-ils toujours le même camion ?
Que faudrait-il modifier dans ce modèle pour qu'un camion ne soit attaché qu'à un seul
camionneur ?
Les camionneurs touchent une commission de 2% sur les produits vendus au camion.
Le modèle présenté permet-il de calculer cette commission.
Que faut-il modifier dans le modèle L i cpour
e nconserver
ce G un é n i e mensuel
historique l o gdesi c iel
commissions des camionneurs sur les 5 dernières années ?
Quel est4le: modèle
Chapitre relationnel associé
Dépendances au modèle deetdonnées
fonctionnelles présenté ?
normalisation

Introduction

Dépendance fonctionnelle

Définition

Propriétés des DFs

DF élémentaire

DF transitive

Formes normales

35
17/03/2020

Dépendances fonctionnelles et normalisation


q Introduction

v Le but des dépendances fonctionnelles et de la théorie de la normalisation est de

s'assurer que le schéma relationnel défini pour une base de données est correctement

construit.

v Un mauvais schéma relationnel peut en effet entrainer des anomalies lors des

manipulations.

Dépendances fonctionnelles et normalisation


q Introduction
v Considérons la relation LivraisonTot suivante :
LivraisonTot (numFou , adrFou , numProd , typeProd , quantité )
numFou adrFour numProd typeProd quantité
3 Meknes 52 meuble 12
22 Tanger 10 ordinateur 6
22 Tanger 25 papier 210
3 Meknes 25 papier 560
3 Asila 10 ordinateur 15
v Le fournisseur numFou, qui est actuellement à telle adresse adrFou, a livré au total telle
quantité du produit numProd et de tel type typeProd.
ü Si un fournisseur change d’adresse et qu’un seul tuple est mis à jour è incohérence

ü Si un nouveau tuple est inséré pour un fournisseur connu, avec une adresse différente
è incohérence
ü Impossibilité d'enregistrer un nouveau fournisseur sans livraison (ou des valeurs
nulles).

36
17/03/2020

Dépendances fonctionnelles et normalisation


q Introduction
v Cette relation présente certaines anomalies :
ü Anomalie de redondance : les informations concernant les fournisseurs sont
redondantes.
ü Anomalie de mise à jour : S'il faut mettre à jour l'adresse du fournisseur « 3 », il faut
absolument vérifier que toutes les adresses de « 3 » sont mises à jour.
ü Insertion et suppression : l’insertion, la suppression ou le transfert d’attributs pourra
faire apparaître des valeurs nulles
v Cette solution n'est pas raisonnable. La base de données va très rapidement devenir
incohérente.
v La solution est d'éviter toute redondance dans la base de données. Ceci exige que le
schéma de la base de données soit bien construit. La méthode pour cela se décompose en
deux étapes :

• Etude des dépendances entre données ;


• Décomposition et normalisation des relations.

Dépendances fonctionnelles (DF) : Définitions


q Définitions
v Les dépendances fonctionnelles expriment la relation qui existe entre les attributs (les
propriétés).

v Soit r une relation de schéma R = (X, Y, Z) où X, Y et Z sont des ensembles d'attributs.

v On dit qu’il existe une DF entre l’ensemble d’attribut X et l’ensemble d’attribut Y, si la


connaissance des valeurs des attributs de X détermine de manière unique la
connaissance des valeurs des attributs de l’ensemble Y.

v On note une telle dépendance fonctionnelle : X→Y.


v X détermine Y .
v ou Y dépend fonctionnellement de X.

37
17/03/2020

Dépendances fonctionnelles (DF) : Définitions


q Définitions
Exemple :
v Soit les deux attributs suivants :
ü Numéro d’immatriculation
ü La marque du véhicule
v Est qu’il y a une dépendance fonctionnelle entre les deux attributs ?

Numéro d’immatriculation La marque du véhicule

v PRODUIT (refProduit, libelleProduit, prixU, quantité, numService, adresse, capacité)

Pour cette relation, les dépendances fonctionnelles suivantes sont vérifiées :

refProduit → libelleProduit numService → adresse, capacité

refProduit → prixU refProduit, numService → quantité

v Les dépendances fonctionnelles sont une technique qui permet de vérifier la validité
d’un modèle entité association (MCD).

Dépendances fonctionnelles (DF) : Définitions


q Définitions

Ø Dépendance fonctionnelle élémentaire

v Soit r une relation de schéma R = (X, Y, Z) où X, Y et Z sont des ensembles d'attributs.

v Une dépendance fonctionnelle X → Y est élémentaire si pour tout Z ⊂ X la dépendance


fonctionnelle Z → Y n’est pas vraie.
v En d’autres termes, Y ne dépend pas fonctionnellement d’une partie de X (X est la plus
petite quantité d’information donnant Y).
Exemple :

v Soit R = (A, B, C) avec . A →C ou A,B →C, la DF (A, B) →C est élémentaire ?

N’est pas élémentaire car on a : A →C

v Soit R = (A, B, C) avec . A →C ; B →C; A →D. la DF A →D est élémentaire ?

Est élémentaire

38
17/03/2020

Dépendances fonctionnelles (DF) : Définitions


q Définitions

Ø Dépendance fonctionnelle directe

v Soit r une relation de schéma R = (X, Y, Z) où X, Y et Z sont des ensembles d'attributs.

v On dit que la DF X →Y est directe s'il n'existe pas un attribut A de R tel que X → A et
A→Y soient des DF, c-à-d qu'il ne faut pas qu'il y ait de DF transitive.

Exemple :

v Soit R = (A, B, C) où A, B et C sont des ensembles d'attributs.

on a la DF A →C est directe

s’il n’existe pas un attribut B tel que : A →B et B →C,

Dépendances fonctionnelles (DF) : Propriétés


q Propriétés des dépendances fonctionnelles

Ø Les trois premières propriétés sont connues sous le nom « Axiomes d’Armstrong ».

v Propriété 1 : Réflexivité

Y⊆X ⇒ X → Y ou X → X
Tout ensemble d’attributs détermine lui-même ou une partie de lui-même.

v Propriété 2 : Augmentation

X → Y ⇒ X, Z → Y, Z pour tout Z inclus dans R.


Si X détermine Y, les deux ensembles d’attributs peuvent être enrichis par un même
troisième.

v Propriété 3 : Transitivité

X → Y et Y → Z ⇒ X → Z.

39
17/03/2020

Dépendances fonctionnelles (DF) : Propriétés


q Propriétés des dépendances fonctionnelles

v Propriété 4 : Union (addition)

X → Y et X → Z ⇒ X → Y, Z

v Propriété 5 : Pseudo transitivité

X → Y et W, Y → Z ⇒ W, X → Z

v Propriété 6 : Décomposition

X → Y et Z ⊆ Y ⇒ X → Z si Z est inclus dans Y.

En réalité, les propriétés 1, 2 et 3 sont suffisantes. Les autres (4, 5, 6) s'en


déduisent.

Dépendances fonctionnelles (DF) : Propriétés


q Propriétés des dépendances fonctionnelles

v Exemple

Soit R (A, B, C, D, E, G, H) et

F= {A,B → C ; B → D ; C,D → E ; G → A ; D → H}

En utilisant les axiomes d’armstrong, montrer que l’on peut déduire les ensembles

suivants:

1. B → H

2. B,G → C

3. A,B → E

40
17/03/2020

Dépendances fonctionnelles (DF) : DF transitive


q Dépendance fonctionnelle transitive

v Soient X, Y deux attributs. X→Y est une dépendance fonctionnelle transitive s’il existe

un attribut Z tel que X→Z et Z→Y .

Transi)vité
cv

X Y

Dépendances fonctionnelles (DF) : Propriétés


q Graphe des dépendances fonctionnelles

v Le graphe des DF permettant de mieux représenter les liens.

v Les nœud du graphes sont les attributs de la relation


v Les arcs du graphes sont les DF

Exemple :
COMMANDE (numCmd , dateCmd , numClient , codeArticle , prixU,quantité )

numCmd → dateCmd
numCmd codeAr/cle
numCmd → numClient

codeArticle → prixU dateCmd numClient prixU

numCmd, codeArticle → quantité

quan/té

41
17/03/2020

Dépendances fonctionnelles (DF) : Propriétés


q Clé d’une relation

v La clé d’une relation est l’ensemble d’attributs dont les valeurs permettent de
caractériser les n-uplets de la relation de manière unique.

v Formellement :

ü Un attribut ou une liste d’attributs X est une clé pour la relation R(X,Y,Z) si

ü Y et Z dépendent fonctionnellement de X dans R : X→ Y, Z.

ü et X → Y, Z est élémentaire.

Dépendances fonctionnelles (DF) : Fermeture transitive


q Fermeture transitive

v La fermeture transitive d'un ensemble de dépendances fonctionnelles est ce même


ensemble enrichi de toutes les dépendances fonctionnelles qu’on peut dériver en
appliquant itérativement les règles d’Armstrong.

v La fermeture transitive d’un ensemble d’attributs X est notée X+.

v Deux ensembles de DF F1 et F2 sont dits équivalents si seulement si ils ont même

fermeture i.e. F1+ = F2+

v Comment calculer la fermeture transitive?

•Règles d’Armstrong → Calcul fastidieux

42
17/03/2020

Dépendances fonctionnelles (DF) : Fermeture transitive


q Fermeture transitive
Exemple : Considérons le schéma relationnel R défini sur les attributs suivants :
-C: cours -P: professeur -H: heure -S: salle -E: étudiant -N: note
un n-uplet(C, P, H, S, E, N)a pour signification :
le cours C est fait par le professeur P à l’heure H dans la salle S et suivi par l’étudiant E
qui a reçu la note N dans ce cours.
L’ ensemble F des dépendances fonctionnelles formulées initialement est le suivant :
v C→P: on sait retrouver le professeur qui enseigne dans un cours
v (H,S)→C: on sait à quelle heure et dans quelle salle on peut suivre un cours

v (H,P)→S: si on connait le professeur et l’horaire on peut trouver la salle où il


enseigne
v (C,E)→N: on sait quelle est la note de l’étudiant dans un cours
v (H,E)→S: si on connait l’emploi du temps d’un étudiant on sait trouver la salle où il
doit être
Donner l’ensemble des dépendances fonctionnelles élémentaires (DFE) engendrées
par E en appliquant les règles d’inférences.

Dépendances fonctionnelles (DF) : Fermeture transitive


q Fermeture transitive
- Pseudo-transitivité : C→P, (H,P)→S
v (H,C)→S: si on connait l’horaire et le cours on sait trouver la salle

-Transitivité : (H,S)→C, C→P


v (H,S)→P : on sait retrouver un professeur si on connait l’horaire et la salle
- Pseudo-transitivité : (H,P)→S, (H,S)→C
v (H,P)→C : on sait quel est le cours enseigné si on connait le professeur et l’heure à
laquelle il enseigne
- Pseudo-transitivité : (H,E)→S, (H,S)→C
v (H,E)→C : connaissant l’heure et l’étudiant on saura quel est le cours enseigné
- Transitivité : (H,E)→C, C→P
v (H,E)→P : connaissant l’heure et l’étudiant on saura quel est le professeur qui
enseigne
- Pseudo-transitivité : (H,E)→C, (C,E)→N
v (H,E)→N : connaissant l’horaire et l’étudiant on connait sa note.

43
17/03/2020

Dépendances fonctionnelles (DF) : Fermeture transitive


q Fermeture transitive

En résumé on a les DFE suivantes (on peut toujours utiliser l’axiome de décomposition

pour ne faire apparaître qu’un seul attribut cible) :

v C→PC

v (H,C)→S

v (H,S)→(C,P)

v (H,P)→(S,C)

v (C,E)→N

v (H,E)→(S,C,P,N)

Dépendances fonctionnelles (DF) : Fermeture transitive


q Calcul de la Fermeture transitive
Données : F un ensemble de DF et X un ensemble d’attributs

Résultat : X+ fermeture transitive de X

Algorithme :

1. Initialiser (X)+ à X,

2. Trouver une DF(G→D)∈ F possédant en partie gauche des attributs inclus dans (X)+,

3. Ajouter dans (X)+ les attributs placés en partie droite de la DF

4. Répéter les étapes 2) et 3) jusqu’à ce que (X)+ n’évolue plus.

44
17/03/2020

Dépendances fonctionnelles (DF) : Fermeture transitive


q Fermeture transitive

Exemple :
Soit F={A → D ; A,B → E ; B,I → E ; C,D → I; E → C}

Calculer la fermeture sous F de AE

1. (AE)+= AE

2. A → D permet d’ajouter D : donc (AE)+= AED

a) E → C permet d’ajouter C: (AE)+= AEDC

b) CD → I permet d’ajouter I:(AE)+= AEDCI

3. Fin

Donc la fermeture transitive de AE: (AE)+= AEDCI

Dépendances fonctionnelles (DF) : Fermeture transitive


q Fermeture transitive
Exemple 2:

Soit la relation R(A, B, C, D, E, F) et l’ensemble des dépendances fonctionnelle suivant :

DF={A → B,C ; E→ C,F ; B → E ; C,D → E,F}

Calculer la fermeture transitive de {AB }

Exemple 3:

Soit la relation R(A, B, C, D, E, F, G) et l’ensemble des dépendances fonctionnelle suivant

: DF={A,C → B ; B,C→ D,E ; B → E ; A, E, F→ G}

Calculer la fermeture transitive de {AC }

45
17/03/2020

Dépendances fonctionnelles (DF) : Couverture minimale

q Couverture minimale

v Couverture minimale d’un ensemble de DF est un sous ensemble minimum de


dépendances fonctionnelles élémentaires (DFE) qui permettent de générer toutes les
autres.

v Tout ensemble de dépendances fonctionnelles possède une couverture minimale (pas


forcement unique) composée de dépendances fonctionnelles dont les parties droites
contiennent 1 seul attribut.

v Notion très importante pour la décomposition des relations.

Dépendances fonctionnelles (DF) : Couverture minimale

q Algorithme de calcul de couverture minimale (sans passer par les axiomes


d’armstrong)
Soit F un ensemble de DF associé à R

G est la couverture minimale


1. Décomposer chaque DF de F pour avoir un seul attribut à droite (règle de
décomposition)

2.Supprimer les DF redondantes : Une DF peut être supprimée de F s’il en résulte une
transformation de F en G telle que G+=F+ par rapport à R avec G=F-{DF}

3.Supprimer les attributs en surnombre à gauche appartenant à F :


• la partie gauche (déterminant D) doit être élémentaire.
• Aucun attribut ne peut être éliminé de D s’il en résulte une transformation de F
en G telle que G+ ≠ F+.
• Inversement, si l’élimination d’un attribut de D (voir plusieurs) donne lieu à une
transformation de F en G telle que G+ = F+ alors la DF peut être supprimée

46
17/03/2020

Dépendances fonctionnelles (DF) : Couverture minimale

q Algorithme de calcul de couverture minimale (sans passer par les axiomes


d’armstrong)

Exemple :

Considérons l'ensemble F suivant :

A → B; B,C → D; A,C → B,D,E; D→ E

Donner une couverture minimale de F

Formes normales (FN)


q Définition
v La normalisation est un processus qui consiste de décomposer une table universelle
(composée de la totalité des attributs), en plusieurs tables sans perte d’informations en
utilisant la notion de dépendance fonctionnelle et un algorithme de normalisation.

v Le processus de normalisation est présenté par le schéma suivant :

attribut 1, attribut 2 Les dépendances


attribut 3 … attribut n fonctionnelles

Algorithme de
Recomposition par jointure normalisation

Tables décomposée

47
17/03/2020

Formes normales (FN)


q Définition

v Dans ce cours nous présenterons :

Ø Première Forme Normale (1FN)

Ø Deuxième Forme Normale (2FN)

Ø Troisième Forme Normale (3FN)

Ø Forme Normale de Boyce-Codd(FNBC)

Formes normales (FN)


q Première forme normale (1FN)
v Une relation R est en première forme normale et notée 1FN si chaque attribut de R a un
domaine simple, c’est à dire dont les valeurs sont atomiques et monovaluées.
v Cette définition permet d’exclure les relations ayant des attributs dont les valeurs
seraient des ensembles ou des listes de valeurs.

Exemple : Prenons, par exemple, le schéma de relation suivant :

• PERSONNE(idPersonne, nomPersonne, prénomPersonne, adresse, voitures)

Est-ce que cette relation est en elle première forme normale ?


v Ce schéma de relation n’est pas 1FN, car l’attribut adresse est composite et l’attribut
voitures est multiple. Il faut le décomposer en :
• PERSONNE(idPersonne, nomPersonne, prénomPersonne, rue, codePostal,
ville)
• VOITURE(idVoiture, modèle, marque, #idPersonne) où idPersonne est une
clé étrangère qui fait référence au schéma relation PERSONNE

48
17/03/2020

Formes normales (FN)


q Deuxième forme normale (2FN)
v Une relation est en deuxième forme normale si, et seulement si :

• elle est en 1FN ;


• Toute attribut n’appartenant pas à la clé primaire est en dépendance
fonctionnelle total avec la clé primaire (élémentaires).
• elle ne concerne que les tables à clé primaire composé (composée de plusieurs
attributs) ;

v Une relation peut être en deuxième forme normale par rapport à une de ses clés
candidates et ne pas l’être par rapport à une autre.

v Une relation avec une clé primaire réduite à un seul attribut, ou contenant tous les
attributs, est forcément en deuxième forme normale.

Formes normales (FN)


q Deuxième forme normale (2FN)

Exemple : Soit, par exemple, le schéma de relation suivant :


• ARTICLE_COMMANDE(numCommande,numArticle,désignation,
quantitéCommandée)
Est-ce que cette relation est en elle deuxième forme normale ?
v Cette relation n’est pas en 2FN car, par exemple, désignation ne dépend que de
numArticle.
v Pour normaliser cette relation, il faut suivre le processus suivant :
Ø Regrouper dans une relation les attributs dépendant de la totalité de la clé et
conserver cette clé pour cette relation.
• LIGNE_COMMANDE(numCommande, numArticle, quantitéCommandée)
Ø Regrouper dans une autre relation les attributs dépendant d’une partie de la clé,
et faire cette partie la clé primaire de cette nouvelle relation.
• ARTICLE( numArticle, désignation)
v ou numArticle est la clé étrangère qui fait référence à la relation
LIGNE_COMMANDE.

49
17/03/2020

Formes normales (FN)


q Troisième forme normale (3FN)
v Une relation est en troisième forme normale si, et seulement si :
• elle est en 2FN ;
• et que tout attribut n’appartenant pas à une clé ne dépendra pas d’un attribut
non clé (R ne contient aucune dépendance fonctionnelle transitive).

Exemple : Soit, par exemple, le schéma de relation suivant :


• COMMANDE(numCommande, dateCommande, numClient, nomClient)
Est-ce que cette relation est en elle deuxième forme normale ?
D’abord, Est-ce que cette relation est en elle deuxième forme normale ?
Est-ce que cette relation est en elle première forme normale ?
Ø 1FN→ Oui, la relation est en première forme normale par ce que tous les attributs
ont des valeurs atomique.
Ø 2FN → Oui, la relation est en deuxième forme normale par ce que tous les
attributs dépendent totalement de la clé.

Formes normales (FN)


q Troisième forme normale (3FN)

Ø 3FN → Non, cette relation à une dépendance fonctionnelle transitive


(numCommande→ dateCommande,
numCommande→ numClient et
numClient → nomClient) .
v Pour normaliser cette relation, il faut suivre le processus suivant :

Ø Regrouper dans la relation initiale les attributs dépendant de la clé.

• COMMANDE(numCommande, dateCommande, numClient)

Ø Regrouper dans une autre relation les attributs dépendant transitivement de la


clé ; l’attribut de transition reste dupliqué dans la table initiale, et devient la clé
primaire de la nouvelle relation.

• CLIENT(numClient, nomClient)

50
forme normale ssi :
attribut contient une valeur atomique (unique) 1. elle est en 1ère forme
2. tout attribut non clé ne
dépend pas d'une partie
17/03/2020
PERSONNE NOM PROFESSION
de clé
DUPONT Ingénieur, Professeur

MARTIN Géomètre
R C1 C2 X Y

Une telle relation doit être décomposée en

Formes normales (FN) R1(C1,C2,X) et R2(C2,Y)

q Forme normale de BOYCE-CODD

v La forme normale de BOYCE-CODD traite un cas peu différent de ceux de la deuxième


et troisième forme normale :

Forme normale
v Il s’agit du cas où une partie d’une cléForme
dépendNormale
d’un attribut nom clé.

• Forme Normale de Boyce Codd


• 3ème Forme normale v Une table est en forme normale de BOYCE-CODD si tous attribut appartenant à une
une relation est en BCNF (Boyce-Codd Normal Form)
une relation est en 3e forme normale ssi : ssi : non clé.
clé ne dépend pas à un autre attribut
1. elle est en 2e forme • les seules dépendances fonctionnelles sont du type clé
détermine attribut non clé
Exemple
2. tout attribut n'appartenant pas :a Soit,
une clépar
ne exemple, le schéma de relation suivant :
dépend pas d'un autre attribut non clé

R C1 C2 X Y
R C X Y Z

v La relation R peut être décomposée Une


en telle
: relation peut être décomposée en
Une telle relation doit être décomposée en
R1(C1, Y, X) et R2(Y, C2)
R1(C, X, Y) et R2(X, Z)
v R1(C1, Y, X) et R2(Y, C2)

1
Formes normales (FN)
q Forme normale de BOYCE-CODD
Exemple : Soit, par exemple, le schéma de relation suivant :

Personne(N°SS, Pays, Nom, Région)


Cette relation présente les DF suivantes :
N°SS,Pays→Nom
N°SS,Pays→Région
Région→Pays Est-ce que cette relation est en elle BC forme normale ?
v Elle est en 3FN (car elle est en deuxième forme normale, et tout attribut n’appartenant
pas à une clé ne dépendra pas d’un attribut non clé).
v Cette relation n’est pas en BCNF car l’attribut ‘’Pays’’ (qui fait partie de la clé)dépend
fonctionnellement de Région(qui est un attribut non membre de la clé).

v Pour avoir un schéma relationnel en BCNF, il faut décomposer Personne :

Personne(N°SS, #Region, Nom)


Region(Region, Pays)

51
17/03/2020

Licence Génie logiciel

Chapitre 5 : Algèbre relationnelle


Introduction
Opérateurs relationnels
L ’opérateur de sélection (SELECT) !
L’operateur de projection #(%&'()*+)
L’opérateur de renommage "
Les opérateurs ensemblistes
Union ∪
Intersection ∩
Différence —
Division ÷
Produit cartésien ×
Jointures

Algèbre relationnel (AR)


v Soit le schéma de BD suivant :

• ETUDIANT(idEtudiant, nomEtudiant, age)

• MATIERE(idMatiere, nomMatiere, nbrEtudiants)

• NOTE(idEtudiant, idMatiere, note)

Ø idEtudiant et idMatiere sont des clés étrangères qui référencent


ETUDIANT(idEtudiant) et MATIERE (idMatiere)

idEtudiant nomEtudiant age idMatière nomMatière nbr


1 Alaoui 20 1 Maths 20
2 Slaoui 17 2 Programmation 12

idEtudiant idMatière note


1 1 13
1 2 19
v Le nom d’une relation retourne la relation avec ses lignes.

52
17/03/2020

Algèbre relationnel (AR)


q L ’opérateur de sélection (SELECT) 2

v Retourne certaines lignes d’une relation qui satisfont une condition :

• !(#$%&'('$%) *+,-./01
Exemple : L’étudiant avec l’identifiant 1

• !('&3(4&'5%(67) 8.9:/-1.
idEtudiant nomEtudiant age
1 Alaoui 20
2 Slaoui 17

Exemple : Les étudiants qui ont un âge > 19


• !(5;<=7>) 8.9:/-1.
idEtudiant nomEtudiant age
1 Alaoui 20
2 Slaoui 17

Algèbre relationnel (AR)


q L ’opérateur de sélection (SELECT) !
Exemple : L’ étudiant qui a un âge < 19 et l’identifiant =2
• "($%&'(%$)*'+, ∧ )/0123) 56789:;6
idEtudiant nomEtudiant age
1 Alaoui 20
2 Slaoui 17

Exemple : Les étudiants qui ont un âge > 15

• "()/0<2=) 56789:;6
idEtudiant nomEtudiant age
1 Alaoui 20
2 Slaoui 17

Exemple : La matière qui a plus de 15 étudiants


idMatière nomMatière nbr
• "(*>?<2=) @:69èBC
1 Maths 20
2 Programmation 12

53
17/03/2020

Algèbre relationnel (AR)


q Exercice

Ecrire ces requêtes avec l’opérateur ! (SELECT):

1. Les employés avec l’identifiant < 900


2. Les employés qui ont un salaire > 10000
3. Les évaluations de Janvier
4. Les évaluations de Janvier qui sont > 4
Employe Evaluation
numEmp nomEmp salaire numEmp eval dateEval
860 Alaoui 20000 860 5 13/01/2013
908 Slaoui 17000 908 3 19/01/2013

Algèbre relationnel (AR)


q Exercice

Ecrire ces requêtes avec l’opérateur ! SELECT:


1. Les employés avec l’identifiant < 900
• !($%&'&()*++) -./0123

2. Les employés qui ont un salaire > 10000

• !(4565789:;+++) -./0123

3. Les évaluations de Janvier

• !(<5=9'>56?+;/+;/A+;B*∧<5=9'>56DB;/+;/A+;B*) -EF0GFHI1J

4. Les évaluations de Janvier qui sont > 4

• !(<5=9'>56?+;/+;/A+;B*∧<5=9'>56DB;/+;/A+;B*∧9>56:K) -EF0GFHI1J

54
17/03/2020

Algèbre relationnel (AR)


q L’operateur de projection !(#$%&'())

v Retourne certaines colonnes d’une relation :

• +(,-.-//01,…,,-.-//0/) 456789:;
Exemple : Les noms des étudiants

• +(/-<=>?@AB/>) C8DE97;8
idEtudiant nomEtudiant age
1 Alaoui 20
2 Slaoui 17
Exemple : Les noms des étudiants et leurs âges
• +(/-<=>?@AB/>,BF0) C8DE97;8
idEtudiant nomEtudiant age
1 Alaoui 20
2 Slaoui 17

Algèbre relationnel (AR)


q L’operateur de projection !(#$%&'())

Exemple : Les noms des étudiants

• +(,-./012è45) 6789è:; idMatière nomMatière nbr


1 Maths 20
2 Programmation 12

Exemple : Les noms des matières et les nombres d’étudiants

• +(,-./012è45, ,>4) 6789è:;


idMatière nomMatière nbr
1 Maths 20
2 Programmation 12

55
17/03/2020

Algèbre relationnel (AR)


q Exercice

Ecrire ces requêtes avec l’opérateur ! PROJECT:

1. Les noms des employés


2. Les salaires et les noms des employés
3. Les dates d’évaluation
4. Les dates d’évaluation et les évaluations

numEmp nomEmp salaire numEmp eval dateEval


860 Alaoui 20000 860 5 13/01/2013
908 Slaoui 17000 908 3 19/01/2013

Algèbre relationnel (AR)


q Exercice

Ecrire ces requêtes avec l’opérateur ! SELECT:


1. Les noms des employés
• #(%&'(')) +,-./01

2. Les salaires et les noms des employés

• #(%&'('), 345678) +,-./01

3. Les dates d’évaluation

• #(94:8(;45) +<=.>=?@/A

4. Les dates d’évaluation et les évaluations

• #(8;45, 94:8(;45) +<=.>=?@/A

56
17/03/2020

Algèbre relationnel (AR)


q Composition de sélection ! (SELECT) et de projection *(+,-./01)

v Retourne certaines lignes sous certaines colonnes d’une relation :

•2 34546678,…,34546676 (; 346<=>=46? @ABCDEFG)


Exemple : Les noms des étudiants qui ont un âge > 19

• 2(64HI>J<=K6>) (; KL7M8N ODPQECGD)


idEtudiant nomEtudiant age
1 Alaoui 20
2 Slaoui 17
Exemple : Les noms des matières qui ont un nombre d’étudiants > 15

•2 64HRK>=èT7 (; 6UTM8V WCDEèXA)


idMatière nomMatière nbr
1 Maths 20
2 Programmation 12

Algèbre relationnel (AR)


q Composition de sélection ! (SELECT) et de projection *(+,-./01)

Exemple : L’age de Alaoui

• 2(345) (6 789:;<=>37;?"AB38<>" CDEFGHID)


idEtudiant nomEtudiant age
1 Alaoui 20
2 Slaoui 17

Exemple : Le nombre d’étudiants en Maths

•2 7JK (6 789L3;>èK5?"L3;NO" PHDGèQR)


idMatière nomMatière nbr
1 Maths 20
2 Programmation 12

57
17/03/2020

Algèbre relationnel (AR)


q Exercice
Ecrire ces requêtes avec les opérateur ! (PROJECT) et #(SELECT) :

1. Les noms des employés qui ont un salaire > 10000


2. Les identifiants des employés qui ont une évaluation > 5
3. Le salaire de « Slaoui »
4. L’évaluation de « Alaoui »

numEmp nomEmp salaire numEmp eval dateEval


860 Alaoui 20000 860 5 13/01/2013
908 Slaoui 17000 908 3 19/01/2013

Algèbre relationnel (AR)


q Exercice
Ecrire ces requêtes avec les opérateur ! (PROJECT) et #(SELECT) :

1. Les noms des employés qui ont un salaire > 10000


• $(&'() (# *+,+-./012222 3456789)
2. Les identifiants des employés qui ont une évaluation > 5

• $(&:(;(<) (# +=+,0> 3?@6A@BC7D)

3. Le salaire de « Slaoui »

• $(*+,+-./) (# &'(;(<E"G,+':-" 3456789)


4. L’évaluation de « Alaoui »

•$ /=+, (# &:(;(<EH IJKLKM N IOKLKMP"QRSOJT" ;(<,'U/


3?@6A@BC7D

58
17/03/2020

Algèbre relationnel (AR)


q L’opérateur de renommage !

v Renomme le schéma d’une relation R(A1, ..., An) en R’(A1’, ..., An’) (dans le retour de
la requête)
• "# $ %$& …….%$) *
Exemple : Renomme une relation R en R’ : "+,-./00, (<=>?@AB=)

Etudiant Personne
idEtudiant nomEtudiant age idEtudiant nomEtudiant age
1 Alaoui 20 1 Alaoui 20
2 Slaoui 17 2 Slaoui 17
Exemple : Renomme les attributs d’une relation : Les noms des étudiants qui ont un âge
> 19
• "+,-./00, 12+,-./00,,0/4+,-./00, (6(1278921:08,0/478921:08) <=>?@AB=)
idEtudiant nomEtudiant age idPersonne nomPersonne
1 Alaoui 20 1 Alaoui
2 Slaoui 17 2 Slaoui

Algèbre relationnel (AR)


q UNION
v L’union de deux relations avec des attributs identiques produit une relation qui
contient l’ensemble des éléments qui se trouvent dans les deux relations.

Exemple : Les noms des étudiants et les noms des matières:

(Comme les a5ributs doivent être iden:ques, on doit renommer les a5ributs)

• !"#$ (& "#$'()*+,"( -./0123. ∪ & "#$5,(+è78 92.1è:;)

nom
Alaoui
Slaoui
Maths
Programmation

59
17/03/2020

Algèbre relationnel (AR)


q INTERSECTION
v L’intersection de deux relations avec des attributs identiques produit une relation qui
contient les éléments qui se trouvent dans la première relation et dans la seconde
relation.

Exemple : Les identifiants des personnes qui ont une note:

idEtudiant nomEtudiant age idEtudiant idMatière note


1 Alaoui 20 1 1 13
2 Slaoui 17 1 2 19

1
• ! "#$%&#"'(% )*+,-./* ∩ ! "#1'%"è34 5.*-è67 = ∩ 1 =1
2
idEtudiant idMatière note
1 1 13
1 2 19

Algèbre relationnel (AR)


q La différence -

v La différence de deux relations avec des attributs identiques produit une relation qui
contient l’ensemble des éléments qui se trouvent dans la première relation mais ne se
trouvent pas dans la deuxième.

Exemple : Les identifiants des étudiants qui n’ont pas de notes :

idEtudiant nomEtudiant age idEtudiant idMatière note


1 Alaoui 20 1 1 13
2 Slaoui 17 1 2 19

1
• ! "#$%&#"'(% )*+,-./* − ! "#1'%"è34 5.*-è67 = − 1 =2
2
idEtudiant idMatière note
1 1 13
2 1 19

60
17/03/2020

Algèbre relationnel (AR)


q Division ÷
v La division est une opération portant sur deux relations R1 et R2, telles que le schéma
de R2 est strictement inclus dans celui de R1, qui génère une troisième relation
regroupant toutes les parties d’occurrences de la relation R1 qui sont associées à
toutes les occurrences de la relation R2; on la note R1÷R2.

v Autrement dit, la division de R1 par R2 (R1÷R2) génère une relation qui regroupe tous
les tuples qui, concaténés à chacun des tuples de R2, donne toujours un tuple de R1.

v La relation R2 ne peut pas être vide.

v Tous les attributs de R2 doivent être présents dans R1 et R1 doit posséder au moins un
attribut de plus que R2 (inclusion stricte).

v Le résultat de la division est une nouvelle relation qui a tous les attributs de R1 sans
aucun de ceux de R2.

v Si R1 est vide, la relation qui résulte de la division est vide.

Algèbre relationnel (AR)


q Division ÷

Exemple :

Enseignant
Etudiant
Enseignant Etudiant
Nom
El Koulali Hachimi
Charif
Benyasir Alaoui
Safir
Hamoumi Khaldi
Hamzaoui Charif
El Basri Idrissi
El machkouri Safir

Enseignant
Relation : Enseignant ÷ Etudiant El machkouri
Hamzaoui

61
17/03/2020

Algèbre relationnel (AR)


q Exercice

v Calculer l’union, l’intersection et la différence de A et B :

A B
A1 A2 A3 A1 A2 A3
1 2 4 1 2 4
2 3 5 4 2 2
8 8 6 4 9 5
9 9 0 9 9 0
4 5 1 2 3 5

Algèbre relationnel (AR)


q Exercice

v Calculer l’union, l’intersection et la différence de A et B :

A∪B A∩B
A1 A2 A3 A1 A2 A3
1 2 4 1 2 4
2 3 5 9 9 0
8 8 6 2 3 5
9 9 0
A-B
4 5 1
A1 A2 A3
4 2 2
8 8 6
4 9 5
4 5 1

62
17/03/2020

Algèbre relationnel (AR)


q Le produit cartésien X

v Le produit cartésien de deux relations retourne toutes les combinaisons de lignes


possibles à partir de ces deux relations.

idEtudiant nomEtudiant age idEtudiant idMatière note


1 Alaoui 20 1 1 13
2 Slaoui 17 1 2 19

idEtudiant nomEtudiant age idEtudiant idMatière note


1 Alaoui 20 1 1 13
2 Slaoui 17 1 1 13
1 Alaoui 20 1 2 19
2 Slaoui 17 1 2 19

Algèbre relationnel (AR)


q SELECT && le produit cartésien X

v Sélection de lignes à partir du produit cartésien.

Exemple : Tous les étudiants qui ont une note :

idEtudiant nomEtudiant age idEtudiant idMatière note


1 Alaoui 20 1 1 13
2 Slaoui 17 1 2 19

• ! "#$%&'(#.&%"#$%&'(#*+,#-.&%"#$%&'(# ./01234/×67/8
idEtudiant nomEtudiant age idEtudiant idMatière note
1 Alaoui 20 1 1 13
2 Slaoui 17 1 1 13
1 Alaoui 20 1 2 19
2 Slaoui 17 1 2 19

63
17/03/2020

Algèbre relationnel (AR)


q SELECT && le produit cartésien X

Exemple : Tous les étudiants qui ont une note en Maths :

idEtudiant nomEtudiant age idEtudiant idMatière note


1 Alaoui 20 1 1 13
2 Slaoui 17 1 2 19

• ! "#$%&'(#.&%"#$%&'(#*+,#-.&%"#$%&'(# ∧ &%0'#&è2-*3 456789:5×<=5>

idEtudiant nomEtudiant age idEtudiant idMatière note


1 Alaoui 20 1 1 13
2 Slaoui 17 1 1 13
1 Alaoui 20 1 2 19
2 Slaoui 17 1 2 19

Algèbre relationnel (AR)


q PROJECT, SELECT & X
Projection de colonnes de lignes sélectionnées à partir du produit cartésien
Exemple : Les noms et les notes des étudiants qui ont une note en Maths :

idEtudiant nomEtudiant age idEtudiant idMatière note


1 Alaoui 20 1 1 13
2 Slaoui 17 1 2 19

• !(#$%&'()*+#',#$'-) (/ &'()*+#'.*)&'()*+#'12$'-.*)&'()*+#' ∧ *)5+'*è7-18

9:;<=>?:×AB:C)
idEtudiant nomEtudiant age idEtudiant idMatière note
1 Alaoui 20 1 1 13
2 Slaoui 17 1 1 13
1 Alaoui 20 1 2 19
2 Slaoui 17 1 2 19

64
17/03/2020

Algèbre relationnel (AR)


q Jointures interne

v Jointure interne : La jointure interne combine un produit cartésien et une sélection.

v Elle va associer chacun des tuples (n-uplets) d’une relation R avec tous les tuples (n-
uplets) d’une relation S qui respectent une qualification (= une condition).

v Si un tuple (n-uplets) de R ne trouve pas de correspondance dans S, il est éliminé du


résultat.

v La jointure interne est commutative ! ⋈ # est équivalent à # ⋈ !

Algèbre relationnel (AR)


q Jointures interne

v La jointure naturelle (⋈) : La jointure naturelle de deux relations retourne les lignes
du produit cartésien de ces deux relations dont la valeur des attributs en commun est
égale. Ces attributs ne sont pas dupliqués lors du retour de la requête.

Exemple : $%&'()*% ⋈ +,%- ?


idEtudiant nomEtudiant age idEtudiant idMatière note
1 Alaoui 24 1 1 13
2 Slaoui 17 1 1 19

nomEtudiant age idMatière note


1 Alaoui 24 1 1 13
2 Slaoui 17 1 1 13
1 Alaoui 24 1 2 19
2 Slaoui 17 1 2 19
• /(0123410563,68923410563,5:;,01<530è>;,683;) (? 23410563.0123410563AB83;.0123410563

CDEFGHID×KLDM)

65
17/03/2020

Algèbre relationnel (AR)


q Jointures interne

Exemple : Tous les étudiants qui ont une note en Maths :

idEtudiant nomEtudiant age idEtudiant idMatière note


1 Alaoui 20 1 1 13
2 Slaoui 17 1 2 19

• ! "#$%&"è()*+ (-./0123. ⋈ 56.7)

idEtudiant nomEtudiant age idMatière note


1 Alaoui 20 1 13
1 Alaoui 20 2 19

Algèbre relationnel (AR)


q Jointures interne

• ("#$%&'(# ⋈ *+#, ⋈ -'#&è/,)

idEtudiant nomEtudiant age idEtudiant idMatière note idMatière nomMatière nbr


1 Alaoui 20 1 1 13 1 Maths 20
2 Slaoui 17 1 2 19 2 Programmation 12

idEtudiant nomEtudiant age idMatière note nomMatière nbr


1 Alaoui 20 1 13 Maths 20
1 Alaoui 20 2 19 Programmation 12

Tous les étudiants qui ont une note en Maths:


• 1(2345678è9:;<567=>?) ("#$%&'(# ⋈ *+#, ⋈ -'#&è/,)

idEtudiant nomEtudiant age idMatière note nomMatière nbr


1 Alaoui 20 1 13 Maths 20
1 Alaoui 20 2 19 Programmation 12

66
17/03/2020

Algèbre relationnel (AR)


q Jointures interne

v La jointure theta ⋈7 : La jointure theta de deux relations retourne les lignes du


produit cartésien de ces deux relations qui vérifient la condition theta.

• !1 ⋈$ !2 '() é+,-./0'1) à 3$ (!1×!2)

• 3 89:;<=>9.<;89:;<=>9@AB9C.<;89:;<=>9 ∧ <;E=9<èGC@H I),J-/1)×KL)'



• I),J-/1) ⋈ 89:;<=>9.<;89:;<=>9@AB9C.<;89:;<=>9 ∧ <;E=9<èGC@H KL)'

Le terme «jointure» utilisé réfère souvent à la jointure theta

Algèbre relationnel (AR)


q Jointure externe (externe gauche et externe droite)

v Jointure externe : La jointure externe (OUTER JOIN) est une jointure de R et S qui
conserve :
ü les tuples (n-uplets) résultat de la jointure

ü ainsi que les tuples (n-uplets) de l’une ou l’autre des 2 relations, ou bien encore des
2, qui n’ont pas été joints.

v La jointure de R et S conserve tous les n-uplets :

ü de R pour une jointure externe gauche, ⟕(LEFT OUTER JOIN)

ü de S pour une jointure externe droite, ⟖ (RIGHT OUTER JOIN)

ü ou des 2 relations pour une jointure totale, ⟗(FULL OUTER JOIN).

La valeur des attributs des tuples (n-uplets) de la relation ne satisfaisant pas au


prédicat/qualification ont pour valeur « NULL ».

67
17/03/2020

Algèbre relationnel (AR)


q Jointure externe(externe gauche et externe droite)
Exemple: Jointure externe gauche et droiteJointure (naturelle) externe gauche R ⟕ V
R V A B C
A B A C a1 b1 c1
a1 b1 a1 c1 a1 b1 c2
a1 c2 a2 b2 NULL
a2 b2
a3 c3 Jointure (naturelle) externe droite R ⟖ V
A C B
a1 c1 b1
a1 c2 b1
a3 c3 NULL
Jointure (naturelle) externe totale R ⟗ V
A B C
a1 b1 c1
a1 b1 c2
a2 b2 NULL
a3 NULL c3

Algèbre relationnel (AR)


q Jointure externe(externe gauche et externe droite)
Exemple :
R1 NA nom numTel R2 C nom adresse
1 Ali 06 56 34 67 12 0 Ali Meknes
2 Ahmed 06 13 65 34 98 2 Malik Taza
3 Ali 06 24 35 87 90 5 Malik Rabat
!"#$%&' )*"'é,&-. $- / -' 0
R1XR2 R1.NA R1.nom R1.numTel R2.NB R2.nom R2.adresse
1 Ali 06 56 34 67 12 0 Ali Meknes

1 AliJointure 06 56 34 67
externe de 12
R et S 2 Malik Taza

1 AliR1 ⟗ R206R1.NA R1.nom5


56 34 67 12 R1.numTel
Malik Rabat R2.NB R2.adresse
1 Ali 06 56 34 67 12 0 Meknes
2 Ahmed 06 13 65 34 98 0 Ali Meknes
2 Ahmed 06 13 65 34 98 NULL NULL
2 Ahmed 06 13 65 34 98 2 Malik Taza
3 Ali 06 24 35 87 90 0 Meknes
2 Ahmed 06 13 65 34 98 5 Malik Rabat
NULL Malik NULL 2 Taza
3 Ali 06 24 35 87 90 0 Ali Meknes
NULL Malik NULL 5 Rabat
3 Ali 06 24 35 87 90 2 Malik Taza

3 Ali 06 24 35 87 90 5 Malik Rabat

68
17/03/2020

Algèbre relationnel (AR)


q L’auto−jointure
v L’auto-jointure est un cas de jointure d’une relation avec elle-même, quelle soit interne
ou externe.
v Cela se passe comme si on avait 2 copies différentes d’une même relation.

v La relation doit être renommée pourêtre utilisée 2 fois dans l’opération de jointure. Les
noms des attributs doiventêtre préfixés du nom de relation.
Exemple : Les paires d’étudiants qui ont le même âge :
• ("#($%&,()*&,+,-) /0123450) ⋈ ("#7($%8,()*8,+,-) /0123450)
E E’
id1 nom1 age id2 nom2 age
1 Alaoui 20 1 Alaoui 20
2 Slaoui 17
E⋈E’ 2 Slaoui 17

id1 nom1 id2 nom2 age


1 Alaoui 1 Alaoui 20
2 Slaoui 2 Slaoui 17

Algèbre relationnel (AR)


q Semi−jointure
v La semi-jointure est une jointure interne à laquelle est appliquée une projection pour
ne conserver que les attributs d’une des 2 relations.

v Semi-jointure gauche : joint R à S et ne conserve que les attributs de R. ⋉θ

v Semi-jointure droite : joint R à S et ne conserve que les attributs de S. ⋊θ


Exemple: Semi jointure gauche et droite
R W
A B A E Semi jointure (naturelle) gauche R⋉W
a1 b1 a1 e1 A B
a2 b2 a3 e3 a1 b1

Semi jointure (naturelle) droite R ⋊ W

A E
a1 e1

69
17/03/2020

Licence Génie logiciel

Chapitre 6 : Langage SQL

Introduction

Langage de Définition de Données (LDD)

Langage de Manipulation de Données (LMD)

Langage d’Interrogation de Données (LID)

Langage de Contrôle de Données (LCD)

Langage de Contrôle des Transactions (LCT)

Langage SQL
q Introduction

v Le langage SQL (en anglais : Structured Query Language) c’est un langage qui permet

de donner des ordres aux SGBDR afin d’accéder aux services qu’il offre :

ü Créer les tables,

ü Gérer leur contenu et les interroger

ü Configurer la sécurité d’accès aux tables.

v Le langage SQL s’appuie sur les opérateurs de l’algèbre relationnelle définis en 1970 par

TedCodd, mathématicien, chercheur chez IBM (à l’époque : Sequel, Structured English

as a Query Language).

70
17/03/2020

Langage SQL
q Introduction

v SQL c’est un langage qui évolue :

ü SQL1 (SQL89) : première version avec quelques défauts corrigés dans la suivante

ü SQL2(SQL92) : la version la plus implantée actuellement (normeANSIX3.135-

1992,www.ansi.org); les versions suivantes vont étendre les possibilités.

ü SQL3 (SQL99) : Hybride objet-relationnel

……….………………………

ü SQL6 (2008) : SQL/JRT pour fonctions Java

………………………………

Langage SQL
q Introduction
v Le langage SQL permet de couvrir tous les besoins d’accès aux bases de données
relationnelles grâce à 5 groupes d’ordres SQL :
v Langage de Définition de Données (LDD) (Data Definition Language (DDL)): permet la
gestion des tables de la base de données (création, Ajouter des colonnes, supprimer des
colonnes, etc.)

v Langage d’Interrogation de Données (LID) (DataQueryLanguage(DQL)) permet de


construire des requêtes d’interrogation des données à partir des tables.
v Langage de Manipulation de Données (LMD) (Data Manipulation Language (DML)) : il
permet de manipuler les données de la base et de les mettre à jour. (ajouter des lignes,
modifier des valeurs de colonnes, supprimer des lignes).
v Langage de Contrôle de Données (LCD) (Data Control Language (DCL)): il permet de
définir les droits d’accès pour les différents utilisateurs de la base de données.

v Langage de Contrôle des Transactions (LCT) (Transaction Control Language(TCL)) : il


permet la gestion de l’intégrité des données dans la base de données.

71
17/03/2020

Langage SQL
q Introduction

Langage SQL pour gérer


les données

LDD LMD LID LCD LCT

START
CREAT INSERT INTO SELECT GRANT
TRANSACTION

ALTER UPDATE REVOKE COMMIT

DROP DELET FROM ROOLLBACK

Langage SQL : Le Langage de Définition des Données (LDD)


q LDD
v Le langage de définition de données comprend les instructions suivantes:

ü CREATE, pour créer de nouveaux objets du schéma (tables, types, index …).

ü ALTER pour modifier des objets existants.

ü DROP pour supprimer des objets existants.

72
17/03/2020

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de création ∶ 234564

v SQL permet de créer des relations sous forme de tables et de définir lors de la création
des contraintes d’intégrité variées sur les attributs.
v Une commande de création permet donc de préciser le nom de la table et de définir les
éléments de la table correspondant aux colonnes ou aux contraintes.
Syntaxe :
CREATE TABLE <nomdelatable> (
nom_colonne_1 type_colonne_1 [contrainte d'a-ribut1],
nom_colonne_2 type_colonne_2 [contrainte d'a-ribut2],
……..,
nom_colonne_n type_colonne_n [contrainted'a-ributn],
[contrainte1 de table]
[, contrainte2 de table]
………………………………..);

Langage SQL : Le Langage de Définition des Données (LDD)


q Expression des contraintes
v Valeur NULL :Un attribut qui n’est pas renseigné, et donc vide, est dit contenir la
valeur « NULL ». Cette valeur n’est pas zéro, c’est une absence de valeur.

v Contraintes d’intégrité :Une contrainte d’intégrité est une règle qui permet de
contrôler la validité et la cohérence des valeurs entrées dans les différentes tables de la
base. Elle peut être définie sous deux formes :

• Dans les commandes de création des tables.

• Au moment de la modification de la structure de la table.


v Il existe des contraintes:

• Sur un attribut : La contrainte porte sur un seul attribut. Elle suit la définition de
l’attribut.
• Sur une table : La contrainte porte sur un ensemble d’attributs d’une même table,
une virgule sépare la définition d’une contrainte de table des définitions des
attributs.

73
17/03/2020

Langage SQL : Le Langage de Définition des Données (LDD)


q Expression des contraintes : Contraintes d’234é6724é 897 93 :4472;94
v NOTNULL : Spécifie que pour toute occurrence, l’attribut doit avoir une valeur (la
saisie de ce champ est obligatoire).

v UNIQUE :Toutes les valeurs de l’attribut sont distinctes.

v PRIMARYKEY :L’attribut est une clé primaire pour la table et elle peut être remplacée
par UNIQUE et NOTNULL.

v REFERENCES table (attribut) : Il s’agit d’une contrainte d’intégrité fonctionnelle par


rapport à une clé; chaque valeur de l’attribut doit exister dans la table dont l’attribut est
référencé. On utilise cette contrainte pour les clés étrangères.

v CHECK: C’est une contrainte associée à une condition qui doit être vérifiée par toutes
les valeurs de l’attribut (domaine des valeurs de l’attribut).

Langage SQL : Le Langage de Définition des Données (LDD)


q Expression des contraintes : Contraintes d’234é6724é 897 4:;<=

v UNIQUE (attr, attrj, ……) : L’unicité porte sur le n-uplet des valeurs.

v PRIMARY KEY (attri, attrj, ……) : Clé primaire de la table (Clé composée).

v FORGEN KEY REFERENCES table (attrm,attrn,…)) [ONDELETE CASCADE] :


Désigne une clé étrangère sur plusieurs attributs.

Remarque : L’option ON DELETE CASCADE indique que la suppression d’une ligne de


la table de référence va entraîner automatiquement la suppression des lignes référencées.

Il est possible de donner un nom à une contrainte grâce au mot clé CONSTRAINT suivi
du nom que l’on donne à la contrainte, de telle manière à ce que le nom donnés affiche en
cas de non-respect de l'intégrité, c'est-à-dire lorsque la clause que l’on a spécifiée n’est pas
validée.

74
17/03/2020

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de création ∶ 234564

v Soit le schéma de la base de données suivante :

• Projet(numProjet, description, dateDébut , DateFin DATE, Budget)

• Employé(numEmployé, nom , prénom, dateNaissance, fonction, estCadre )

• Affectation(numEmployé, numProjet, débutAffect, finAffect , supérieur)

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de création ∶ 234564

v Soit le schéma de la base de données suivante :

• Projet(numProjet, description, dateDébut , dateFin, budget)

CREATE TABLE Projet (


numProjet INT PRIMARY KEY,
description CHAR(200) NOT NULL,
dateDebut DATE NOT NULL,
dateFin DATE,
budget FIXED(8,2) DEFAULT 200000,00
);

v Si un nouveau tuple est inséré sans la valeur de l’attribut budget, il prendra la valeur
par défaut 20000.00

75
17/03/2020

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de création ∶ 234564

v Soit le schéma de la base de données suivante :


• Employé(numEmployé, nom , prénom, dateNaissance, fonction, estCadre )
CREATE TABLE Employe (
numEmploye INT PRIMARY KEY,
nom CHAR(30) NOT NULL,
prenom CHAR(30),
dateNaissance DATE NOT NULL,
fonction CHAR(15) CHECK (fonction IN (‘Analyste’, ‘Chef
de projet’,‘Concepteur’, ‘Développeur’)),
estCadre CHAR(1) CHECK (estCadre IN (‘0’, ‘1’))
);
v Bien que présent sur certains SGBDR, le type booléen n'est pas spécifié par la norme
SQL2

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de création ∶ 234564

v Soit le schéma de la base de données suivante :


• Affectation(numEmployé, numProjet, débutAffect, finAffect , supérieur)

CREATE TABLE Affectation (


numEmploye INT REFERENCES Employe (numEmploye),
numProjet INT REFERENCES Projet (numProjet),
debutAffect DATE NOT NULL,
finAffect DATE,
superieur INT REFERENCES Employe (numEmploye) ,
PRIMARY KEY(numEmploye, numProjet)
);

v Quand une contrainte doit s'appliquer à plusieurs attributs, elle doit être exprimée
comme contrainte de table.

76
17/03/2020

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de création ∶ 234564

v Remarque : Toutes les contraintes sur attribut (ou sur table) peuvent être nommées.

CREATE TABLE Affectation (


numEmploye INT REFERENCES Employe (numEmploye),
numProjet INT REFERENCES Projet (numProjet),
debutAffect DATE NOT NULL,
finAffect DATE,
superieur INT CONSTRAINT cleEtrangereSup REFERENCES Employe
(numEmploye) ,
CONSTRAINT cleAffecta6on PRIMARY KEY(numEmploye, numProjet)
);

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de création ∶ 234564

v Remarque : Contraintes sur suppression de tuples.

v Il est en principe interdit de supprimer un tuple référencé par un autre tuple dans le
schéma relationnel.

v Avant de supprimer le tuple référencé, il faut d'abord supprimer tous les tuples qui le
référencent.

v Exemple: Avant de supprimer l'employé 1023, il faut supprimer toutes ses affectations.

77
17/03/2020

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de création ∶ 234564
v Remarque : Contraintes sur suppression de tuples.
• DELETE FROM Employé WHERE Num_Employé = 1023
Suppression impossible car le tuple employé est référencé par 2 tuples affecta6ons
numEmployé nom prénom dateNaissance fonction estCadre
1001 Belaid Toufik 12/05/1965 Concepteur 1
1009 Touati Rachid 13/09/1941 Chef de projet 1
1023 Kadri Amine 23/11/1970 Développeur 1
1053 Djabi Fatiha 04/06/1980 Analyste 0
1026 Bouras Kamel 19/04/1968 Administrateur 1
1005 Djabi Fatiha 22/08/1976 Développeur 0

numEmployé numProjet débutAffect finAffect supérieur


1009 122 07/03/2011 13/11/2011 NULL
1001 122 08/03/2011 28/06/2011 1009
1023 122 15/06/2011 04/10/2011 1009
1009 103 12/09/2010 01/11/2010 NULL
1001 208 15/06/2011 12/10/2011 1009
1009 208 15/06/2011 06/03/2012 NULL
1023 208 01/09/2011 17/12/2011 1009
1009 133 06/11/2011 19/02/2012 NULL
1053 208 01/09/2011 06/03/2012 1026
1026 208 19/08/2011 06/03/2012 1009

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de création ∶ 234564

v Remarque : Contraintes sur suppression de tuples.

Ø Suppression en cascade

v La clause ON DELETE CASCADE permet de supprimer en cascade tous les tuples


référençant un tuple supprimé.

CREATE TABLE Affectation (


numEmploye INT REFERENCES Employe (numEmploye), ON DELETE CASCADE
numProjet INT REFERENCES Projet (numProjet),
debutAffect DATE NOT NULL,
finAffect DATE,
superieur INT CONSTRAINT cleEtrangereSup REFERENCES Employe (numEmploye) ,
CONSTRAINT cleAffecta8on PRIMARY KEY(numEmploye, numProjet)
);

78
17/03/2020

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de création ∶ 234564
v Remarque : Contraintes sur suppression de tuples.
• DELETE FROM Employé WHERE numEmployé = 1023
Suppression du tuple employé 1023 et de tous les tuples qui le référencent dans la table
affectation.
numEmployé nom prénom dateNaissance fonction estCadre
1001 Belaid Toufik 12/05/1965 Concepteur 1
1009 Touati Rachid 13/09/1941 Chef de projet 1
1023 Kadri Amine 23/11/1970 Développeur 1
1053 Djabi Fatiha 04/06/1980 Analyste 0
1026 Bouras Kamel 19/04/1968 Administrateur 1
1005 Djabi Fatiha 22/08/1976 Développeur 0

numEmployé num_Projet débutAffect fin_Affect supérieur


1009 122 07/03/2011 13/11/2011 NULL
1001 122 08/03/2011 28/06/2011 1009
1023 122 15/06/2011 04/10/2011 1009
1009 103 12/09/2010 01/11/2010 NULL
1001 208 15/06/2011 12/10/2011 1009
1009 208 15/06/2011 06/03/2012 NULL
1023 208 01/09/2011 17/12/2011 1009
1009 133 06/11/2011 19/02/2012 NULL
1053 208 01/09/2011 06/03/2012 1026
1026 208 19/08/2011 06/03/2012 1009

Langage SQL : Le Langage de Définition des Données (LDD)


q Types de données

v La norme SQL2 prévoit un grand nombre de types de données :

§ CHAINES DE CARACTERES

§ NOMBRES

§ DATES ET HEURES

§ CHAINES DE BITS

§ OBJETS VOLUMINEUX

v Les types de données Oracle ne sont pas conformes à la norme SQL2.

79
17/03/2020

Langage SQL : Le Langage de Définition des Données (LDD)


q Types de données : Chaînes de caractères
v Codage ASCII ou EBCDIC (1 octet par caractère codé)

–CHARACTER(nn) ou CHAR(nn), suivi de la longueur entre parenthèse : longueur


fixe (comblée à droite par des espaces) ;

– CHARACTER VARYING ou VARCHAR(nn), suivi de la longueur maximale entre


parenthèse : longueur variable (1 octet en plus) ;

v codage UNICODE (2 octets par caractère codé)

–NATIONAL CHARACTER ou NCHAR(nn), suivi de la longueur entre parenthèse :


longueur fixe (comblée à droite par des espaces)

–NATIONAL CHARACTER VARYING ou NVARCHAR(nn), suivi de la longueur


maximale entre parenthèse : longueur variable (1 octet en plus pour stocker la
longueur de la chaîne)

Langage SQL : Le Langage de Définition des Données (LDD)


q Types de données : NOMBRES
v Entiers :

–INTEGER ou INT: nombres entiers sur 32 bits (en général), de (-231) à (232-1).

–SMALLINT: nombres entiers sur 16 bits (en général), de (-215) à (216-1).

v Réels:

–DECIMAL, DEC,NUMERIC, MONEY, CURRENCY, NUMBER : nombre décimal


exact, avec la précision du nombre de chiffres du nombre et du nombre de chiffres de
la partie décimale : NUMERIC(10,4) : le nombre aura 10 chiffres significatifs dont 4
après la virgule ;

–REAL, FLOAT, DOUBLE PRECI nombre décimal approché (la conversion en binaire
fait perdre une certaine précision ) ; ce type ne devrait jamais être utilisé pour des
montants ou des quantités précises !SION :

80
17/03/2020

Langage SQL : Le Langage de Définition des Données (LDD)


q Types de données : DATES ET HEURES
v Dates et heures sont stockées sous une forme spécifique à chaque SGBD, et présentée à
l’utilisateur sous plusieurs formes

–DATE : stockage de la date seule, ‘AAAA-MM-JJ’ ou ‘JJ/MM/AAAA’

–TIME : stockage de l’heure seule, ‘HH :MN : SS.mmm’

–DATETIME / TIMESTAMP: stockage de la date et de l’heure sous forme :


JJ/MM/AAAA HH:MN:SS.mmm.

–INTERVAL: stockage d’un intervalle de dates : nombre de jours, de mois, d’année,


etc.

Langage SQL : Le Langage de Définition des Données (LDD)


q Types de données : CHAINES DE BITS et OBJETS VOLUMINEUX
v Chaîne de bits

– BIT: permet le stockage d’un certain nombre de bits

v Objets volumineux

– BLOB : Binary Large OBject : permet le stockage d’images, par exemple

–TEXT: permet le stockage de textes volumineux

81
17/03/2020

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de modi-ication ∶ 23456

v L'instruction ALTER permet de modifier le schéma d'une table.

v Modifier le schéma d'une table consiste à effectuer un des changements suivants :

ü Ajouter une ou plusieurs colonnes (ADD (col1 type1[, col2 type2 …]))

ü Modifier une ou plusieurs colonnes (MODIFY (col1 type 1[, col2 type2…]))

ü Supprimer une ou plusieurs colonnes (DROP COLUMN (col1 [,col2 …]))

ü Ajouter une contrainte (ADD CONSTRAINT …)

ü Supprimer une contrainte (DROP CONSTRAINT nom_contrainte)

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de modi-ication ∶ 23456
Exemple :
v Ajouter une colonne Salaire à la table Employé.

ALTER TABLE Employe ADD Salaire NUMBER(7,2)

v Modifier le degré de précision de la colonne Budget et augmenter la taille maximale de


la colonne Description de projet.

ALTER TABLE Projet MODIFY (Budget NUMBER(10,2),


Description VARCHAR2(255))

v Supprimer la colonne dateFin

ALTER TABLE Projet DROP COLUMN dateFin

v Ajouter une contrainte sur le Budget

ALTER TABLE Projet ADD CONSTRAINT Budget_Min CHECK(Budget >= 20000)

82
17/03/2020

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de *+,,-.**/01 ∶ 3456

v L'instruction DROP permet de supprimer un objet du schéma relationnel (table,


index…).

v Supprime la table Employé et tous les tuples qu'elle contient. A ne pas confondre avec
l'instruction DELETE.

v Pour supprimer une table:

DROP TABLE nom_table

Exemple :

DROP TABLE Employé

Langage SQL : Le Langage de Définition des Données (LDD)


q Requêtes de *+,,-.**/01 ∶ 3456

v Remarque : Il est interdit de supprimer une table référencée par une autre table.
v Pour supprimer les tables Employe, Projet et Affectation, il faut d'abord supprimer la
table Affectation et ensuite les tables Employe, Projet.
DROP TABLE Affectation;
DROP TABLE Employe;
DROP TABLE Projet;
v Sinon, il faut d'abord supprimer les contraintes d'intégrité référençant une table avant
de supprimer cette table.

v L'option CASCADE CONSTRAINTS permet de supprimer les contraintes d'intégrité


avant de supprimer les tables.

DROP TABLE Employe CASCADE CONSTRAINTS;


DROP TABLE Projet CASCADE CONSTRAINTS;
DROP TABLE Affectation;

83
17/03/2020

Langage SQL :Langage de Manipulation des Données (LMD)


q !"#$%&'(#)%"
v Le langage LMD fournit des instructions pour ajouter des lignes, de mise à jour des
valeurs de colonnes et de suppression des lignes à une table de la BDD (Ces
instructions interviennent au niveau du CONTENU des tables).

v Ces instructions déclenchent :

ü L’APPLICATION DES CONTRAINTES D’INTEGRITE spécifiés lors de la


création des tables.

ü Les mécanismes de GESTION DE TRANSACTION afin de garantir l’intégrité


des données lors d’accès concurrent aux données.

ü Les mécanismes de JOURNALISATION permettant de garantir l’intégrité des


données en cas d’erreur en cours de transaction ou en cas de nécessité de
restauration d’une base à un état antérieur avec ré-application des transactions.

Langage SQL :Langage de Manipulation des Données (LMD)


q !"#$%&'(" *$# +',"$# ∶ INSERT INTO
v La commande INSERT INTO permet d’insérer une ligne dans une table en spécifiant
les valeurs à insérer.
Syntaxe :
INSERT INTO nomTable ( nomCol1, nomCol2, nomCol3, ...)
values ( val1, val2, val3, ...);
ü nomTable: nom de la table concernée par l’ajout

ü nomCol1, nomCol2, nomCol3, ...: liste des noms de colonne est optionnelle.
• Si elle est omise, la liste des colonnes sera par défaut la liste de l’ensemble des
colonnes de la table dans l’ordre de la création de la table.
• Si une liste de colonnes est spécifiée, les colonnes ne figurant pas dans la liste
auront la valeur NULL.

ü val1, val2, val3, ...: liste des valeurs associées chacune à une colonne de la table ;
toutes les colonnes doivent avoir une valeur qui leur correspond (dans l’ordre
défini dans la table) ; on peut ainsi ajouter plusieurs lignes.

84
17/03/2020

Langage SQL :Langage de Manipulation des Données (LMD)


q !"#$%&'(" *$# +',"$#: INSERT INTO

v Il est possible d’insérer dans une table des lignes provenant d’une autre table.

Syntaxe :

INSERT INTO nomTable ( nomCol1, nomCol2, nomCol3, ...)


SELECT * FROM nomTable1

Exemple :

INSERT INTO Employe


Values (‘1009’,’Touati’,’Rachid’,’13/09/1941’,’Chef de projet’,1);

Langage SQL :Langage de Manipulation des Données (LMD)


q !"#$%$&'($") #+, -$.)+, ∶ UPDATE
v La commande UPDATE permet de modifier les valeurs d’une ou plusieurs colonnes,
dans une ou plusieurs lignes existantes d’une table.
Syntaxe :
UPDATE nomTable
SET nomCol1 = {expression_1 | ( SELECT ...) },
nomCol2 = {expression_1 | ( SELECT ...) },
……………………
nomColn= {expression_n | ( SELECT ...) },
WEHRE predicat;
ü Les valeurs des colonnes nomCol1, nomCol2, ..., nomColn sont modifiées dans
toutes les lignes qui satisfont le prédicat.

ü En l’absence d’une clause WHERE, toutes les lignes sont mises à jour.
Exemple : mise à jour la fonction de l’employé numéro 1009

UPDATE Employe SET fonction=‘Concepteur’ WHERE numEmploye= ‘1009’;

85
17/03/2020

Langage SQL :Langage de Manipulation des Données (LMD)


q Suppression !"# %&'("# ∶ DELETE

v la commande DELETE permet de supprimer des lignes d’une table.

DELETE FROM nomTable

WEHRE predicat;

ü Toutes les lignes pour lesquelles le prédicat est évalué à vrai sont supprimées.

ü En l’absence de clause WHERE, toutes les lignes de la table sont supprimées.

Exemple :

DELET FROM Employe WHERE numEmploye= ‘1009’;


v La commande TRUNCATE permet de vider une table.

Syntaxe :

TRUNCATE TABLE nomTable;

Langage SQL :Langage d’Interrogation des Données (LID)


q !""#$%&#' )#* '+,-ê/+0 12 34/+55678/364 SELECT

v La commande SELECT permet d’interroger les tables de la BDD. Cette commande est
une combinaison d’une ou de plusieurs clauses. Les clauses sont généralement
introduites par des mots-clés.

Syntaxe :

SELECT [DISTINCT|ALL] {*| listeDeColonnes}


FROM table(s)
[WHERE criteresDeSelection]
[GROUPE BY listeDeColonnesDeRegroupement]
[HAVING criteresDeSelectionApresRegroupement]
[ORDER BY criteresDeClassement]

86
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q !""#$%&#' )#* '+,-ê/+0 12 34/+55678/364 : SELECT

v SELECT : sélectionner les colonnes du résultat final (projection)

v FROM : rassembler toutes les tables utiles à l’exécution de la requête (jointures,


produit cartésien) pour constituer les lignes brutes

v WHERE : sélectionner les lignes qui nous seront effectivement utiles (sélection)

v GROUP BY : définir les niveaux de regroupement pour le calcul d’agrégats.

v HAVING : sélectionner les lignes après que les calculs d’agrégats ont été réalisés
(sélection)

v ORDER BY : classer le résultat

Langage SQL :Langage d’Interrogation des Données (LID)


q !""#$%&#' )#* '+,-ê/+0 12 34/+55678/364

v listeDeColonnes : colonnes retournées par la requête, séparées par une virgule (sauf la
dernière)

v table(s): la ou les tables (jointes de manière cohérente)

v criteresDeSelection: expression logique de sélection des lignes extraites

v listeDeColonnesDeRegroupement : noms des colonnes sur lesquelles appliquer le


regroupement, séparées par une virgule, sauf la dernière.

v criteresDeSelectionApresRegroupement : nouvelle sélection appliquée généralement à


des calculs agrégés

v critèreesDeClassement : noms des colonnes et type de classement, séparée par une


virgule, sauf le dernier

87
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q !""#$%&#' )#* '+,-ê/+0 12 34/+55678/364 : SELECT

Personne numero nom prenom ville salaire dateEntree sexe


1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fesi 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
Syntaxe :
SELECT * FROM nomTableau WHERE condition;

v * : Facilité d’écriture = ’toutes les colonnes’


v nomTableu : table d’origine

v condition : condition de sélection des lignes

Exemple : Les personnes dont le numéro est inférieur à 3

SELECT * FROM Personne WHERE numéro <3;

Personne numero nom prenom ville salaire dateEntree sexe


1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H

88
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE

v Opérateurs de comparaison et connecteurs logiques

Opérateurs de comparaison Connecteurs logiques


Nom Opérateur
Nom Opérateur
égal =
Et and
différent != ou <> ou or
inférieur < non not
Inférieur ou égal <=
supérieur >
Supérieur ou égal >=

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL

Opérateur Déscription

IN(liste) est égal à une valeur au moins d’une liste

NOT IN(liste) est différent de toutes les valeurs d’une liste

BETWEEN a AND b est dans l’intervalle[a, b]

NOT BETWEEN a AND b n’est pas dans l’intervalle[a, b]

LIKE"modele" ressemble à un modèle

NOT LIKE"modele" ne ressemble pas à un modèle

IS NULL a une valeur nulle

IS NOT NULL n’a pas une valeur nulle


ü La liste de l’opérateur IN est une suite de valeurs séparées par une virgule, par
exemple :(1,3,8,9,2), ou (‘Fes’, ’Taza’, ’Meknes’).

89
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection :where
v Opérateurs étendus SQL
ü Le modèle de l’opérateur LIKE : L’opérateur LIKE permet de comparer la valeur
d’une colonne de type chaîne de caractères avec une autre chaîne.

• % (ou *) : remplace plusieurs caractères

• _ (ou ?) : remplace un seul caractère

ü On peut ainsi effectuer les types de comparaison suivants, et tester que la valeur
d’une colonne...
• Commence par ’xx’ : colonne LIKE ’xx%’
• Contient ’xx’ : colonne LIKE ’%xx%’
• Se termine par ’xx’ : colonne LIKE ’%xx’
• Contient un ’x’ au caractère 2 : colonne LIKE ’_x%’
• Contient un ’x’ en avant dernier caractère : colonne LIKE ’%x_’
• a une longueur exacte de n caractères , par exemple 4 : colonne LIKE ’____’

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
ü Les opérateurs suivants sont particulièrement utilisés afin de combiner des requêtes
imbriquées.

Opérateur Déscription
Opérateur ALL(liste) teste si l’opérateur s’applique à toutes les valeurs
de la liste
Opérateur ANY(liste) teste si l’opérateur s’applique à au moins une des
valeurs de la liste
Opérateur EXISTS(liste) teste si la liste n’est pas vide

• L’opérateur associé à ALL et ANY est l’un des opérateur de comparaison.

90
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes entrés avant le 1er juin 2008
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE dateEntre <‘2008-06-01’;


Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection :WHERE
v Opérateurs étendus SQL
Exemple : Les personnes habitant à Fes
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE ville=‘Fes’ ;

Personne numero nom prenom ville salaire dateEntree sexe


1 Alaoui Samir Fes 10000.00 2008-01-01 H
4 Safir Jawad Fes 8500.00 2008-09-07 H

91
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes habitant à Fes ou Taza
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE ville=‘Fes’ or ville=‘Taza’;


Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
4 Safir Jawad Fes 8500.00 2008-09-07 H

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes habitant à Fes ou Taza : opérateur IN

Personne numero nom prenom ville salaire dateEntree sexe


1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE ville IN(‘Fes’, ‘Taza’);


Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
4 Safir Jawad Fes 8500.00 2008-09-07 H

92
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes dont le numéro est 1 3 ou 5

Personne numero nom prenom ville salaire dateEntree sexe


1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE numero=1 or numero=3 or numero=5;


Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
5 Lamniai Rachid null 6000.00 2008-09-28 H

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes dont le numéro est 1 3 ou 5 : opérateur IN

Personne numero nom prenom ville salaire dateEntree sexe


1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE numero IN (1, 3, 5);


Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
5 Lamniai Rachid null 6000.00 2008-09-28 H

93
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes dont le numéro n’ est pas 1 3 ou 5 :

Personne numero nom prenom ville salaire dateEntree sexe


1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE numero NOT IN (1, 3, 5);


Personne numero nom prenom ville salaire dateEntree sexe
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
4 Safir Jawad Fes 8500.00 2008-09-07 H

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes dont le nom commence par ’L’ : opérateur LIKE

Personne numero nom prenom ville salaire dateEntree sexe


1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE nom LIKE ‘L%’;

Personne numero nom prenom ville salaire dateEntree sexe


5 Lamniai Rachid null 6000.00 2008-09-28 H

94
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes dont le nom ne contient pas ’La’ : opérateur LIKE

Personne numero nom prenom ville salaire dateEntree sexe


1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE nom NOT LIKE ‘%La%’;

Personne numero nom prenom ville salaire dateEntree sexe


2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
4 Safir Jawad Fes 8500.00 2008-09-07 H

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes dont le numéro est compris entre 2 et 5
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE numero>=2 and numero<=5 ;


Personne numero nom prenom ville salaire dateEntree sexe
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

95
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes dont le numéro est compris entre 2 et 5
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE numero BETWEEN 2 and 5 ;


Personne numero nom prenom ville salaire dateEntree sexe
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes dont le numéro n’est pas compris entre 2 et 5
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE numero NOT BETWEEN 2 and 5 ;

Personne numero nom prenom ville salaire dateEntree sexe


1 Alaoui Samir Fes 10000.00 2008-01-01 H

96
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes entrées en avril 2008
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT*FROM Personne WHERE dateEntree


BETWEEN ‘2008-04-01’and ‘2008-04-30’;

Personne numero nom prenom ville salaire dateEntree sexe


3 Slaoui Karima Rabat 7500.00 2008-04-20 F

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes dont la ville n’est pas renseignée
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE ville IS NULL;

Personne numero nom prenom ville salaire dateEntree sexe


5 Lamniai Rachid null 6000.00 2008-09-28 H

97
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sélection : WHERE
v Opérateurs étendus SQL
Exemple : Les personnes dont la ville est renseignée
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT * FROM Personne WHERE ville IS NOT NULL;


Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H

Langage SQL :Langage d’Interrogation des Données (LID)


q Renommage

v L’opération de renommage est utilisée afin de rebaptiser des tables ou des colonnes
afin de lever une ambiguïté lorsque, dans une requête, un même identificateur de
colonne est utilisé plusieurs fois, ou un même nom de table apparait plusieurs fois.

v Alias de table : L’alias de table est un nouveau nom donné à une table au sein d’une
requête, et valable seulement dans la requête.

Syntaxe :

SELECT * FROM TableOrigine AliasDeLaTable;


v Après qu’un alias a été défini dans une requête, on ne peut plus faire référence au nom
originel de la table dans la requête.

v L’alias de table est utilisé essentiellement dans les jointures où des colonnes de noms
identiques proviennent de table différentes : un alias court, d’une seule lettre par
exemple, permet de rendre la requête plus lisible.

98
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Renommage
v Alias de colonne : L’alias de colonne permet de donner un nom plus lisible à une
colonne dans le résultat.
Syntaxe :

SELECT att1 AS Natt1, att2 AS Natt2, …, attn AS Nattn


FROM TableOrigine;
v L’alias de colonne est donnée dans la clause SELECT ne peut être utilisé qu’après la
clause WHERE.
Exemple : renommer salaire par salaireMensuel
SELECT nom, prenom, salaire AS salaireMensuel FROM Personne;
Résultat nom prenom salaireMensuel
Alaoui Samir 10000.00
Elkhaldi Fouad 13000.00
Slaoui Karima 7500.00
Safir Jawad 8500.00
Lamniai Rachid 6000.00

Langage SQL :Langage d’Interrogation des Données (LID)


q Renommage

Exemple : Les nom, prenom et date dentrée des personnes qui habite à Fes

SELECT A.nom, A.prenom, A.dateEntree FROM Personne A


WHERE A.ville=‘Fes’;

Résultat nom prenom dateEntree


Alaoui Samir 2008-01-01
Safir Jawad 2008-09-07

99
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Opérateurs ensemblistes

v UNION: permet de fusionner deux requêtes (ou table ) ayant le même schéma.
Syntaxe :

• Sans doublons
SELECT Requête1 UNION Requête2;
• Les doublons sont conservés
SELECT Requête1 UNION ALL Requête2;
Exemple : Les personnes entrées en janvier et celles habitant à Fes
SELECT * FROM Personne WHERE dateEntree BETWEEN (‘2008-01-01 and ‘2008-01-30’)
UNION
SELECT * FROM Personne WHERE ville=‘Fes’;
Résultat numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
4 Safir Jawad Fes 8500.00 2008-09-07 H

Langage SQL :Langage d’Interrogation des Données (LID)


q Opérateurs ensemblistes
v EXCEPT: permet d’effectuer la différence entre deux requête (ou tables).
Syntaxe :

Requête1 EXCEPT Requête2;


v INTERSECT : L’opération d’intersection en SQL reprend les lignes d’une 1ère
requête qui se trouvent aussi dans une 2ème requête.
Syntaxe :

Requête1 INTERSECT Requête2;


Remarque 1 : Les mot-cles EXCEPT et INTERSECT ne sont pas implanté dans tous les
SGBDR : il est alors nécessaire d’utiliser une sous-requête pour mettre en oeuvre cette
notion.

Remarque 2: La division n’est pas implanté dans les SGBDR : il est nécessaire d’utiliser
une sous-requête pour mettre en oeuvre cette notion.

100
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Opérateurs ensemblistes

v Produit cartésien :FROM+CROSS JOIN : Le produit cartésien permet la


construction de toutes les combinaisons possibles des lignes de 2 tables.
Syntaxe :

SELECT * FROM Table1 CROSS JOIN Table2;


Remarque : Le résultat du produit cartésien n’a pas de sens : on y associe en effet des
colonnes de tables différentes sans conserver de lien sémantique entre elles.
Exemple : Inscrire code numero
Etudiant numero nom prenom dateEntree INFO 1

1 Alaoui Samir 1990-01-01 INFO 9

9 Elkhaldi Fouad 1994-03-15 INFO 34


MATH 1
23 Slaoui Karima 1992-04-20
34 Safir Jawad 1995-09-07 MATH 23

105 Lamniai Rachid 1993-09-28 MATH 34


PHCH 1

SELECT * FROM Etudiant CROSS JOIN Inscrire;

Langage SQL :Langage d’Interrogation des Données (LID)


q Jointure interne : NATUREL JOIN et (INNER JOIN ou JOIN)

v Jointure naturel : La jointure naturelle utilise, de manière transparente, comme


critère de jointure l’égalité appliquée aux colonnes qui portent le même nom dans les
2 tables.
Syntaxe :
SELECT * FROM Table1 NATURAL JOIN Table2;

Remarque 1 : Si aucun nom d’attribut n’est commun aux 2 relations, on obtient un


produit cartésien.

Remarque 2 : Si des attributs portent le même nom sans toute fois avoir le même sens,
on obtient une jointure incohérente...

101
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Jointure interne : NATUREL JOIN et (INNER JOIN ou JOIN)
Exemple : Inscrire code numero
INFO 1
Etudiant numero nom prenom dateEntree
INFO 9
1 Alaoui Samir 1990-01-01
INFO 34
9 Elkhaldi Fouad 1994-03-15
MATH 1
23 Slaoui Karima 1992-04-20
MATH 23
34 Safir Jawad 1995-09-07
MATH 34
105 Lamniai Rachid 1993-09-28
PHCH 1

SELECT * FROM Etudiant NATUREL JOIN Inscrire;


Résultat numero nom prenom dateEntree code
1 Alaoui Samir 1990-01-01 INFO
1 Alaoui Samir 1990-01-01 MATH
1 Alaoui Samir 1990-01-01 PHCH
9 Elkhaldi Fouad 1994-03-15 INFO
23 Slaoui Karima 1992-04-20 MATH
34 Safir Jawad 1995-09-07 INFO
34 Safir Jawad 1995-09-07 MATH

Langage SQL :Langage d’Interrogation des Données (LID)


q Jointure interne : NATUREL JOIN et (INNER JOIN ou JOIN)
Exemple : Inscrire code numero
Formation code liblle
Etudiant numero nom prenom dateEntree INFO 1
INFO 9
INFO Informa
1 Alaoui Samir 1990-01-01
INFO 34 tique
9 Elkhaldi Fouad 1994-03-15
MATH 1 MATH Mahémat
23 Slaoui Karima 1992-04-20 ique
MATH 23
34 Safir Jawad 1995-09-07 PHCH Physique-
MATH 34
105 Lamniai Rachid 1993-09-28 Chimie
PHCH 1
SELECT nom, prenom, liblle FROM
(Etudiant NATUREL JOIN Inscrire )NATUREL JOIN Formation;
Résultat nom prenom liblle
Alaoui Samir Informatique
Alaoui Samir Mathématique
Alaoui Samir Physique-Chimie
Elkhaldi Fouad Informatique
Slaoui Karima Mathématique
Safir Jawad Informatique
Safir Jawad Mathématique

102
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Jointure interne : NATUREL JOIN et (INNER JOIN ou JOIN)

Tehéta - Jointure :.

Syntaxe :

SELECT * FROM Table1 INNER JOIN (ou JOIN) Table2 ON Conditions;

Conditions : Critère de jointure utilisant des opérateurs de comparaison.

Langage SQL :Langage d’Interrogation des Données (LID)


q Jointure interne : NATUREL JOIN et (INNER JOIN ou JOIN)
Inscrire code numero
Exemple : INFO 1
Etudiant numero nom prenom dateEntree INFO 9
1 Alaoui Samir 1990-01-01 INFO 34
9 Elkhaldi Fouad 1994-03-15 MATH 1
23 Slaoui Karima 1992-04-20 MATH 23
34 Safir Jawad 1995-09-07 MATH 34
105 Lamniai Rachid 1993-09-28 PHCH 1

SELECT * FROM
(Etudiant INNER JOIN Inscrire ON Etudiant.numero=Inscrire.numero;
Résultat numero nom prenom dateEntree numero code
1 Alaoui Samir 1990-01-01 1 INFO
9 Elkhaldi Fouad 1994-03-15 9 INFO
34 Safir Jawad 1995-09-07 34 INFO
1 Alaoui Samir 1990-01-01 1 MATH
23 Slaoui Karima 1992-04-20 23 MATH
34 Safir Jawad 1995-09-07 34 MATH
1 Alaoui Samir 1990-01-01 1 PHCH

103
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Jointure interne : NATUREL JOIN et (INNER JOIN ou JOIN)

Tehéta - Jointure : Lorsque la (ou les) colonne(s) de jointure porte(nt) le même nom
dans les 2 tables jointures, il est possible d’utiliser une notation plus simple en SQL92, et
qui supprime le doublon de colonne(s) de jointure :
Syntaxe :

SELECT * FROM Table1 INNER JOIN (ou JOIN) Table2


USING (col1, col2, …);

Conditions : Critère de jointure utilisant des opérateurs de comparaison.

Langage SQL :Langage d’Interrogation des Données (LID)


q Jointure interne : NATUREL JOIN et (INNER JOIN ou JOIN)
Inscrire code numero
Exemple : INFO 1
Formation code liblle
Etudiant numero nom prenom dateEntree INFO 9 INFO Informa
1 Alaoui Samir 1990-01-01 INFO 34
tique
9 Elkhaldi Fouad 1994-03-15 MATH 1
MATH Mahémat
23 Slaoui Karima 1992-04-20 MATH 23 ique
34 Safir Jawad 1995-09-07 MATH 34 PHCH Physique-
105 Lamniai Rachid 1993-09-28 PHCH 1 Chimie

SELECT nom, prenom, liblle FROM


(Etudiant JOIN Inscrire USING(numero)) JOIN Formation USING(code);
Résultat nom prenom liblle
Alaoui Samir Informatique
Alaoui Samir Mathématique
Alaoui Samir Physique-Chimie
Elkhaldi Fouad Informatique
Slaoui Karima Mathématique
Safir Jawad Informatique
Safir Jawad Mathématique

104
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Jointure externe : OUTER JOIN
Jointure externe:
Syntaxe :

SELECT * FROM Table1 [left|right|full] OUTER JOINTable2 ON


Conditions;
SELECT * FROM Table1 [left|right|full] OUTER JOINTable2 USING
(col1, col2, …);
ü [left|right|full] : Critère indique si on conserve les lignes de la table de gauche, de
droite ou des 2.
ü Conditions : Critère de jointure utilisant des opérateurs de comparaison.

ü OUTER JOIN : mot-clé de la jointure externe


ü (col1, col2, …) : colonne(s) de jointure (égalité)

ü La valeur des attributs des n-uplets de la relation ne satisfaisant pas le critère de


jointure ont pour valeur null.

Langage SQL :Langage d’Interrogation des Données (LID)


q Jointure interne : OUTER JOIN
Inscrire code numero
Exemple : Etudiant numero nom prenom dateEntree INFO 1
1 Alaoui Samir 1990-01-01 INFO 9
9 Elkhaldi Fouad 1994-03-15 INFO 34
23 Slaoui Karima 1992-04-20 MATH 1
34 Safir Jawad 1995-09-07 MATH 23
105 Lamniai Rachid 1993-09-28 MATH 34
PHCH 1
SELECT * FROM Etudiant LEFT OUTER JOIN Inscrire
ON Etudiant.numero=Inscrire.numero;
Résultat numero nom prenom dateEntree code numero
1 Alaoui Samir 1990-01-01 INFO 1
1 Alaoui Samir 1990-01-01 MATH 1
1 Alaoui Samir 1990-01-01 PHCH 1
9 Elkhaldi Fouad 1994-03-15 INFO 9
23 Slaoui Karima 1992-04-20 MATH 23
34 Safir Jawad 1995-09-07 INFO 34
34 Safir Jawad 1995-09-07 MATH 34
105 Lamniai Rachid 1993-09-28 null null

105
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Jointure interne : OUTER JOIN
Inscrire code numero
Exemple : Etudiant numero nom prenom dateEntree INFO 1
1 Alaoui Samir 1990-01-01 INFO 9
9 Elkhaldi Fouad 1994-03-15 INFO 34
23 Slaoui Karima 1992-04-20 MATH 1
34 Safir Jawad 1995-09-07 MATH 23
105 Lamniai Rachid 1993-09-28 MATH 34
PHCH 1
SELECT * FROM Etudiant LEFT OUTER JOIN Inscrire
USING(numero);
Résultat numero nom prenom dateEntree code
1 Alaoui Samir 1990-01-01 INFO
1 Alaoui Samir 1990-01-01 MATH
1 Alaoui Samir 1990-01-01 PHCH
9 Elkhaldi Fouad 1994-03-15 INFO
23 Slaoui Karima 1992-04-20 MATH
34 Safir Jawad 1995-09-07 INFO
34 Safir Jawad 1995-09-07 MATH
105 Lamniai Rachid 1993-09-28 null

Langage SQL :Langage d’Interrogation des Données (LID)


q Cas particuliers de jointures : Auto-Jointure
v Auto-Jointure : L’auto-jointure est un cas de jointure d’une relation avec elle-même,
quelle soit interne ou externe.

v Les noms des attributs doivent être préfixés du nom de relation afin d’éviter toute
ambiguïté ou bien être renommés.

Syntaxe :

SELECT * FROM Table1 INNER JOIN Table1 A ON Conditions;

ü Conditions : Critère de jointure utilisant des opérateurs de comparaison.

ü A : un alias sur Table1

106
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Cas particuliers de jointures : Auto−Jointure
Exemple : à partir de de la table ’Personne’, produire un résultat comportant tous les
binômes possibles de personnes d’une même ville :
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT P.nom, P.prenom, A.nom AS nomBinomes, A.prenom AS prenomBinomes


FROM Personne P INNER JOIN Personne A ON P.ville=A.ville ;
Résultat nom prenom nomBinomes prenom.binomes
Alaoui Samir Alaoui Samir
Alaoui Samir Safir Jawad
Elkhaldi Fouad Elkhaldi Fouad
Slaoui Karima Slaoui Karima
Safir Jawad Alaoui Samir
Safir Jawad Safir Jawad

Langage SQL :Langage d’Interrogation des Données (LID)


q Cas particuliers de jointures : Auto−Jointure
Exemple : Une amélioration sera à apporter : en effet, chaque personne formera un
binôme avec lui-même…
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT P.nom, P.prenom, A.nom AS nomBinomes, A.prenom AS prenomBinomes


FROM Personne P INNER JOIN Personne A
ON P.ville=A.ville AND P.numero<>A.numero;

Résultat nom prenom nomBinomes prenom.binomes


Alaoui Samir Safir Jawad
Safir Jawad Alaoui Samir

107
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Cas particuliers de jointures : Auto−Jointure
Exemple : Une amélioration encore : Alaoui-Safir est le même binôme que Safir-Alaoui…

Personne numero nom prenom ville salaire dateEntree sexe


1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT P.nom, P.prenom, A.nom AS nomBinomes, A.prenom AS prenomBinomes


FROM Personne P INNER JOIN Personne A
ON P.ville=A.ville AND P.numero<>A.numero AND P.nom<A.nom;

Résultat nom prenom nomBinomes prenom.binomes


Alaoui Samir Safir Jawad

Langage SQL :Langage d’Interrogation des Données (LID)


q Cas particuliers de jointures : Semi-Jointure

v Semi-Jointure : La semi-jointure est une jointure à laquelle est appliquée une


projection pour ne conserver que les colonnes d’une des 2 tables.

v Il n’existe pas d’opérateur spécifique pour cette forme de jointure : une simple
projection permet de conserver les colonnes d’une des 2 tables.

Syntaxe :

SELECT Table1.* FROM Table1 INNER JOIN Table2 ON Conditions;

ü Conditions : Critère de jointure utilisant des opérateurs de comparaison.

ü Table1.* : projection des attributs de la table Table1

108
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Cas particuliers de jointures : Semi-jointure
Exemple : Semi-jointure gauche (avec suppression des doublons : plusieurs inscription
par étudiant...)
Inscrire code numero
Etudiant numero nom prenom dateEntree INFO 1
INFO 9
1 Alaoui Samir 1990-01-01
INFO 34
9 Elkhaldi Fouad 1994-03-15
MATH 1
23 Slaoui Karima 1992-04-20
MATH 23
34 Safir Jawad 1995-09-07
MATH 34
105 Lamniai Rachid 1993-09-28
PHCH 1

SELECT Etudiant.* FROM Etudiant INNER JOIN Inscrire


USING(numero);

Résultat numero nom prenom dateEntree


1 Alaoui Samir 1990-01-01
9 Elkhaldi Fouad 1994-03-15
23 Slaoui Karima 1992-04-20
34 Safir Jawad 1995-09-07

Langage SQL :Langage d’Interrogation des Données (LID)


q Les fonctions de groupe imbriquées (Agrégats)
v Les fonctions de groupe sont utilisées pour afficher des informations sur un groupe
d’enregistrements.

Personne Salaire
1 8000
2 25000
3 9400
Maximum des salaires
4 7000 dans la table Salaire
5 5000 “Personne” 25000
6 4900
7 8100
8 5900

109
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Les fonctions de groupe imbriquées (Agrégats)
Syntaxe :

SELECT [colonne,] FonctionGroupe(argument)


FROM Table
WHERE condition(s) ]
[ GROUP BY colonne]
[ORDER BY FonctionGroupe(argument) ]

vRemarque 1 : L’argument peut-être un nom de colonne, une expression ou une


constante.

vRemarque 2 : Les fonctions de groupe ne peuvent pas être utilisées dans les clauses
FROM, WHERE et GROUP BY

Langage SQL :Langage d’Interrogation des Données (LID)


q Les fonctions de groupe imbriquées (Agrégats)

Fonction Description
SUM( [DISTINCT | ALL] n ) Retourne la somme de toutes les valeurs du
groupe n
MIN( [DISTINCT | ALL] expr ) Retourne la plus petite valeur du groupe expr
MAX( [DISTINCT | ALL] expr ) Retourne la plus grande valeur du groupe expr

COUNT( { * | [DISTINCT | ALL] expr } ) -Retourne le nombre d’enregistrements contenus


dans le groupe expr.
-COUNT(*) retourne le nombre total
d'enregistrements retournés en incluant les
valeurs nulles et les doublons.
AVG( [DISTINCT | ALL] n ) Retourne la moyenne des valeurs du groupe n

110
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Les fonctions de groupe imbriquées (Agrégats)
Exemple : Somme des salaires
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT SUM(salaire)AS TotalDesSalaires, count(*) AS NombreDesPersonnes


FROM Personne; Résultat TotalDesSalaires NombreDesPersonnes
45000.00 5
Exemple : Salaire le plus élevé et le plus bas
SELECT MAX(salaire) AS PlusElevé, MIN salaire) AS PlusBas
FROM Personne; Résultat PlusElevé PlusBas
13000.00 6000.00

Langage SQL :Langage d’Interrogation des Données (LID)


q Les fonctions de groupe imbriquées (Agrégats)
Exemple : Somme des salaires des personnes de Fes

Personne numero nom prenom ville salaire dateEntree sexe


1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT SUM(salaire)AS TotalDesSalaires,


count(*) AS NombreDesPersonnes
FROM Personne WHERE ville=‘Fes’;

Résultat TotalDesSalaires NombreDesPersonnes


18500.00 2

111
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Les fonctions de groupe imbriquées (Agrégats) : Clause GROUP BY

v Permet de diviser les enregistrements d’une table en groupes.

v Les fonctions de groupe peuvent être utilisées pour retourner les informations
relatives à chaque groupe.
Syntaxe :

SELECT [colonne,] FonctionGroupe(argument)


FROM Table
WHERE condition(s) ]
[ GROUP BY colonne]
[ORDER BY FonctionGroupe(argument) ]

Langage SQL :Langage d’Interrogation des Données (LID)


q Les fonctions de groupe imbriquées (Agrégats) :Clause GROUP BY
Exemple : Somme des salaires et nombre de personne par ville et nombre de villes et
nombre de villes différentes
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H
SELECT ville, SUM(salaire) AS TotalDesSalaires,
count(*) AS NombreDesPersonnes,count(ville) AS NombreDesVilles
count(DISTINCT ville) AS NombreDesVilleDiff
FROM Personne GROUP BY ville;
Résultat ville TotalDesSalaires NombreDesPersonnes NombresDesVilles NombreDesVilleDiff
null 6000,00 1 1 0
Fes 18500.00 2 2 1
Taza 1300.00 1 1 1
Rabat 7500.00 1 1 1

112
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Les fonctions de groupe imbriquées (Agrégats) : Clause HAVING

v La clause WHERE n’acceptant pas les fonctions de groupe.

v La sélection du résultat des fonctions de groupe se fera dans la clause HAVING.

v HAVING va utiliser des opérateurs relationnels et comparer la valeur d’une colonne


agrégée à une valeur fixe (ou calculée).

Syntaxe :

SELECT [colonne,] FonctionGroupe(argument)


FROM Table
WHERE condition(s) ]
[ GROUP BY colonne]
[HAVING criteresDeSelectionApresRegroupement]
[ORDER BY FonctionGroupe(argument) |colonne ]

Langage SQL :Langage d’Interrogation des Données (LID)


q Les fonctions de groupe imbriquées (Agrégats) :Clause HAVING
Exemple : Somme des salaires par ville qui ont plus de 1 personne
Personne numero nom prenom ville salaire dateEntree sexe
1 Alaoui Samir Fes 10000.00 2008-01-01 H
2 Elkhaldi Fouad Taza 13000.00 2008-03-15 H
3 Slaoui Karima Rabat 7500.00 2008-04-20 F
4 Safir Jawad Fes 8500.00 2008-09-07 H
5 Lamniai Rachid null 6000.00 2008-09-28 H

SELECT ville, SUM(salaire) AS TotalDesSalaires,


count(*) AS NombreDesPersonnes,
FROM Personne
GROUP BY ville,
HAVING NombreDesPersonnes >1 ;

Résultat ville TotalDesSalaires NombreDesPersonnes


Fes 1800.500 2

113
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Les fonctions de groupe imbriquées (Agrégats) : Clause GROUP BY
v Règles à respecter:

vLa clause WHERE peut être utilisée pour pré-exclure des enregistrements avant la
division en groupes.

vLes colonnes de la clause SELECT qui ne sont pas inclues dans une fonction de groupe
doivent être présentes dans la clause GROUP BY.

vLes alias de colonne ne peuvent pas être utilisés dans la clause GROUP BY.

vPar défaut, la clause GROUP BY classe les enregistrements par ordre croissant.
L'ordre peut être changé en utilisant la clause ORDER BY nom_col DESC.

Langage SQL :Langage d’Interrogation des Données (LID)


q Les fonctions de groupe imbriquées (Agrégats) : Clause ORDER BY

v Cette clause permet le classement du résultat final avant d’être renvoyé

v Soit asc, ordre croissant (en anglais :ascending), par défaut.

v Soit desc, ordre décroissant (en anglais :descending)

Syntaxe :

SELECT [colonne,] FonctionGroupe(argument)


FROM Table
WHERE condition(s) ]
[ GROUP BY colonne]
[HAVING criteresDeSelectionApresRegroupement]
[ORDER BY FonctionGroupe(argument) |colonne asc |desc]

114
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Fonctions prédé-inies

vFonctions de manipulation de chaînes

vFonctions mathématiques

vFonctions de manipulation de dates

Langage SQL :Langage d’Interrogation des Données (LID)


q Fonctions prédé-inies : Fonctions de manipulation de chaînes

Fonctions Résultat renvoyé


ch1 + ch2 Concaténation de chaines (dépend du SGBD)(MySql)
ch1 || ch2
concat(ch1,ch2,. . . )
left(x,y) Renvoie y caractères de x à partir de la gauche
lower(chaine) Convertit en minuscule
ltrim(chaine) Supprime des espaces devant une colonne chaîne de
caractères (à gauche : L=left)
reverse(chaine) Renvoie l’inverse reverse("trottinette") renvoie
ettenittort
right(x,y) Renvoie y caractères de x à partir de la droite
rtrim(chaine) Supprime des espaces derrière une colonne chaîne de
caractères (à droite : R=right)

115
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Fonctions prédé-inies : Fonctions de manipulation de chaînes

Fonctions Résultat renvoyé


space(n) Renvoie une chaîne composée de n espaces
Str(valeur_numérique) Conversion d’une donnée numérique en chaîne de
caractères
char_length(chaine) donne la longueur d’une chaine en nombre de
caractères (les espaces comptent...)
upper(chaine) Convertit en majuscule
convert(ch , type) convertit une expression dans un certain type ou
convert(ch using encodage) change une valeur d’encodage (pour passer d’un
encodage à un autre)

Langage SQL :Langage d’Interrogation des Données (LID)


q Fonctions prédé-inies : Fonctions mathématiques

Fonctions Résultat renvoyé


abs(expr) Valeur absolue de l’expression
acos(expr)
Angle exprimé en radians dont le cosinus, le sinus
asin(expr)
ou la tangente est fourni
atan(expr)
cos(expr), cosinus,
sin(expr), sinus
tan(expr) ou tangente d’un angle exprimé en radians
ceiling(expr) Plus petit entier supérieur ou égal à la valeur spécifiée.
degrees(expr) Conversion de radians en degrés
exp(expr) Valeur exponentielle de la valeur spécifiée
Le plus grand entier inférieur ou égal à la valeur
floor(expr)
spécifiée

116
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Fonctions prédé-inies : Fonctions de manipulation de chaînes

Fonctions Résultat renvoyé


log(expr) Logarithme naturel de la valeur spécifiée
log10(expr) Logarithme en base 10 de la valeur spécifiée
pi() Valeur 3.1415927....
Arrondi de x avec y chiffres (X=78.4216857 round(X,2)
round(x, y)
retourne 78.42
power (x, y)
Valeur de x élevée à la puissance y
pow(x,y)
radians(expr) Conversion de degrés en radians
rand() Nombre pseudo-aléatoire entre 0 et 1
sign(expr) Signe de la valeur spécifiée

Langage SQL :Langage d’Interrogation des Données (LID)


q Fonctions prédé-inies : Manipulation des dates

v DATEPART (datepart , date) : retourne un entier qui représente la datepart précisée


de la date spécifiée.
Exemple :
SELECT DATEPART ( Weekday,'2012-08-30 19:45:31. 793 )
retourne comme resultat 5 : est le numéro de jour de la semaine.
Partie de date Abréviations Description
year yy, yyyy Année
quart qq, q Trimestre
month mm, m Mois
dayofyear dy, y Jour de l'année (1 - 365)
day dd, d Jour
weeek wk, ww Semaine
weekday dw Jour de la semaine
hour hh Heures
minute min Minutes
second ss, s Secondes
millisecond ms Millisecondes

117
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Fonctions prédé-inies : Manipulation des dates

v DATEADD (datepart , number , date) : Retourne une nouvelle valeur datetime en


ajoutant un intervalle au datepart spécifié de la date spécifiée.
Exemple :
SELECT DATEADD (DAY, 20,'2012-08-30 19:45:31. 793 )
retourne comme resultat 2012-09-19 19:45:31. 793.
v DATEDIFF ( datepart , startdate , enddate) : retourne le nombre de limites datepart
de date ou d'heure traversées entre deux dates spécifiées. Les données retournées par
cette fonction sont de type int.

Exemple :
SELECT DATEDIFF (DAY,'11/30/2015','01/31/2016' )
retourne comme resultat 62.

Langage SQL :Langage d’Interrogation des Données (LID)


q Fonctions prédé-inies : Manipulation des dates

v DATENAME ( datepart , date) : retourne une chaîne de caractères qui représente la


datepart précisée de la date spécifiée. Les données retournées par cette fonction sont
de type nvarchar.
Exemple :
SELECT DATENAME ( Weekday,'2012-08-30 19:45:31. 793 )
retourne comme resultat Jeudi(Thursday).

v DAY ( date ) : retourne un entier qui représente la partie jour de la date spécifiée. Les
données retournées par cette fonction sont de type int.

Exemple :
SELECT DAY ( '10/ 23/2016')
retourne comme resultat 23.

118
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Fonctions prédé-inies : Manipulation des dates

v MONTH ( date ) : retourne un entier qui représente la partie mois d'une date
spécifiée. Les données retournées par cette fonction sont de type int.
Exemple :
SELECT MONTH ( '10/23/2016')
retourne comme resultat 10.

v YEAR ( date ) : retourne un entier qui représente la partie année de la date spécifiée.
Les données retournées par cette fonction sont de type int.
Exemple :
SELECT DAY ( '10/ 23/2016')
retourne comme resultat 2016.

v GETDATE ( ) : retourne une valeur datetime qui contient la date et l'heure de


l'ordinateur sur lequel s'exécute l'instance de SQLServer. Les données retournées par
cette fonction sont de type datetime.

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,-

v Soit la base de données relationnelle suivante :

• Produit (numP, libP, coul, poids, PU, Qtes): Désigne l’ensemble des produits.

• Client(nuCl,nomCl, adrCl) : Désigne l’ensemble des clients.

• Commande (numCmd, DateCmd, #numCl) : Désigne l’ensemble des commandes.

• Ligne_Cmd (#numCmd, #numP, Qte) : Désigne l’ensemble des lignes de


commandes.

119
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,-

v Soit la base de données relationnelle suivante :

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,-

v Effectuer une sous-requête consiste à effectuer une requête à l’intérieur d'une autre,
ou en d'autres termes d'utiliser une requête afin d’en réaliser une autre (on entend
parfois le terme de requêtes en cascade).

v Une sous-requête doit être placée à la suite d’une clause WHERE ou HAVING, et doit
remplacer une constante ou un groupe de constantes qui permettraient en temps
normal d'exprimer la qualification.

v lorsque la sous-requête remplace une constante utilisée avec des opérateurs


classiques, elle doit obligatoirement renvoyer une seule réponse (une table d'une ligne
et une colonne).
Par exemple :
SELECT ... FROM ...WHERE ...<(SELECT ... FROM ...) ;

120
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,-

v Une sous-requête est une requête incluse dans une autre requête(principale), i.e., la
requête principale utilise le résultat de la sous-requête

v Les sous-requêtes sont utilisables dans les clauses :

• SELECT(à condition que pour chaque ligne sélectionnée par la requête principale,
on ne sélectionne qu’une ligne dans la sous-requête)

• FROM (à condition de renommer le résultat)

• Clause WHERE et HAVING.

v Problème : le résultat des requêtes est variable en termes de tuples et d’attributs

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,-

v le résultat des requêtes est variable en termes de tuples et d’attributs

• Scalaire

• Multi-lignes (ou Colonne)

• Multi-colonnes (ou Ligne).

• Multi-lignes et multi-colonnes (ou Table).

• Corrélées.

121
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,-
v le résultat des requêtes est variable en termes de tuples et d’attributs
Elève Candidature
idE nomEleve MoyenneLycee effectifLycee idE nomE departement décision
123 chaoui 19.5 1000 123 FSR Informatique O
234 khaldi 18 1500
SQL 123 INPT Electronique N
345 redouani 17.5 500 123 INPT Informatique O
456 salami 19.5 1000 123 INSA Electronique O
543 salhi 17 2000 234 FSR Biologie N
Tableau 1. Données de la table livre
567 saadi 14.5 2000 345 FSTF BioInformatique O
isbn titre genre date_ langue nb_pages preface prix code_zone
654 alaoui 19.5 1000
parution 345 INSA BioInformatique N
678 Mellouli 19 200 345 INSA Electronique N
128-5-56985-5765Fall ofRaoui
giants 14.5 historique 1500
2010 anglais 255 oui 36.00 c18
345 INSA Informatique O
952-5-15632-0 Un bunker à la Baule roman 2008 francais 226 non 13.00 c10
789 Hakimi 17 800 543 FSTF Informatique N
320-2-02365-5 Le bourgeois gentilhomme theatre 1670 francais 152 NULL 5.00 c8
876 slaoui 19.5 400 678 INPT Telecom O
152-5-55695-2 Le seigneur des anneaux fantastique 1954 francais 832 non 39.00 c8
523-5-65472-9898DavidIraqui
Copperfield 18.5 roman 800
1850 anglais 458 765
oui INPT
29.00 s8 Telecom O
320-2-02225-6 Amphitryon theatre 1668 francais 120 756
oui FSTF
4.00 s8 Physique N
212-2-22548-5 Etablissement fantastique
La magie de la peur 2008 francais 210 765
non FSTF
39.00 s11 Psycologie O
215-5-98745-3nomE
Caught ville effectif policier 2009 anglais 127 oui
876 15.00
INPT c18 Informatique N
FSR Rabat 36000
Tableau 2. Données de la table zone 876 FSTF Biologie O
INPT Rabat 15000
code_zone piece meuble 876 FSTF Biologie Marine N
c10 FSTF Fes 10000 chambre Armoire en898
pin FSR Informatique O
c18 INSA Kenitra 20000 chambre Armoire grise
898 INPT Informatique O
c20 chambre Bibliothèque noire
c8 chambre Commode
s11 salon Bibliothèque bleue
s8 salon Buffet en chêne
v7 veranda Etagère

Cet article sera illustré par l'exemple d'une bibliothèque

Langage SQL :Langage d’Interrogation des Données (LID)


(Figure 1) dont les données insérées dans les tables
livre et zone sont celles des Tableaux 1 et 2.

Sous-requête scalaire
q Sous req)ê+,- ∶ /012134,
Dans une sous-requête scalaire le résultat de la sous-
requête comporte une seule et unique valeur. Elle
consiste souvent à effectuer une opération statistique
v Retourne une seule valeur (une ligne et une colonne (attribut))
qui retourne un unique résultat : moyenne, minimum,
maximum, somme, etc (Tableau 3). Ce résultat peut
être utilisé dans une comparaison, dans la restriction
de la requête S’utilise
vprincipale (généralement)
(Figure 2). là où une requête attend un nom d’attribut ou une constante.
Reprenons l’exemple de l’extraction des livres dont
le prix est supérieur au prix moyen. Vous avez vu que
deux requêtesv On peutd’obtenir
permettent utiliser la sous-requête
le résultat. La pre- Figurescalaire dansde latrois
1. Extrait du schéma base declauses (WHERE, FROM, SELECT)
données biblio
mière calcule le prix moyen, la seconde utilise le résul-
tat du calcul (22,5 euros) pour extraire l’information :

SELECT AVG(prix) FROM livre;


SELECT titre, prix FROM livre
WHERE prix > 22.5;

Les deux requêtes peuvent être combinées. Dans la re-


quête qui extrait les livres satisfaisant la condition, le
nombre 22,5 peut être remplacé par la requête qui cal-
cule la moyenne des prix :

SELECT titre, prix FROM livre


Exemple de requête scalaire :
WHERE prix > (SELECT AVG(prix) FROM livre);
Figure 2. Sous-requête scalaire
SELECT nomEleve nomEleve
www.phpsolmag.org
FROM Eleve
39
Chaoui
WHERE idE=123;

122
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶ /012134,

v Exemple de sous-requête scalaire dans la clause WHERE

nomE ville effectif


FSR Rabat 36000
INPT Rabat 15000
FSTF Fes 10000
INSA Kenitra 20000

Exemple : Les établissements qui sont dans la même ville que INPT
nomE ville effectif
FSR Rabat 36000
SELECT * INPT Rabat 15000
FROM E

WHERE ville = (SELECT ville FROM E WHERE nomE =‘INPT’);

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶ /012134,

v Exemple de sous-requête scalaire dans la clause FROM

nomE ville effectif


FSR Rabat 36000
INPT Rabat 15000
FSTF Fes 10000
INSA Kenitra 20000

Exemple : Les établissements qui sont dans la même ville que INPT
nomE ville effectif ville
FSR Rabat 36000 Rabat

SELECT * INPT Rabat 15000 Rabt

FROM E, (SELECT ville FROM E WHERE nomE =‘INPT’) villeINPT

WHERE E.ville =villeINPT.ville;

123
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶ /012134,
v Exemple de sous-requête scalaire dans la clause SELECT

nomE ville effectif


FSR Rabat 36000
INPT Rabat 15000
FSTF Fes 10000
INSA Kenitra 20000

Exemple : Pour chaque établissement de Rabat, la différence d’effectif avec


l’établissement INSA
nomE Diff
FSR 16000
INPT -5000
SELECT nomE,
(effectif –(SELECT effectif FROM E WHERE E.nomE=‘INSA’)) AS Diff
FROM E
WHERE E.ville = ‘Rabat’;

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶ /)0+1 − 0134,- (6) 760644,)

v Retourne plusieurs tuples/lignes (une colonne portant plusieurs valeurs)


Fiche technique
v Nécessite des opérateurs (par exemple pour comparer une valeur avec toutes celles
retournées par la sous-requête) Dans une même requête il est pos
sieurs sous-requêtes. Par exemple, l
affiche la différence de prix par rapp
pour les livres dont le prix est supérie

SELECT titre, prix - (SELECT AV


livre) AS diff FROM livre
WHERE prix > (SELECT AVG(prix)

Le résultat d’une sous-requête n’est


impossible de lui attribuer un alias p
est donc nécessaire de répéter la so
cule la moyenne : une fois dans le ca
ce, une fois dans la restriction.

Figure 3. Sous-requête colonne Sous-requête colonne


Exemple : requête retourne plusieurs lignes (ou colonne portant plusieurs valeurs) Une sous-requête colonne renvoie
portant plusieurs valeurs (Figure 3)
SELECT nomE nomE entre une valeur de la requête exte
valeurs retournées par la sous-requê
FROM E FSR des opérateurs de comparaison mult

WHERE ville = ‘Rabat’; INPT Opérateur IN / NOT IN


L’opérateur de comparaison multi-l
vrai si la valeur à gauche de l’opéra
la liste des valeurs placée à droite d
IN (val1, val2, ...). Utilisé da
il permet de sélectionner les lignes d
Figure 4. Sous-requête ligne champ est incluse dans la liste. Par e
ci-après affiche le titre des livres do
La requête interne (sous-requête) doit être placée entre man, théâtre ou fantastique :
parenthèses. Quand elle est utilisée dans une comparai-
son, comme c’est le cas dans cet exemple, elle doit obli- SELECT titre FROM livre WHERE
gatoirement apparaître du côté droit de l’opérateur. La
requête interne est toujours exécutée en premier, sauf
124
genre IN ('roman', 'fantastique

si la requête est corrélée (cf Sous-requête corrélée). Le Elle est équivalente à la requête :
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶ /)0+1 − 0134,-(6) 760644,)

v Opérateurs pour sous-requêtes multi-lignes

v Attribut Opérateur ANY(sous_requete) avec Opérateur parmi {=,<,>,<=,>=, !=}

• vrai s’il existe un b parmi les lignes renvoyées par sous_requete tel que :
Attribut Opérateur b soit vrai.

v Attribut [NOT] IN(sous_requete)

• vrai si la valeur de Attribut apparaît dans le résultat sous_requete (ou n’apparaît


pas dans le cas NOT IN)

• IN est équivalent à = ANY

• NOT IN est équivalent à ! = ANY

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶ /)0+1 − 0134,-(6) 760644,)

v Opérateurs pour sous-requêtes multi-lignes

v Attribut Opérateur ALL(sous_requete) avec Opérateur parmi {=,<,>,<=,>=, !=}

• vrai si pour toutes les lignes b renvoyées par sous_requete


Attribut Opérateur b est vrai.

v [NOT] EXISTS(sous_requete)

• vrai si sous_requete retourne au moins un tuple résultat (ou ne retourne pas de


tuple dans le cas du NOT EXISTS)

• s’utilise principalement avec sous-requêtes corrélées

125
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


idE nomE departement décision
q Sous req)ê+,- ∶ /)0+1 − 0134,-(6) 760644,)
123 FSR Informatique O
idE nomEleve MoyenneLycee effectifLycee
123 INPT Electronique N
123 INPT Informatique O
123 chaoui 19.5 1000
123 INSA Electronique O
234 khaldi 18 1500
234 FSR Biologie N
345 redouani 17.5 500 Elève
345 FSTF BioInformatique O
456 salami 19.5 1000
345 INSA BioInformatique N
543 salhi 17 2000
345 INSA Electronique N
567 saadi 14.5 2000
345 INSA Informatique O
654 alaoui 19.5 1000
543 FSTF Informatique N
678 Mellouli 19 200
678 INPT Telecom O
765 Raoui 14.5 1500
765 INPT Telecom O
789 Hakimi 17 800
756 FSTF Physique N
876 slaoui 19.5 400
765 FSTF Psycologie O
898 Iraqui 18.5 800
876 INPT Informatique N
nomE ville effectif 876 FSTF Biologie O
FSR Rabat 36000 876 FSTF Biologie Marine N
INPT Rabat 15000 898 FSR Informatique O
FSTF Fes 10000 898 INPT Informatique O
INSA Kenitra 20000 Etablissement
Candidature
Exemple : Les élèves qui ont candidaté à Rabat

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶ /)0+1 − 0134,-(6) 760644,)

Exemple : Les élèves qui ont candidaté à Rabat

SELECT C.idE, nomEleve


FROM Eleve NATURAL JOIN C
WHERE nomE IN (SELECT nomE FROM E WHERE ville =‘Rabat');

idE nomEleve
123 Chaoui
234 Khaldi
678 Mellouli
765 Raoui
876 Slaoui
898 Iraqui

126
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


idE nomE departement décision
q Sous req)ê+,- ∶ /)0+1 − 0134,-(6) 760644,)
123 FSR Informatique O
idE nomEleve MoyenneLycee effectifLycee
123 INPT Electronique N
123 INPT Informatique O
123 chaoui 19.5 1000
123 INSA Electronique O
234 khaldi 18 1500 Elève 234 FSR Biologie N
345 redouani 17.5 500
345 FSTF BioInformatique O
456 salami 19.5 1000
345 INSA BioInformatique N
543 salhi 17 2000
345 INSA Electronique N
567 saadi 14.5 2000
345 INSA Informatique O
654 alaoui 19.5 1000
543 FSTF Informatique N
678 Mellouli 19 200
678 INPT Telecom O
765 Raoui 14.5 1500
765 INPT Telecom O
789 Hakimi 17 800
756 FSTF Physique N
876 slaoui 19.5 400
765 FSTF Psycologie O
898 Iraqui 18.5 800
876 INPT Informatique N
nomE ville effectif 876 FSTF Biologie O
FSR Rabat 36000 876 FSTF Biologie Marine N
INPT Rabat 15000 898 FSR Informatique O
FSTF Fes 10000 Etablissement 898 INPT Informatique O
INSA Kenitra 20000 Candidature

Exemple : La ou les établissements qui ont le plus grand effectif

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶ /)0+1 − 0134,-(6) 760644,)

Exemple : La ou les établissement qui ont le plus grand effectif

SELECT *
FROM E
WHERE effectif >= ALL (SELECT effectif FROM E );

nomE ville effectif


FSR Rabat 36000

127
17/03/2020

Fiche technique

Dans une même requête il est possible d’utiliser plu-


sieurs sous-requêtes. Par exemple, la requête suivante
Langage SQL :Langage d’Interrogation des Données (LID) affiche la différence de prix par rapport au prix moyen
pour les livres dont le prix est supérieur à la moyenne :

SELECT titre, prix - (SELECT AVG(prix) FROM


q Sous req)ê+,- ∶ /)0+1 − 340455,- (4) 0175,) livre) AS diff FROM livre
WHERE prix > (SELECT AVG(prix) FROM livre);
v Retourne plusieurs attributs/colonnes
Le résultat d’une sous-requête n’est pas pérenne, il est
impossible de lui attribuer un alias pour le réutiliser. Il
v Nécessite de former un tuple noté (attribut1, attribut2, ...) qui sera comparé
est donc avec
nécessaire de lela sous-requête qui cal-
répéter
cule la moyenne : une fois dans le calcul de la différen-
résultat de la sous-requête ce, une fois dans la restriction.

v Le tuple doit avoir autant d’attributs quecolonne


Figure 3. Sous-requête le résultat de la sous-requê te
Sous-requête colonne
Une sous-requête colonne renvoie une colonne com-
portant plusieurs valeurs (Figure 3). La comparaison,
entre une valeur de la requête externe et la liste des
valeurs retournées par la sous-requête, est réalisée via
des opérateurs de comparaison multi-lignes.

Opérateur IN / NOT IN
L’opérateur de comparaison multi-lignes IN retourne
vrai si la valeur à gauche de l’opérateur fait partie de
la liste des valeurs placée à droite de l’opérateur : val
IN (val1, val2, ...). Utilisé dans une restriction,
il permet de sélectionner les lignes dont la valeur d’un
Exemple : requête retourne plusieurs colonnes
Figure 4. Sous-requête ligne champ est incluse dans la liste. Par exemple, la requête
ci-après affiche le titre des livres dont le genre est ro-
SELECT nomE, ville La requête interne (sous-requête) doit être placée entre man, théâtre ou fantastique :
parenthèses. Quand elle est utilisée dans une comparai-
FROM E son, comme c’est le cas dans cet exemple, nomEelle doit obli-ville
SELECT titre FROM livre WHERE
gatoirement apparaître du côté droit de l’opérateur. La genre IN ('roman', 'fantastique', 'theatre');
requête interne est toujours exécutée en FSTF
premier, saufFes
WHERE ville = ‘Fes’; si la requête est corrélée (cf Sous-requête corrélée). Le Elle est équivalente à la requête :
résultat obtenu est utilisé dans la requête externe (princi-
pale) qui est donc exécutée en dernier. Il peut y avoir plu- SELECT titre FROM livre WHERE
sieurs sous-requêtes imbriquées dans une requête. Elles genre = 'roman' OR genre = 'fantastique' OR
seront exécutées de la plus interne à la plus externe. genre = 'theatre';
Les sous-requêtes peuvent être utilisées dans diffé-
rentes parties d’une requête SELECT externe : dans les Précédé par la négation NOT, l’opérateur IN retourne
clauses de restriction WHERE et HAVING, après le FROM vrai lorsque la valeur du champ ne fait pas partie de la
(cf. section sous-requête FROM), et dans une expres- liste. Par exemple, la requête ci-après retournera les ti-

Langage SQL :Langage d’Interrogation des Données (LID) sion créant une colonne dérivée. Par exemple, il est tres des livres dont le genre ne fait pas partie de ceux
possible de créer une colonne qui affiche la différence listés, c’est-à-dire uniquement les livres dont le genre
de prix par rapport au prix moyen pour tous les livres de est historique ou policier dans l’exemple du Tableau 1 :
la table :
idE nomE departementSELECT titredécision
q Sous req)ê+,- ∶ /)0+1 − 340455,-(4) 0175,) FROM livre WHERE
123 AVG(prix)
SELECT titre, prix - (SELECT FSR Informatique
FROM genre NOT INO('roman', 'fantastique',
idE nomEleve MoyenneLycee effectifLycee
123
livre) AS diff FROM livre; INPT Electronique
'theatre'); N

123 INPT Informatique O


123 chaoui 19.5 1000 Le prix moyen calculé par la sous-requête (22,5 euros) L’opérateur IN peut être utilisé pour comparer une va-
est soustrait à chaque prix123 INSA
de livre Electronique
et le résultat O externe avec la liste des valeurs retour-
de leur de la requête
234 khaldi 18 1500 Elève 234 la colonne
cette opération est affiché dans FSR Biologie
dérivée N
in- nées par une sous-requête colonne. Par exemple, il per-
345 redouani 17.5 500 titulée diff. met de répondre à la question « afficher la liste des livres
345 FSTF BioInformatique O
456 salami 19.5 1000
345 INSA BioInformatique N
543 salhi 17 2000 40 3/2011
345 INSA Electronique N
567 saadi 14.5 2000
345 INSA Informatique O
654 alaoui 19.5 1000
543 FSTF Informatique N
678 Mellouli 19 200
678 INPT Telecom O
765 Raoui 14.5 1500
765 INPT Telecom O
789 Hakimi 17 800
756 FSTF Physique N
876 slaoui 19.5 400
765 FSTF Psycologie O
898 Iraqui 18.5 800
876 INPT Informatique N
nomE ville effectif 876 FSTF Biologie O
FSR Rabat 36000 876 FSTF Biologie Marine N
INPT Rabat 15000 898 FSR Informatique O
FSTF Fes 10000 Etablissement 898 INPT Informatique O
INSA Kenitra 20000 Candidature

Exemple : Les établissements avec même ville et même effectif que INPT

128
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶ /)0+1 − 340455,-(4) 0175,)

Exemple : Les établissements avec même ville et même effectif que INPT

SELECT *
FROM E
WHERE (ville, effectif )= (SELECT ville, effectif FROM E WHERE nomE=‘INPT’);

nomE ville effectif


INPT Rabat 15000

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶ /)0+1 − 0134,- ,+ /)0+1 − 560644,- (6) +890,)

v Une sous-requête peut également retourner une table : plusieurs lignes et plusieurs
colonnes. La comparaison se fait sur chaque ligne et chaque colonne. Ces sous-
requêtes sont généralement utilisées pour extraire les lignes correspondant à des
Fiche technique
maxima ou des minima dans des regroupements.

Figure 5. Sous-requête table

prix maximal pour chaque genre (un prix par genre). La


SELECT titre FROM livre requête externe ne retient que les livres dont le prix et le
WHERE (langue, genre) = genre correspondent à une des lignes retournée par la
(SELECT langue, genre FROM livre WHERE titre requête interne. C’est-à-dire qu’elle affiche les titres des
= 'Le Bourgeois Gentilhomme'); livres dont le prix est maximal pour chaque genre, ici six
livres dont deux de type fantastique qui sont au même
Sous-requête table prix (39€) et apparaîtront donc tous les deux :
Une sous-requête peut également retourner une ta-
ble : plusieurs lignes et plusieurs colonnes (Figure 5). SELECT genre, titre, prix FROM livre
La comparaison se fait sur chaque ligne et chaque co- WHERE (prix, genre) IN
lonne. Ces sous-requêtes sont généralement utilisées (SELECT MAX(prix), genre FROM livre GROUP BY

129
pour extraire les lignes correspondant à des maxima ou genre);
des minima dans des regroupements.
Il est possible de regrouper des lignes en fonction Sous-requête corrélée
d’une ou plusieurs valeurs de champs en utilisant la Dans les sous-requêtes étudiées jusqu’à présent, les
clause GROUP BY. Des fonctions statistiques peuvent colonnes de la requête interne faisaient toutes partie
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶ /)0+1 − 0134,- ,+ /)0+1 − 560644,-

v Dans ce cas, il faut utiliser à la fois un opérateur (multi-lignes) et former un tuple


(multi-colonnes)

Exemple : Les élèves qui ont candidaté dans la même établissement et le

même département que l’élève 123

SELECT idE, nomE, département


FROM C
WHERE idE<>123 AND (nomE, département ) =ANY (SELECT nomE, département
FROM C
idE nomE departement
WHERE idE=123);
345 INSA Electronique
876 INPT Informatique
898 FSR Informatique
898 INPT Informatique

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶ Corrélée

v Une sous-requête corrélée (liée ou synchronisée)est une sous-requête qui possède


une référence (alias) à une colonne d’une table qui se trouve dans la requête
principale.
v Il est nécessaire de renommer la table externe avec un alias, si elle est également
utilisée dans la requête interne, sinon il suffit de préfixer la colonne par le nom de la
table externe.

v S’utilise principalement avec [NOT] EXISTS

Exemple de corrélation :

SELECT *

FROM E aliasE

WHERE EXISTS (SELECT * FROM C aliasC WHERE aliasC.idE=aliasE.idE);

130
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


idE nomE departement décision
q Sous req)ê+,- ∶Corrélée
123 FSR Informatique O
idE nomEleve MoyenneLycee effectifLycee
123 INPT Electronique N
123 INPT Informatique O
123 chaoui 19.5 1000 Elève
123 INSA Electronique O
234 khaldi 18 1500
234 FSR Biologie N
345 redouani 17.5 500
345 FSTF BioInformatique O
456 salami 19.5 1000
345 INSA BioInformatique N
543 salhi 17 2000
345 INSA Electronique N
567 saadi 14.5 2000
345 INSA Informatique O
654 alaoui 19.5 1000
543 FSTF Informatique N
678 Mellouli 19 200
678 INPT Telecom O
765 Raoui 14.5 1500
765 INPT Telecom O
789 Hakimi 17 800
756 FSTF Physique N
876 slaoui 19.5 400
765 FSTF Psycologie O
898 Iraqui 18.5 800
876 INPT Informatique N
nomE ville effectif 876 FSTF Biologie O
FSR Rabat 36000 876 FSTF Biologie Marine N
INPT Rabat 15000 Etablissement 898 FSR Informatique O
FSTF Fes 10000 898 INPT Informatique O
INSA Kenitra 20000 Candidature

Exemple : Les établissements qui ont des candidatures

Langage SQL :Langage d’Interrogation des Données (LID)


q Sous req)ê+,- ∶Corrélée

Exemple : Les établissements qui ont des candidatures

SELECT e.nomE
FROM Ee
WHERE EXISTS (SELECT * FROM C c WHERE c.nomE=e.nomE);

nomE
FSR
INPT
FSTF
INSA

131
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


Exemple :
Soit le schéma suivant :
• Emp(numEmp, nom, prenom, numSup, titre, salaire, comm, #numDep)
• Dep(numDep, nom, numRegion)

v Rechercher le nom et le salaire des employés qui gagnent plus que leur patron, et le
nom et le salaire de leur patron.

SELECT E.nom, E.salaire, P.nom, P.salaire


FROM Emp E,Emp P
WHERE E.numSup = P.numEmp AND E.salaire > P.salaire ;

v Rechercher le nom et le salaire des employés qui gagnent plus que « Khaldi », et le
nom et le salaire de « Khaldi ».
SELECT X.nom, X.salaire, Y.nom, Y.SALAIRE
FROM Emp X, Emp Y
WHERE X.salaire > Y.salaire AND Y.NOM = ‘Khaldi';

Langage SQL :Langage d’Interrogation des Données (LID)


Exemple :
Soit le schéma suivant :
• Emp(numEmp, nom, prenom, numSup, titre, salaire, comm, #numDep)
• Dep(numDep, nom, numRegion)
v Rechercher le nom, le salaire et le numéro de département des employés qui
gagnent plus qu'un seul employé du département 31, classés par numéro de
département et salaire.
SELECT Nom, salaire, numDep
FROM Emp
WHERE salaire > ANY (SELECT salaire FROM Emp WHERE numDep = 31)
ORDER BY numDep, salaire;
v Rechercher le nom, le salaire et le numéro de département des employés qui
gagnent plus que tous les employés du service 31, classés par numéro de
département et salaire.
SELECT Nom, salaire, numDep
FROM Emp
WHERE salaire > ALL (SELECT salaire FROM Emp WHERE numDep = 31)
ORDER BY salaire, numDep;

132
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


Exemple :
Soit le schéma suivant :
• Emp(numEmp, nom, prenom, numSup, titre, salaire, comm, #numDep)
• Dep(numDep, nom, numRegion)
v Rechercher le nom et le titre des employés du service 31 qui ont un titre que l'on
trouve dans le service 32.
SELECT nom, titre
FROM Emp
WHERE numDep = 31 AND titre IN (SELECT titre FROM Emp
WHERE numDep = 32)

v Rechercher le nom et le titre des employés du service 31 qui ont un titre l'on ne
trouve pas dans le service 32.

SELECT nom, titre


FROM Emp
WHERE numDep = 31 AND titre NOT IN (SELECT titre FROM Emp
WHERE numDep = 32)

Langage SQL :Langage d’Interrogation des Données (LID)


Exemple :
Soit le schéma suivant :
• Emp(numEmp, nom, prenom, numSup, titre, salaire, comm, #numDep)
• Dep(numDep, nom, numRegion)
v Rechercher le nom, le titre et le salaire des employés qui ont le même titre et le
même salaire que « Redouani ».
SELECT nom, titre, salaire
FROM Emp
WHERE (titre, salaire) = (SELECT titre, salaire
FROM Emp
WHERE nom = ‘Redouani')
v Rechercher le numéro de département, le nom et le salaire des employés qui
gagnent plus que la moyenne de leur département, classés par département.
SELECT numDep, nom, salaire
FROM Emp E
WHERE salaire>(SELECT AVG(SALAIRE)FROM Emp WHERE numDep=E.numDep)
ORDER BY numDep;

133
17/03/2020

Langage SQL :Langage d’Interrogation des Données (LID)


Exemple :
Soit le schéma suivant :
• Emp(numEmp, nom, prenom, numSup, titre, salaire, comm, #numDep)
• Dep(numDep, nom, numRegion)
v Rechercher le numéro d'employé, le nom, le prénom des employés pour lesquels il
existe au moins un Representant dans leur département.
SELECT numEmp, nom, prenom
FROM Emp E
WHERE EXISTS (SELECT NULL FROM Emp
WHERE titre='Representant'
AND numDep = E.numDep)
v Rechercher le numéro de département, le nom du département dans lesquels il n'y a
aucun employé.
SELECT numDep, nom AS "Dept"
FROM Dep
WHERE numDep NOT IN (SELECT Dep.numDep
FROM Emp, Dep
WHERE Emp.numDep = Dep.numDep);

134

Vous aimerez peut-être aussi