Académique Documents
Professionnel Documents
Culture Documents
2021-2022
MSRII-MPRAD
Plan du cours
Chapitre I. Base de données relationnelles
2
Plan du cours
Chapitre I. Base de données relationnelles
I. Base de données
II. Système de Gestion de Base de Données
III. SQL : Structured Query Language
IV. Les schémas en SQL
3
Chapitre 1 : Base de données relationnelle(Rappel)
4
Bases de Données
Un ensemble de données structurées modélisant les objets d’une partie du monde réel
avec le moins de redondance possible
Indépendante de l’application et de langage de programmation
Accessible par un LMD
Stockage et mise à jour de données
Recherche de données multi-critères
Partagées par de multiples utilisateurs
Assurant la fiabilité et sécurité des données
Gérée par un SGBD (DBMS)
5
Objectifs des bases de données
6
SGBD (DBMS)
7
Evolution des SGBD
8
Depuis 1995…
Bases de données et web
• Etendre les possibilités des SGBD pour répondre aux applications fonctionnant dans
l’environnement web
•Accès distant au contenu des BD
• Fédération et inter-opération des BD
• Transformations des données et des requêtes
9
Depuis 1995…
Bases de données objet :
• Intégrer les concepts objets dans les SGBD (classe, objet)
10
SGBD (DBMS)
Principales fonctionnalités :
• Contrôle de la redondance d’information
•Partage des données et confidentialité
• Gestion des accès concurrents
• Vérifications des contraintes d’intégrité
• Sécurité et reprise sur panne
• Indépendance des données: Niveau physique, logique et externe (vue)
11
SQL
SQL « Structured Query Language » est inventé à IBM San Jose, 1974 (Boyce &
Chamberlin) pour System R
Le langage standard de SGBD relationnels DB2, Oracle, Informix, Ingres,..
Il existe plusieurs dialectes SQL
Chacun de ces SGBDR a sa propre variante du langage
Normes SQL
En évolution contrôlée par ANSI (SQL1, 2, 3...)
SQL a été normalisé dès 1986 mais les premières normes, trop incomplètes, ont été
ignorées par les éditeurs de SGBD.
La norme SQL2 (SQL92) est respectée par les SGBD relationnels qui dominent
actuellement le marché.
Elle définit trois niveaux :
• Full SQL (ensemble de la norme)
• Intermediate SQL
• Entry Level (ensemble minimum à respecter pour se dire à la norme SQL2)
12
SQL
SQL3 (SQL99) est la nouvelle norme SQL.
13
Définition d’un schéma en SQL2
CREATE SCHEMA [nom_du_schéma]
[AUTHORIZATION utilisateur]
[Liste des éléments du schéma] ;
La clause AUTHORIZATION précise le nom du créateur. Une des deux premières zones doit
obligatoirement intervenir. Si le nom du schéma n'est pas indiqué, le nom du créateur devient le
nom du schéma.
La dernière clause est facultative et permet de définir les divers éléments du schéma, ils ne doivent
pas être définis tous au même moment :
les domaines,
les tables,
les vues,
les contraintes,
les permissions d'accès au schéma, etc.
14
Suppression d’un schéma en SQL2
15
Définition de table en SQL2
• Définition de table en SQL2
CREATE TABLE <nom de table>
(Définition d’attributs [, Définition d’attributs]…) ;
où Définition d’attributs :
<nom attribut> <Type de donnée et sa longueur> [ [NOT] NULL | PRIMARY KEY | … ]
18
Exemple de BDD :
EMPLOYE (Nom, Prenom , NoSS, Date_NAISS, ADRESSE, SEXE, SALAIRE,
NoSSSUPER, NoSce)
19
Création des tables
> CREATE TABLE EMPLOYE (
Nom varchar (15) not null,
Prenom varchar (15) not null,
NoSS char(13) not null,
Date_NAISS date,
ADRESSE varchar(30),
SEXE char,
SALAIRE decimal(10,2),
NoSSSUPER char(13),
NoSce int not null,
PRIMARY KEY (NoSS),
FOREIGN KEY (NoSSSUPER) REFERENCES EMPLOYE(NoSS),
FOREIGN KEY (NoSce) REFERENCES SERVICE(NoSCE)
); 20
Création des tables
> CREATE TABLE SERVICE (
Nom_SCE varchar (15) not null,
NoSce INT not null,
NoSSDIR char(13) NOT NULL,
DATEDEBDIR DATE,
PRIMARY KEY (NoSce),
UNIQUE (Nom_SCE),
FOREIGN KEY (NoSSDIR) REFERENCES EMPLOYE(NoSS)
);
21
Suppression et modification des tables
Suppression de table
Il est possible à tout instant de supprimer une relation de base.
DROP TABLE <nom de table> ;
Cette commande efface tous les tuples de la table, élimine la définition de la table du dictionnaire,
de même que les index à cette table et ses privilèges.
22
Exemple
Exemple :
23
Les chemins d’accès
Les chemins d’accès
A l'administrateur de demander au système la création des chemins d'accès sur les
relations stockées et au système de choisir parmi les chemins disponibles celui qui
est le plus adéquat pour l’exécution d’une requête d’interrogation.
CREATE [UNIQUE] INDEX <nom index> ON <nom de relation> (<nom attribut>
[ORDRE] [ , <nom attribut> [ORDRE] ... ] ) ;
où ORDRE est soit ASC (ascendant) ou DESC (descendant) et s'il n'est pas spécifié,
l'ordre ASC est pris par défaut.
L'option UNIQUE permet d'une part de définir qu'un attribut (ou un groupe
d'attributs) est clé discriminante de la relation et d'autre part de fournir un chemin
d'accès direct aux n-uplets ayant une valeur de clé donnée.
Exemple :
Si on n’a pas défini auparavant «PRIMARY KEY (NoSS) »
24
CREATE UNIQUE INDEX XNoSS ON EMPLOYE (NoSS) ;
Requête d’interrogation SQL 2 :
3. Requête d’interrogation SQL 2 :
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
;
25
Requête d’interrogation SQL 2 :
SELECT <liste d’attributs>
FROM <noms de relations>
[Where < condition>] ;
27
Exemples
Exemples: « Donner les numéros des employés de ‘tunis’ qui ont un NoSce supérieur à 10 » :
SELECT NoSS
FROM EMPLOYE
WHERE ADRESSE = tunis
AND NoSce > 10 ;
• comparaison à une valeur
SELECT NoSS
FROM EMPLOYE
WHERE NOT ( ADRESSE= bizerte ) ;
comparaison à une fourchette de valeurs :
« liste des employés dont NoSce est compris entre 10 et 15 »
SELECT NOM
FROM EMPLOYE
WHERE
28 NoSce BETWEEN 10 AND 15 ;
Exemples
Comparaison à une liste de valeurs
SELECT NOM
FROM EMPLOYE
WHERE ADRESSE IN (Sfax , Tunis ) ;
Comparaison à un filtre
% n’importe quelle séquence de zéro ou plusieurs caractères.
_ un seul caractère quelconque
SELECT NOM FROM EMPLOYE
WHERE ADRESSE LIKE Tun% ;
Sélection sur l’indétermination d’un attribut :
« rechercher tous les employés pour lesquels on a négligé d’encoder le salaire »
SELECT NOM FROM EMPLOYE
WHERE SALAIRE IS NULL ;
29
Attribut indéterminé
Il existe des données qui,
- soient ne s’appliquent pas dans le cas du tuple (tel que le nom de l’époux pour une personne
célibataire),
Par exemple, dans la base de données des employés, si on veut retrouver ceux possédant un salaire
inférieur à la moyenne, et que, à l’encodage, lorsque le salaire n’est pas connu, on met la valeur 0,
tous ceux avec un salaire inconnu seront sélectionnés.
Pour éviter ce genre d’imprécisions, SQL prévoit un flag associé à chaque attribut, pour spécifier si
l’attribut a été ou non initialisé. S’il ne l’a pas été, l’attribut prend la valeur indéterminée NULL.
30
Order by
L’ordre peur être spécifié par ORDER BY <nom_attribut> ASC / DESC, <nom_attribut>
ASC /DESC …
Et l’ordre de gauche à droite des noms_attributs signifie un tri du majeur au mineur.
« Donner les numéros et les noms des employés de ‘Monastir’ dans un ordre descendant du salaire »
SELECT NoSS, NOM
FROM EMPLOYE
WHERE ADRESSE = Monastir
ORDER BY SALAIRE DESC ;
31
Recherche complexe
Recherche complexe SQL utilise les opérateurs d’appartenance IS IN (ou IN), IS NOT IN (ou NOT IN) en
imbriquant des blocs de SELECT.
« Donner les noms des employés qui travaillent dans le service de nom ‘finances’ »
SELECT NOM
FROM EMPLOYE
WHERE NoSce IS IN ( SELECT NoSce
FROM SERVICE
WHERE NOM_SCE = finances) ;
référence inter_bloc
« Donner les noms des employés qui ne travaillent pas dans le service dont le supérieur est directeur de ce service »
SELECT NOM
FROM EMPLOYE
WHERE NoSce NOT IN
( SELECT NoSce
FROM SERVICE
WHERE NoSSDIR = EMPLOYE.NoSSSUPER ) ;
32
Recherche complexe
Imbrication des blocs SELECT en faisant intervenir la même relation.
« Donner les numéros des employés travaillant au moins dans un service que l’employé ‘N1000’
SELECT NoSS FROM EMPOYE
WHERE NoSce IN
( SELECT NoSce
FROM EMPLOYE
WHERE NoSS = N1000) ;
Il est parfois utile d’introduire des variables synonymes pour lever certaines ambiguïtés.
« Donner tous les noms des employés travaillant dans plus d’un service »
SELECT DISTINCT NOM
FROM EMPLOYE X , EMPLOYE Y
WHERE (X.NoSS = Y.NoSS) and (X.NoSce <> Y.NoSce ) ;
ou bien
SELECT DISTINCT NOM
FROM EMPLOYE X JOIN EMPLOYE Y ON
33 (X.NoSS = Y.NoSS) and( X. NoSce <> Y. NoSce ) ;
Recherche complexe
Pour exprimer la division SQL utilise une recherche avec NOT EXISTS
« Donner les noms des employés qui ne travaillent pas dans le service ’finances’ » :
SELECT NOM
FROM EMPLOYE
WHERE NOT EXISTS
(SELECT *
FROM SERVICE
WHERE NoSce = EMPLOYE .NoSce
AND NOM_SCE = ‘finances’);
34
SQL & les opérateurs ensemblistes
Exemple:
« Donner les numéros des services dans lesquels ne travaillent aucun employé »
(SELECT NoSCE FROM SERVICE)
EXCEPT
(SELECT NoSCE FROM EMPLOYE) ;
35
Mises à jour en SQL
Mises à jour en SQL
UPDATE INSERT INTO DELETE FROM
UPDATE EMPLOYE
SET NOM= Mariem
WHERE NoSS= 162124521212 1 ;
Exemple :
« Donner le nombre des employés »
SELECT COUNT( NoSS )
FROM EMPLOYE ;
38
Exemple
« Donner le nombre des employés du service 10»
SELECT COUNT(NoSS)
FROM EMPLOYE
WHERE NoSce = 10 ;
39
Les fonctions de groupe
La clause GROUP BY réarrange la table résultat du SELECT en un nombre minimum de
groupes tels que, à l’intérieur de chaque groupe, l’attribut spécifié possède la même valeur pour
chaque tuple.
Lorsqu’une clause GROUP BY est spécifiée, les fonctions de groupe sont calculées pour chaque
groupe.
La clause HAVING est l’équivalent du WHERE appliqué aux groupes. Cette clause ne peut
généralement être spécifiée que si une clause GROUP BY l’a été.
« Rechercher le nom du service dont le nombre d’employés est supérieure à 100 »
SELECT No_SCE, COUNT(NoSS)
FROM EMPLOYE, SERVICE
WHERE EMPLOYE.NoSCE=SERVICE.NoSCE
GROUP BY SERVICE.NoSCE
HAVING COUNT(NoSS) > 100
ORDER BY SERVICE.NoSCE ;
40
All/Any
La liste obtenue peut être traitée par un des opérateurs ALL ou ANY.
La requête est à placer dans une clause WHERE composée d’un opérateur de comparaison ( = ,
<> , < , > , <= , >=) suivi d’un des opérateurs ALL ou ANY, et suivi de la requête imbriquée.
Avec l’opérateur ALL, la condition est vérifiée si la comparaison se vérifie pour toutes les valeurs
ramenées par la requête imbriquée.
Avec l’opérateur ANY, la condition est vérifiée si la comparaison se vérifie pour au moins une
des valeurs ramenées par la requête imbriquée. L’opérateur SOME est synonyme de ANY.
La requête existentielle est à placer dans une clause WHERE après le mot clé EXISTS. La
condition est vérifiée si la requête imbriquée donne un résultat composé d’au moins un tuple.
Dans le cas du test d’unicité la requête est à placer dans une clause WHERE après le mot clé
UNIQUE. La condition est vérifiée si la requête imbriquée donne un résultat contenant un seul
tuple.
41