Vous êtes sur la page 1sur 68

Support de cours

Bases de données
Pour les étudiants de LFI2

Mounir Ben Ayed


mounir.benayed@ieee.org

La conception d'une base de données

1
Introduction
Le cycle de vie d’une BD devrait l’architecture d’une BD :
avoir 5 phases (GL) :
•Analyse, Externe
• Conception, Conceptuel et logique
•Implémentation,
•Utilisation, interne.
•Test et Maintenance.

Analyse et conception :
Analyse ===> Spécification
Conception ===> Schéma conceptuel (Statique & dynamique)
Transf. en modèle logique ===> Schéma logique
Conception physique ===> Schéma physique (interne)
Le modèle conceptuel utilisé est le modèle Entité/Association (Entité/Relation).
Le modèle E/A est limité à la description statique (des données).

La conception d'une base de données

2. L'organisation des données


A.Les entités
– Notion d'entité

L'entité est un objet abstrait qui sert à regrouper des données pour
représenter le fonctionnement d'une organisation.
Ces données seront regroupées de façon homogène.
Une entité regroupe des objets ayant les mêmes caractéristiques

Exemples :

dans une organisation "FACULTE", on trouvera les entités ETUDIANT,


CLASSE, MATIÈRE, PROFESSEUR.

dans une entreprise, on trouvera les entités PRODUIT, CLIENT,


FOURNISSEUR, COMMANDE, LIVRAISON, etc.
4

2
– Notion de propriété

Chaque entité est caractérisée par un ensemble


de propriétés (ou attributs). Leur nombre et leur
type dépendront de l'entité étudiée.

Exemple :
L'entité ETUDIANT a les propriétés :
Numéro, Nom, Prénom, Date de naissance, Adresse.

– Notion d'occurrence et de valeurs

Une occurrence correspond à un individu d'une entité.


Pour l'entité ETUDIANT il y aura autant d'occurrences que
d'étudiants dans la faculté.

Les valeurs d'une occurrence sont les données qui lui sont
rattachées.
Chaque propriété aura une valeur donnée pour une
occurrence de l'entité.

Exemple l'ETUDIANT n°12345, Ahmed Ben Salem, né le


12/05/1988, habite 12 rue des Martyrs, 3002 Sfax.

3
– Notion d'identifiant

Parmi les propriétés, il y en a une, l'identifiant, qui


sert à différencier sans ambiguïté chaque
occurrence de l'entité.

A une valeur donnée de l'identifiant ne peut


correspondre qu'une seule occurrence. (un code,
un numéro, une référence, …).

A partir d'une valeur de l'identifiant on pourra


obtenir les valeurs des autres propriétés d’une
occurrence.
7

– Représentation

4
B - Les associations et les cardinalités
– Notion d'association

Une association représente le lien entre deux ou plusieurs


entités. Ce lien correspond généralement à un verbe dans
la description de l'organisation.

Exemple : pour représenter la phrase "un ETUDIANT FAIT


PARTIE d'une CLASSE", on aura, d'une part, l'entité
ETUDIANT, d'autre part, l'entité CLASSE ; et entre les
deux l'association FAIT PARTIE.

– Représentation
• L'association sera représentée dans un "cartouche",
avec en haut le nom de l'association, et en bas les
propriétés dont elle pourrait être porteuse.

10

5
– Notion de cardinalités
Une cardinalité traduit le nombre de participations possible
d'une occurrence de chaque entité à l'association.
On indique pour chaque entité et chaque association deux
cardinalités : min et max.
(entité source – entité cible)

entre l'Entité et l'Association cardinalités = Explication


Un ETUDIANT fait partie au
ETUDIANT Fait partie 1,1 minimum d'une CLASSE et au
maximum d'une CLASSE
Une CLASSE comprend au
CLASSE Fait partie 1,n minimum un ETUDIANT et au
maximum plusieurs (n)

11

– Représentation

12

6
Association hiérarchique ou non
hiérarchique
L'association hiérarchique
(3 conditions)
1) Elle met en jeu 2 entités au maximum, entre lesquelles
existe une dépendance fonctionnelle, c'est à dire qu'à UNE
valeur de l'identifiant de l'ENTITÉ SOURCE, ne correspond
qu'UNE SEULE valeur de l'ENTITÉ BUT (ou cible).

2) La CARDINALITÉ côté source de l'association sera 1,1 ou


0,1. (c à d max=1)

3) Non porteuse de propriétés

« FAIT PARTIE » est une association hiérarchique


13

L'association non hiérarchique


Elle met en jeu DEUX ENTITÉS OU PLUS.

Elle peut être porteuse de données.

Ces données dépendent de l'ensemble des identifiants des entités


auxquelles elle est reliée.

Un professeur est identifié par un numéro, et est décrit par un nom,


entité PROFESSEUR
un prénom, une adresse, etc
Une classe est identifiée par un code, et est décrite par un libellé entité CLASSE
Une matière est identifiée par un code, et est décrite par un libellé entité MATIÈRE
Un professeur enseigne une ou plusieurs matières à une ou plusieurs
association ENSEIGNE
classes un certain nombre d'heures.

14

7
• Schéma conceptuel

1, 1 1, n
Etudiant Classe
Fait
NumInscr partie Cod_cl
Nom Libelle
Prenom
Dat_naiss
Adr 1, n

1, n
1, n
Professeur Enseigner
Matière
NB_H
NCIN
Nom Cod_mat
Prenom Libelle
Adr
Tel

15

Le modèle Entité Association


étendu
• Sous-classe et super-classe

• Classe = ensemble d’objets ayant les même caractéristiques.

• Sous-classe = classe dont les objets constituent un sous-


ensemble d’une autre classe appelée super-classe.

• Association EST-UN (IS-A) : association liant sous-classe et


super-classe (héritage).

• Toute occurrence d’une sous-classe représente la même


occurrence du monde réel que l’occurrence associée de la
super-classe, mais dans un rôle spécifique.
16

8
Héritage (1)

• Une occurrence d’une sous-classe possède toutes


les propriétés (caractéristiques) de l’occurrence
correspondante de la super-classe.

• On dit qu’elle hérite des propriétés de la super-


classe. Elle hérite aussi des instances des
associations auxquelles participe la super-classe.

17

Héritage (2)
• En plus des propriétés héritées, une occurrence
d’une sous-classe peut posséder des propriétés
spécifiques et intervenir dans des associations
spécifiques.

• Une sous-classe peut elle-même être super-classe


d’une autre classe «hiérarchie d’héritage». Une
sous-classe hérite de tous ses ascendants

18

9
Spécialisation (1)
• Soit un ens. de sous-classes Z = {S 1 , S 2 , …, S n }
qui ont la même super-classe G.

• G est appelée entité généralisée, ou super-classe de


la spécialisation, ou généralisation des sous-classes
{S 1 , S 2 , …, S n }.

• Z est dite totale si ∪S i = G sinon elle dite partielle


(contrainte de couverture).

• Z est dite disjointe si S i ∩ S j = Ø pour i≠ j sinon


elle est dite superposée
(contrainte de disjonction). 19

Spécialisation (2)

Les contraintes de couverture et de disjonction sont


indépendantes.
==>
Il existe quatre types de spécialisations :
• disjointe et totale, d,t

• disjointe et partielle, d

• superposée et totale, d,t

• superposée et partielle.
20

10
Généralisation

• C’est le processus inverse de celui de la


spécialisation : on cherche à rassembler
dans une même classe des entités qui ont
des propriétés communes.

21

Règles d’insertion et de suppression


• La suppression d’une occurrence dans une
superclasse implique sa suppression dans
toutes les sous-classes auxquelles elle
appartient.

• L’insertion d’une occurrence dans une


superclasse implique son insertion dans toute
sous-classe auxquelles elle appartient.

• L’insertion d’une occurrence dans une


superclasse d’une spécialisation totale implique
son insertion dans au moins une sous-classe de
la spécialisation.
22

11
Traduction du modèle E/A
en modèle relationnel
R1) Une entité devient une relation, ses propriétés
deviennent les attributs et l'identifiant la clé
primaire.
R2) Une association hiérarchique ne devient pas
une relation présence, dans la relation
correspondant à l'entité faible (cardinalité = 1,1)
de la clé de la relation correspondant à l'entité
forte (cardinalité = 1,n) - Clé étrangère (#).

23

Traduction du modèle E/A en modèle relationnel

R3) Une association non hiérarchique devient


une relation,

Clé primaire = la concaténation des clés étrangères


correspondant aux identifiants des entités
auxquelles l’association est reliée

Ces propriétés deviennent des attributs.

24

12
Traduction du modèle E/A en modèle relationnel

R4) Chaque association binaire 1-1 (max = 1, des 2


côtés) entre deux entités S et T est prise en

compte en incluant la clé primaire de l’une des


relations comme clé étrangère dans l’autre. En
général on choisi l’entité dont la participation est
totale dans l’association.

Dans certains cas, on peut rassembler S et T


dans une seule relation.

25

Traduction du modèle E/A en modèle relationnel

R5) Lorsque la combinaison des deux clés n’est


pas suffisante, il faut ajouter autant d’attributs que
nécessaire dans la clé pour rendre la clé unique
1,n 1,n
Livre Emprunt Abonné
Code_livre date_emp
titre
Num_Abon
date_retour
Thème nom
…. pren
adr
Un abonné peut emprunter le ….
même livre plusieurs fois

EMPRUNT ( #code_livre, #Num_Abon, date_emp, date_ret)


26

13
Traduction du modèle E/A en modèle relationnel

R6) Pour chaque association de degré n>2, créer


une relation R dont la clé primaire est la
concaténation des clés primaires des entités
participantes.

Si l’une des entités a une cardinalité max= 1, la


clé primaire de R est l’identifiant de cette entité.

27

Traduction du modèle E/A en modèle relationnel

R7) Une entité qui n’a que


son identifiant comme
attribut ne devient pas une
relation, mais un attribut
dans la relation traduisant
l’association.

Ouvrier (code_ouvrier, nom_ouvrier, prenom_ouvrier, grade)


Piece (reference_piece, libelle_piece)
Fabrique (#code_ouvrier, #reference_piece, date_F, quantité) 28

14
Traduction du modèle E/A en modèle relationnel

R8) Pour toute association récursive M-N sur une entité S


créer une nouvelle relation dont la clé primaire est constituée
par la concaténation de deux attributs représentant les deux
rôles de l’association. Chacun des deux attributs prend ses
valeurs dans le domaine de la clé primaire de S.

Piece ( reference, libelle, …)


Composition (#ref_composée, #ref_composant, nombre) 29

Traduction du modèle E/A en modèle relationnel


R9) Une association récursive 1-N se traduit par l’ajout d’une
clé étrangère dans la relation, correspondant à la clé primaire
de cette même relation mais portant un nom différent

Est subordonné
Employe
0,1 Hierarchie
Num_empl,
nom,
prenom, 0,N
date_emb, Est Chef
fonction,
salaire

Eploye (Num_empl, nom, prenom, date_emb, #Num_patron, fonction, salaire,…)


30

15
spécialisation disjointe
Créer trois relations A, B, C ayant pour clé primaire, la clé
primaire de S.
R10) Pour une spécialisation disjointe : Créer une seule
relation R rassemblant tous les attributs de A, B et C et
ayant pour clé primaire, la clé primaire de S.
Un dernier attribut,T, indique le type de chaque tuple de R
(soit A, soit B, soit C). Pour ce tuple seuls les attributs du
type T sont définis, tous les autres prenant une valeur
nulle.
31

spécialisation non disjointe

R11) pour une spécialisation non disjointe Créer


autant d’attributs de types que de sous-classes
dans la spécialisation.

Pour un tuple de R, chacun de ces attributs prend


la valeur 1 ou la valeur 0 selon que le tuple
correspond ou ne correspond pas au type associé.

32

16
Optimisation du modèle relationnel

Normalisations des relations

Dépendances Fonctionnelles

Définition
• Les DFs sont des « contraintes d'intégrité » de la BD.

• R(A1 , A2, …, An) , et X et Y des Sous ens. de (A1, A2,…, An).


X → Y (X détermine Y ; ou Y dépend fonctionnellement de X)

Pour toute extension r de R ; pour tout tuple t1 et t2 de r :

Π X ( t1) = Π X(t2) ==> Π Y ( t1) = Π Y(t2)

Autrement :

• Un (ou ++) attribut Y dépend fonctionnellement d'un (ou ++)


attribut X si étant donné une valeur de X , il lui correspond une
valeur unique de Y

17
Propriétés des dépendances fonctionnelles

1) Réflexivité : Y ⊆ X => X → Y .
Tout ensemble d'attribut détermine lui même ou une partie de lui même.

2) Augmentation : X → Y => X,Z → Y,Z .


X et Y peuvent être enrichis par un même 3ème .

3) Transitivité : X → Y et Y → Z => X → Z
NV → TYPE et TYPE → PUISSANCE on déduit : NV → PUISSANCE

De ces 3 axiomes d'Armstrong on peut en déduire 3 autres :

4) Union : X → Y et X → Z => X→ Y,Z

5) Pseudo-transitivité : X → Y et W,Y → Z => W,X→ Y,Z

6) Décomposition : X → Y et Z ⊆ Y => X → Z

dépendance fonctionnelle élémentaire :

Une DF X → Y est dite élémentaire si :


• Y est un attribut unique non inclus dans X

• Il n'existe aucun sous attribut Z ⊆ X / Z ⊆ Y


X est la plus petite quantité d'information donnant Y

• La dépendance X → Y est élémentaire s'il n'existe


pas X’ inclus dans X tel que X' → Y

(il n'y a pas d'attributs superflus dans la partie gauche


de la dépendance).

18
dépendance fonctionnelle directe

La DF X → Y est directe si
il n'existe pas Z dans R, distinct de X et
de Y, tel que X → Z et Z → Y

Fermeture transitive

• la fermeture transitive F+ d'un ensemble F de DF


est l'ensemble des DFEs qui peuvent être produites
par application des axiomes d'Armstrong sur
l'ensemble F.

• Exemple 1:
F = {NV → TYPE ; TYPE → MARQUE ; TYPE →
PUISSANCE ; NV → COULEUR}

F+ = F U {NV → MARQUE ; NV → PUISSANCE }

19
La couverture minimale
(couverture non redondante)
• C'est l'ensemble de DFs qui représente la même
information que l'ensemble initial, ceci sans
redondance.

La couverture minimale (F°) vérifie les propriétés :

1) Aucune dépendance dans F n'est redondante :


c à d pour toute DF f de F , F-f ≠ F.
2) toute DF élémentaire des attributs est dans la
fermeture transitive de F (F+)

• Rem : La couverture minimale n'est pas unique

NORMALISATION DES RELATIONS


(FORMES NORMALES)
• Normaliser une relation = la représenter sous une
forme canonique (standard).

• La normalisation conduit à la décomposition


réversible de la relation non normalisée à un nombre
d'autres relations.

• La réversibilité permet de retrouver la relation de


départ, par des opération de jointure.

• => aucune perte d'information.

20
Les formes normales
• Le but principal de la décomposition d'une relation
en d'autres ayant des formes normales, est la non
redondance d'informations.

• Un "bon" schéma est un schéma sans redondance.

• Un schéma relationnel sans qualité particulière est


appelé schéma en 1ère forme normale (1FN)
• Si on rajoute certaines qualités on obtient la
deuxième forme normale (2FN)
• Puis la troisième forme normale (3FN).

La 3FN est l'objectif de normalisation le plus classique.

1FN
• une relation est en première forme normale
ssi tout attribut a une valeur atomique.

• éviter d'avoir des attributs avec des domaines


composés.

Personne Prenom Nom Personne Prenom Nom NomJfille

Amri ep Ben Ben


Fathia Fathia Amri
Salem Salem
Sahli née Salma Sahli Mejdoub
Salma
Mejdoub

21
2FN

Une relation est en deuxième forme normale ssi

• elle est en 1FN

• tous les attributs non clés sont pleinement


dépendants des clés

Aucun attribut ne dépend d'une partie d'une clé

2FN (2)
Exemple :

FOURNISSEUR (NOM , ADRESSE , ARTICLE , PRIX)

(NOM , ARTICLE) → PRIX et NOM → ADRESSE

Une partie de la clé détermine un attribut n'appartenant


pas à la clé. = > cette relation n'est pas en 2FN.

Elle peut être décomposées en 2 :


FOURNISSEUR (NOM , ADRESSE)
PRODUIT (NOM , ARTICLE , PRIX)

22
3FN
une relation est en troisième forme normale
ssi :
• elle est en 2FN
• et si tous les attributs non clés sont
directement et pleinement dépendants des
clés (si tout attribut non clé ne dépend pas
d'un autre attribut non clé)
• c à d toute DF sont directe pas de
transitivité

3FN (2)
Exmple

VOITURE (NV ,MARQUE, TYPE, PUISSANCE, COULEUR)

N'est pas en 3FN : l'attribut non clé TYPE


détermine la MARQUE et la PUISSANCE

= > on la décompose :

VOITURE (NV , TYPE, COULEUR)


MODELE (TYPE, MARQUE, PUISSANCE)

23
3FNBCK

Une relation est en 3FNBCK ssi :


• elle est en 3FN
• et si les seules DFE sont celles de la
forme C -> X ( C : clé )

(seules les clés sont en partie gauche de DF).

L’Algèbre relationnelle

Langage formelle de requêtes

24
• Une algèbre est un ensemble d’opérateurs
de base, formellement définis, qui peuvent
être combinés pour construire des
expressions algébriques

• Complétude : toute manipulation pouvant


être souhaitée par les utilisateurs devrait
pouvoir être exprimable par une
expression algébrique

• L‘A.R. se compose d'un ensemble d'opérateurs


opérant sur des relations et produisant de nouvelles relations.
•  construire de nouvelles informations à partir des relations
de départ et d'une composition séquentielle d'opérateurs.

• Trois catégories d’opérateurs relationnels :


– Opérateurs unaires
– Opérateurs binaires travaillant sur des relations de
même schéma
– les opérateurs binaires travaillant sur des relations de
schémas différents

25
La projection
• entrée : une relation R de schéma SR

• sortie : une nouvelle relation T de schéma


A1, ..., An (ST inclus dans SR) ayant
comme tuples ceux de R restreints au
sous - schéma A1, ..., An.

• La cardinalité de T ≤ à celle de R.

La projection

T = Project <Liste d’attributs> (R)


T
T = Project (R) <Liste d’attributs>
T = π <Liste d’attributs> (R)

A1, A2,
…An

26
Projection
Quels sont les noms, prénoms et adresses des étudiants ?

Resultat Resultat = π nom,prenom, adr (Etudiant)

Nom, Prenom,
Adr

Etudiant

Projection
Quels sont les noms, prénoms et adresses des étudiants ?

Nins Nom Prenom Dat_naiss Adr


Cod_clas
1234 Ben Salah Ahmed 12/11/87 Sfax
I3
1235 Ben Salem Moncef I3
1236 Sallem Salma 10/10/87 Gabes I4
1236 Zouari Dorra 03/03/88 Tunis LFI2
1237 Mkaouar Hsan 01/02/88 Sousse LFI2
………. …………. …………. ……………. ………….. …………

Nom Prenom Adr


Ben Salah Ahmed Sfax
Ben Salem Moncef
Sallem Salma Gabes
Zouari Dorra Tunis
Mkaouar Hsan Sousse
…………. …………. …………..

27
Sélection ou Restriction
• Une sélection sur R suivant une qualification
Qi portant sur des attributs de R est le sous
ensemble de R dont les tuples satisfont Qi

• entrée : une relation R de schéma SR

• sortie : une nouvelle relation de même schéma


ayant comme tuples ceux de R satisfaisant à Qi.
Qi est une expression logique (op. de comparaison Op. Logiques)

Sélection ou Restriction

T = Select <Condition> (R)

T = Select (R) <Condition>


Qi
T = σ <Condition> (R)

28
Sélection ou Restriction
Quels sont les étudiants inscrits en LFI2 ?
<=>
Quels sont les tuples de la relation « étudiants » dont la valeur de
l’attribut cod_clas = ‘LFI2’ ?

Résultat

Cod_clas = ‘LFI2’ Résultat = σ Cod_clas = ‘LFI2’ (Etudiant)

Etudiant

Sélection ou Restriction
Quels sont les étudiants inscrits en I3 ?
<=>
Quels sont les tuples de la relation « étudiants » dont la valeur de l’attribut cod_clas = ‘I3’ ?

Etudiant
Nins Nom Prenom Dat_naiss Adr
Cod_clas
1234 Ben Salah Ahmed 12/11/87 Sfax
I3
1235 Ben Salem Moncef I3
1236 Sallem Salma 10/10/87 Gabes I4
1236 Zouari Dorra 03/03/88 Tunis LFI2
1237 Mkaouar Hsan 01/02/88 Sousse LFI2
………. …………. …………. ……………. ………….. …………

Résultat
Nins Nom Prenom Dat_naiss Adr
Cod_clas
1234 Ben Salah Ahmed 12/11/87 Sfax
I3
1235 Ben Salem Moncef I3
………. …………. …………. ……………. ………….. I3

29
Suites d’opérations
• Quels sont les noms, prénoms et adresses des
étudiants inscrits en I3 ?

Resultat Resultat = π nom, prenom, adr (σ cod_clas = ‘I3’ (Etudiant))

Nom, Prenom,
R1 = σ cod_clas = ‘I3’ (Etudiant)
Adr
Resultat = π nom, prenom, adr (R1)

Cod_clas = ‘I3’

Etudiant

Opérateurs ensemblistes
utilisés sur des relations ayant le même schéma

• Union

T = R1 U R2
T = Union (R1, R2)

R1 R2

30
R1 L’union R2

A B C A B C
a1 b2 C1 a4 b3 C3
a2 b1 c2 a5 b3 c4
a3 b2 C1 a6 b6 C6
a4 b3 C3 a7 b7 c7
a5 b3 c4

Les étudiants pratiquant une activité Les étudiants pratiquant une activité
sportive culturelle

Quels sont les étudiants qui pratiquent une activité associative ?


A B C
a1 b2 C1
R1 U R2 = a2 b1 c2
a3 b2 C1
a4 b3 C3
a5 b3 C4
a6 b6 C6
a7 b7 c7

Opérateurs ensemblistes
utilisés sur des relations ayant le même schéma

T = R1 ∩ R2
• Intersection T = Intersect (R1, R2)

R1 R2

31
L’intersection
R1 R2
A B C A B C
a1 b2 C1 a4 b3 C3
a2 b1 c2
a5 b3 c4
a3 b2 C1
a6 b6 C6
a4 b3 C3
a7 b7 c7
a5 b3 c4

Les étudiants pratiquant une activité Les étudiants pratiquant une activité
sportive culturelle

Quels sont les étudiants qui font une activité sportive et une activité culturelle ?

A B C

R1 ∩ R2 = a4 b3 C3
a5 b3 C4

Opérateurs ensemblistes
utilisés sur des relations ayant le même schéma

• Soustraction
ou différence

R1 R2

T = R1 - R2
T = minus (R1, R2)

32
La différence (soustraction)
R1 R2
A B C A B C
a1 b2 C1 a4 b3 C3
a2 b1 c2
a5 b3 c4
a3 b2 C1
a6 b6 C6
a4 b3 C3
a7 b7 c7
a5 b3 c4

Quels sont les étudiants qui font une Quels sont les étudiants qui font une
activité sportive mais pas d’activité activité culturelle mais pas d’activité
culturelle ? (càd que dans R1) sportive? (càd que dans R2)

R1 - R2 = A B C A B C
R2 – R1 =
a1 b2 C1 a6 b6 C6
a2 b1 c2 a7 b7 c7
a3 b2 C1

 R1 - R2 ≠ R2 – R1

Opérateurs binaires
utilisés sur des relations de schéma différents
Le produit cartésien

R1 R2

T = R1 X R2
T = Product (R1, R2)

33
Le produit cartésien
R1
R2
A B C D E
a1 b2 C1 d1 e1
a2 b1 c2 d2 e2
a3 b2 C1
… …. …. On fait correspondre à chaque tuple de R1 tous ceux de R2

T = R1 X R2
A B C D E
a1 b2 C1 d1 e1
a1 b2 C1 d2 e2
a2 b1 c2 d1 e1
a2 b1 c2 d2 e2
a3 b2 C1 d1 e1
a3 b2 C1 d2 e2
….. …… …… …… ……

Degré de T = degré de R1 + degré de R2 & Card. de T = Card. R1 * Card. R2

La jointure
La jointure <==> prod. Cart.
Suivi par une sélection
R1
R2
A B C C D
a1 b2 C1 c1 d1
a2 b1 c2 c2 d2
a3 b2 C1
… …. …. T = R1 ►◄ R2
R1.C = R2.C
T = R1 X R2
A B C C D
a1 b2 c1 c1 d1
a1 b2 c1 c2 d2
a2 b1 c2 c1 d1
a2 b1 c2 c2 d2
a3 b2 c1 c1 d1
a3 b2 c1 c2 d2
….. …… …… …… ……

34
La jointure
R1
R2
A B C C D
a1 b2 C1 c1 d1
a2 b1 c2 c2 d2
a3 b2 C1
… …. ….

T = R1 ►◄ R2
R1.C = R2.C

A B C C D
a1 b2 c1 c1 d1
a2 b1 c2 c2 d2
a3 b2 c1 c1 d1
….. …… …… …… ……

Exemple de requête avec jointure


Etudiant Classe

Nins Nom Prenom Dat_naiss Adr


Cod_clas Cod_Clas Libellé
1234 Ben Salah Ahmed 12/11/87 Sfax
I3 I3 3ème année informatique
1235 Ben Salem Moncef I3 I4 4ème Année Informatique
1236 Sallem Salma 10/10/87 Gabes I4 TIC3 3ème Année Tech. Inf. et Com
1236 Zouari Dorra 03/03/88 Tunis LFI2 LFI1 1ère Année Licence Fond. Inf
1237 Mkaouar Hsan 01/02/88 Sousse LFI2 LFI2 2ème Année Licence Fond. Inf
………. …………. …………. ……………. ………….. ………… …… ……………………..
Quels sont les noms, prénoms des étudiants et les libellés des classes où ils sont inscrits ?

35
La jointure <==> prod. Cart. Suivi par une sélection
Attributs de la relation Etudiant Attributs de la
relation Classe
Nins Nom Prenom Dat_nais Adr Cod_cla Cod_clas Libellé
s s
1234 Ben Salah Ahmed 12/11/87 Sfax I3 I3 3ème année informatique
1234 Ben Salah Ahmed 12/11/87 Sfax I3 I4 4ème Année Informatique
1234 Ben Salah Ahmed 12/11/87 Sfax I3 TIC3 3ème Année Tech. Inf. et Com.
1234 Ben Salah Ahmed 12/11/87 Sfax I3 LFI1 1ère Année Licence Fond. Inf.
1234 Ben Salah Ahmed 12/11/87 Sfax I3 LFI2 2ème Année Licence Fond. Inf.
1235 Ben Salem Moncef I3 I3 3ème année informatique
1235 Ben Salem Moncef I3 I4 4ème Année Informatique
1235 Ben Salem Moncef I3 TIC3 3ème Année Tech. Inf. et Com.
1235 Ben Salem Moncef I3 LFI1 1ère Année Licence Fond. Inf.
1235 Ben Salem Moncef I3 LFI2 2ème Année Licence Fond. Inf.
1236 Sallem Salma 10/10/87 Gabes I4 I3 3ème année informatique
1236 Sallem Salma 10/10/87 Gabes I4 I4 4ème Année Informatique
1236 Sallem Salma 10/10/87 Gabes I4 TIC3 3ème Année Tech. Inf. et Com.
1236 Sallem Salma 10/10/87 Gabes I4 LFI1 1ère Année Licence Fond. Inf.
1236 Sallem Salma 10/10/87 Gabes I4 LFI2 2ème Année Licence Fond. Inf.
1236 Zouari Dorra 03/03/88 Tunis LFI2 I3 3ème année informatique
1236 Zouari Dorra 03/03/88 Tunis LFI2 I4 4ème Année Informatique
1236 Zouari Dorra 03/03/88 Tunis LFI2 TIC3 3ème Année Tech. Inf. et Com.
1236 Zouari Dorra 03/03/88 Tunis LFI2 LFI1 1ère Année Licence Fond. Inf.
1236 Zouari Dorra 03/03/88 Tunis LFI2 LFI2 2ème Année Licence Fond. Inf.
1237 Mkaouar Hsan 01/02/88 Sousse LFI2 I3 3ème année informatique
1237 Mkaouar Hsan 01/02/88 Sousse LFI2 I4 4ème Année Informatique
1237 Mkaouar Hsan 01/02/88 Sousse LFI2 TIC3 3ème Année Tech. Inf. et Com.
1237 Mkaouar Hsan 01/02/88 Sousse LFI2 LFI1 1ère Année Licence Fond. Inf.
1237 Mkaouar Hsan 01/02/88 Sousse LFI2 LFI2 2ème Année Licence Fond. Inf.
………. …………. …………. ………… ……… ………
…. ….. …

Les différentes catégories de jointure


• Equi-jointure : Qualification Ai = Bj ; où Ai et Bj sont
des attributs de R et S respectivement, prenant leur
valeur dans le même domaine.

• Jointure naturelle : T = R ►◄ S, correspond à l'équi-


jointure de R et S sur tous les attributs identiques (ayant
le même nom) dans R et S, suivie d'une projection
permettant de conserver un seul exemplaire des attributs
identiques

• Théta-jointure : θ-jointure : Qualification Ai θ Bj où Ai


et Bj sont des attributs de R et S respectivement, dont
les valeurs peuvent être rapprochées par l'opérateur θ .

Ex : Ai=Bj OU Ai = Bj ET Am > Bq

36
La division
• R est de schéma SR (SR = X,Y) et S de schéma SS
composé de l'ensemble d'attributs Y (SS = Y). La
relation produite est définie sur le schéma Sres (Sres =
SR - SS = X) et comprend tous les nuplets dont la
concaténation avec tous les nuplets de S appartenant à
R.
• T=R¸S
• R(A1, A2, …, An)
• S(Ap+1, …, An)
• T(A1, A2, …, Ap) contient tous les tuples tels que la
concaténation à chacun des tuples de S donne toujours
un tuple de R.

La division

T = R1 : R2

R1 R2

37
La division
R1
X Y
x1 y1 R2 R1 / R2
x2 y1 Y
x3 y2
X
x4 y3
y1 x1
x1 y3 y2 x2
x1 y2 y3
x2 y3
x2 y2
x3 y3
x4 y1

R’2 R1 / R’2
X Y
x1 y3
x2
x3
x4

La division - exemple
Client (N_cl, nom, adr, tel, …)
Produit (N_prod , libelle, prix, qtt_stock, ….)
Achat (N_cl, N_prod, d_achat, qtt)

Quels sont les numéros des clients (N_cl) qui ont acheté
tous les produits ?
Quels sont les numéros des clients (N_cl) de la relations
Achat qui sont « associés » avec tous les N_prod [de la
relation Produit] ?

Resultat = π N_cl, N_prod (Achat) / π N_prod (Produit)

38
Structured Query Language
(SQL)
Partie 1 :
- Introduction
- Langage de Définition des Données (LDD)
- Langage de modification ou manipulation des données (LMD)

Introduction (1)
Historique
• 1975 : QUEL (QUEry Language)
• Projet INGRES – Université de Berkeley
• 1976 : SEQUEL (Structured QUEry English language)
• IBM
• 1980 : SQL
• SQL est un standard ANSI/ISO
– SQL 86 (1ère version - ANSI)
– SQL89 (ISO/ANSI)
– SQL 92 ou SQL2 ( le plus couramment utilisé)
– SQL 99 ou SQL3 (Extension de SQL2)

Aucun n’a implémenté la totalité de la norme 99

39
Introduction (2)
Différentes catégories
• LDD : Langage de Définition des Données
créer – modifier – supprimer des objets (tables, procédure, utilisateur, ….)

CREATE – ALTER – DROP

• LMD : Langage de modification des données (manipulation)


insérer – MAJ – supprimer des données
INSERT – UPDATE – DELETE

• LID : Langage d’Interrogation des Données


« exploiter les données sauvegardées »
SELECT …

• LCD : Langage de Contrôle des Données


gérer les protections d’accès
GRANT - REVOKE

Langage de Définition des Données


(LDD)

• Création de table :
– lui donner un nom et définir ses
caractéristiques.
– Au min 1 colonne. Les noms des colonnes
doivent être uniques.

40
Création de table
SQL> create table nom_table
(col_1 type_1 [contrainte_1] ,
col_2 type_2 [contrainte_2] ,
…….
col_n type_p [contrainte_p]
) ;

Création de table – 1er Exemple


SQL> create table classe
(code_cl char (10) primary Key ,
libelle char (50) NOT NULL
);

41
Types de données
• Caractère

– Char (n) n= 1..255


– Varchar2 (n) n=1..4000
– Long jusqu’à 2 Go
– CLOB jusqu’à 4 Go

• Numérique

– Number - Number (n) – Number (n,p)


• n max = 127 p max = 38
– Integer – Int – smallint
– Decimal (n,p) – numeric (n,p)
– Float – real – double precision

• Date

– Date AAAA-MM-JJ
– Time HH:MM:SS
– Timestamp (date concaténée à time)

Les contraintes d’intégrité


• Une contrainte est une règle qui permet de contrôler au mieux
la validité et la cohérence des valeurs.
• Il y a des contraintes « colonne » et des contraintes « table ».
Contrainte colonne : concerne une colonne
Contrainte table : concerne une ou plusieurs colonne(s).

Syntaxe :

[CONSTRAINT nom_contrainte] la contrainte


[CONSTRAINT nom_contrainte] la contrainte (<liste de colonnes>)

42
Les contraintes d’intégrité
contrainte colonne : déclarée sur la même ligne que la
colonne à la quelle elle se rapporte
SQL> create table nom_table
(col_i type_j [CONSTRAINT nom_contrainte] la contrainte ,
….
);
contrainte table : déclarée après la déclaration des colonnes
SQL> create table nom_table
(col_1 type_2 ………………..,
….
Col_n type_p ………………..,
[CONSTRAINT nom_contrainte] la contrainte (<liste de colonnes>)
………………………………..
);

Les contraintes d’intégrité


contraintes colonne

• PRIMARY KEY

• NOT NULL

• UNIQUE

• [FOREIGN KEY] REFERENCES


nom_table [(nom-col)] [action]

• DEFAULT <valeur_par_defaut>

• CHECK ( condition)

43
Les contraintes d’intégrité
Contraintes table

• PRIMARY KEY (nom-col*)

• UNIQUE (nom-col*)

• FOREIGN KEY (nom-col*) REFERENCES


nom-table [(nom-col*)] [action]

• CHECK ( condition)

Création de table – Exemple 2


SQL> create table classe

(code_cl varchar2 (10) primary Key ,


libelle varchar2 (50) NOT NULL
);
Table créée

SQL> create table etudiant

(num_inscr varchar2 (8) primary key,


nom varchar2 (20) not null,
prenom varchar2 (20) not null,
dat_naiss date CHEK (dat_naiss < sysdate) ,
adr varchar2 (100) DEFAULT ‘Sfax’,
code_cl varchar2 (10) references classe (code_cl)
);

44
Création de table – Exemple 2 (suite)
SQL> create table matière
(code_mat varchar2 (10) primary Key ,
libelle varchar2 (50) NOT NULL
);

SQL> create table professeur

(NCIN varchar2 (8) primary key,


nom varchar2 (20) not null,
prenom varchar2 (20) not null,
adr varchar2 (100),
Tel varchar2 (8)
);

SQL> create table enseigner


(NCIN varchar2 (8),
code_mat varchar2 (10) ,
code_cl varchar2 (10) ,
constraint PK primary key (NCIN, code_mat, code_cl),
constraint FK1 foreign key (NCIN) references professeur (NCIN) ,
constraint FK2 foreign key (cod_mat) references matière (code_mat) ,
constraint FK3 foreign key (cod_cl) references classe (code_cla)
);

Cas où une donnée référencée est


mise à jour (update) ou détruite (delete)
SQL> create table enseigner
Deux circonstances (NCIN varchar2 (8),
ON DELETE code_mat varchar2 (10) ,
code_cl varchar2 (10) ,
ON UPDATE constraint PK primary key (NCIN,
code_mat, code_cl),

Trois options constraint FK1 foreign key (NCIN) references


SET NULL professeur (NCIN) on delete set null,

SET DEFAULT constraint FK2 foreign key (cod_mat) references


matiere (code_mat) on update cascade,
CASCADE
constraint FK3 foreign key (cod_cl) references
classe (code_cla) on delete set null
on update cascade

);

45
Modifier la définition d’une table :
ALTER TABLE

ADD : Ajouter une colonne ou une contrainte


Ex : Ajouter à la table PROFESSEUR une colonne (e_mail )
Ajouter une contrainte NOT NULL pour la colonne Tel de la table
PROFESSEUR

MODIFY : Modifier une colonne ou une contrainte


Ex : Modifier la taille de la colonne Tel de la table PROFESSEUR – de 8 à
13 caractères

DROP : Supprimer une colonne ou une contrainte


Ex : Supprimer la colonne e_mail de la table PROFESSEUR

supprimer une table

DROP TABLE : supprime la table et tout son contenu

SQL > DROP TABLE nom_table [CASCADE CONSTRAINTS]

CASCADE CONSTRAINTS : Supprime toutes les


contraintes de clé étrangères référençant cette table

Si on essaye de détruire une table dont certains attributs


sont référencés sans « CASCADE CONSTRAINT » : => refus

46
Renommer une table
• RENAME ancien_nom_table TO nouveau_nom

Différentes catégories

• LDD : Langage de Définition des Données


créer – modifier – supprimer des objets(tables, procédure, utilisateur, ….)

CREATE – ALTER – DROP

• LMD : Langage de modification des données (manipulation)


insérer – MAJ – supprimer des données
INSERT – UPDATE – DELETE
• LID : Langage d’Interrogation des Données
« exploiter les données sauvegardées »
SELECT …

• LCD : Langage de Contrôle des Données


gérer les protections d’accès
GRANT - REVOKE

47
Langage de Manipulation des Données
( LMD)
• Insérer des données : peupler les tables
SQL> insert into nom_table [(<listes de colonnes>)]
values (<liste de valeurs>) ;

SQL> insert into classe values (‘I3’, ‘Troisième année Informatique’);

Si on omet (<listes
de colonnes>) des valeurs doivent être
saisies pour chacune des colonnes – autant de valeurs
que de colonnes - de même types respectifs.

Les colonnes frappées par la contrainte NOT NULL ne


peuvent être omises

Langage de Manipulation des Données


( LMD)

• Mise à jour des données :

SQL> UPDATE nom_table


SET col_1 = expr_1, col_2 = expr_2, …
WHERE condition ;

Ex : Produit (code_prod, libelle, prix, qtt_stock,…)

1) Augmenter de 1O% les prix de tous les produits

2) Augmenter de 1O% les prix des produits


dont le prix est < 5,000 dt

48
Langage de Manipulation des Données
( LMD)
• Suppression de données (delete)

SQL> DELETE FROM nom_table


[WHERE condition] ;
Ex :
1) Supprimer les produits dont le prix est < 100
2) Supprimer toutes les lignes de la table PRODUIT

Commande similaire : Truncate (LDD)

Structured Query Language


(SQL)

Partie 2 : Langage d’Interrogation des Données


(LID)

49
Différentes catégories

• LDD : Langage de Définition des Données


créer – modifier – supprimer des objets(tables, procédure, utilisateur, ….)

CREATE – ALTER – DROP

• LMD : Langage de modification des données (manipulation)


insérer – MAJ – supprimer des données
INSERT – UPDATE – DELETE

• LID : Langage d’Interrogation des Données


« exploiter les données sauvegardées »
SELECT …
• LCD : Langage de Contrôle des Données
gérer les protections d’accès
GRANT - REVOKE 99

Syntaxe
SELECT <liste de colonnes ou d’expressions>
FROM <liste de tables ou de vues>
[WHERE <critère(s) de jointure> AND <critère(s) de sélection>]
[GROUP BY <colonne(s) de partitionnement>
[HAVING <critère(s) de restriction>]]
[ORDER BY <liste (ou numéro) de colonnes>]

100

50
Syntaxe
SELECT <liste de colonnes ou d’expressions>
FROM <liste de tables ou de vues>
[WHERE <condition>]
[GROUP BY <liste de colonne(s)> [HAVING <condition>] ]
[ORDER BY <liste (ou numéro) de colonnes>]

SELECT : pour la projection


FROM : toutes les tables utiles pour la requête
WHERE : pour la sélection
ORDER BY : obtenir les résultats dans un ordre
croissant (ASCendant) ou décroissant (DESCendant) 101

Projection
Quels sont les noms, prénoms et adresses des étudiants ?

Resultat = π nom,prenom, adr (Etudiant)

Resultat SELECT nom, prenom, adr


FROMEtudiant
Nom, Prenom,
Adr

Etudiant

102

51
Traitement des doublons

Quels sont les codes classes de tous les étudiants ?

SELECT code_cl
FROM ETUDIANT ;

Quels sont les classes (codes) dans les quelles des étudiants ont été inscrits ?

SELECT DISTINCT code_cl


FROM ETUDIANT ;

103

Sélection ou Restriction
Quels sont les étudiants inscrits en LFI2 ?
<=>
Quels sont les tuples de la relation « étudiants » dont la valeur de
l’attribut cod_clas = 'LFI2' ?

Résultat = σ Cod_clas = 'LFI2' (Etudiant)


Résultat

SELECT Ninscr, nom, prenom, dat_naiss, adr, cod_clas


FROM Etudiant
Cod_clas = 'LFI2'
WHERE cod_clas = 'LFI2'

SELECT *
FROM Etudiant
Etudiant
WHERE cod_clas = 'LFI2' 104

52
WHERE condition (expression logique)
Opérateurs de comparaison :

=,>,<,>=,<=,<> (ou != ou ^=)

Opérateurs logiques :

AND – OR - NOT

Autres prédicats

[NOT] IN : appartenance à une liste de valeurs

[NOT] LIKE : appartenance à une chaîne de caractères

[NOT] BETWEEN : appartenance à un intervalle de valeurs

105

Between - Like
• Quels sont les noms, prénoms et adresses des étudiants inscrits en LFI2, nés en 1987 ?

SQL> SELECT nom, prenom, adr


FROM ETUDIANT
WHERE cod_clas = 'LFI2'
AND
dat_naiss >= ’01/01/1987’ AND dat_naiss <= ‘31/12/1987’ ;

SQL> SELECT nom, prenom, adr


FROM ETUDIANT
WHERE cod_clas = 'LFI2'
AND
dat_naiss BETWEEN ’01/01/1987’ and ‘31/12/1987’
;

Avec LIKE : WHERE cod_clas = 'LFI2' AND dat_naiss LIKE ‘_ _ _ _ _ _1987’

WHERE cod_clas = 'LFI2' AND dat_naiss LIKE ‘%1987’

Rem : les valeurs des types « caractère » et « date » doivent être encadrées par des
apostrophes.
106

53
IN
Quels sont les étudiants inscrits dans une classe dépendante du
département d’Informatique et des Communications ?

SELECT *
FROM Etudiant
WHERE cod_clas = 'LFI3' OR cod_clas = ‘LFI2’
OR
cod_clas = ‘LFI1’ OR cod_clas = ‘LARI3’

OR
cod_clas = ‘LARI2’ OR cod_clas = ‘LARI1’
OR
cod_clas = ‘I4’;
SELECT *
FROM Etudiant
WHERE cod_clas IN ('LFI3', ‘LFI2’, ‘LFI1’, ‘LARI3’, ‘LARI2’,’LARI1,‘I4’) ;

107

Valeurs nulles
• Quels sont les étudiants (noms, prénoms et codes classes) qui
n’ont pas donné d’adresse ?

SQL> SELECT nom, prenom, code_cl


FROM ETUDIANT
WHERE adr IS NULL ;

• Quels sont les étudiants (noms, prénoms et codes classes) qui


ont donné une adresse ?

SQL> SELECT nom, prenom, code_cl


FROM ETUDIANT
WHERE adr IS NOT NULL ;
108

54
Tri des résultats (ORDER BY)
SELECT col1, Col2, ...
FROM Nom_table
ORDER BY col1 [ASC], Col2 [DESC], ... ;

Quels sont les noms, prénoms, salaires des employés par ordre croissant pour
les noms et décroissant pour les prénoms ?

SELECT nom, prenom, sal_mens


FROM employe
ORDER BY nom ASC, prenom DESC ;

SELECT nom, prenom, sal_mens


FROM employe
ORDER BY 1 ASC, 2 DESC ;
109

Fonctions
• Fonctions arithmétiques :
– ABS, SQRT, EXP, LN, LOG, …
• Fonctions trigonométriques :
– SIN, COS , TAN, …
• Fonctions sur les chaînes de caractères :
– UPPER, INTCAP, CONCAT, ….
• Fonctions sur les dates :
– ADD_MONTHS, NEXT_DAY, MONTHS_BETWEEN ,
• Fonctions de conversion :
– TO_CHAR, TO_NUMBER, TO_DATE, ASCII, CHR
• Autres Fonctions :
– NVL, DECODE, GREATEST, ….
110

55
Renommage (alias colonne)
Employe ( Num_Emp, nom, prenom, fonction, sal_mens, comm, ….)
Req : Quels sont les noms, prénoms et salaires annuels des employés ?

SELECT nom, prenom, sal_mens * 12

FROM Employe ;
NOM PRENOM SAL_MENS*12

SELECT nom, prenom, sal_mens * 12 AS salaire_annuel

FROM Employe ;

NOM PRENOM SALAIRE_ANNUEL

111

Opérateurs ensemblistes
(relations ayant le même schéma)
T = R1 U R2
• Union
T = Union (R1, R2)

Quels sont les noms, prénoms et adresses de


Select col1, col2, col3 toutes les personnes existantes dans la base
From nom_table de la Fac. ? (Etudiants ou professeurs)

UNION

Select col1, col2, col3 SELECT nom, prenom, adr

From nom_table ; FROM ETUDIANT


UNION
SELECT nom, prenom, adr
Idem pour l’intersection
(INTERSECT) et la FROM PROFESSEUR ; 112
différence (MINUS)

56
Le produit cartésien
R1
R2 SELECT *
A B C D E FROM T1, T2 ;
a1 b2 C1 d1 e1
a2 b1 c2 d2 e2
a3 b2 C1
… …. …. On fait correspondre à chaque tuple de R1 tous ceux de R2

T = R1 X R2
A B C D E
a1 b2 C1 d1 e1
a1 b2 C1 d2 e2
a2 b1 c2 d1 e1
a2 b1 c2 d2 e2
a3 b2 C1 d1 e1
a3 b2 C1 d2 e2
….. …… …… …… ……
113
Degré de T = degré de R1 + degré de R2 & Card. de T = Card. R1 * Card. R2

La jointure
La jointure <==> prod. Cart. Suivi par une sélection
R1
R2 SELECT A, B, T1.C, D
A B C C D FROM T1, T2
a1 b2 C1 c1 d1
a2 b1 c2
WHERE T1.C = T2.C;
c2 d2
a3 b2 C1
… …. …. T = R1 ►◄ R2
R1.C = R2.C

T = R1 X R2
A B C C D
a1 b2 c1 c1 d1
a1 b2 c1 c2 d2
a2 b1 c2 c1 d1
a2 b1 c2 c2 d2
a3 b2 c1 c1 d1
a3 b2 c1 c2 d2
….. …… …… …… ……
114

57
Les fonctions de groupe (d’agrégation)

f ( [ ALL | DISTINCT ] colonne ou expression)

où f peut être
COUNT nombre de lignes
SUM somme des valeurs d'une colonne
AVG moyenne “ “ “ "
MAX maximum “ “ “ "
MIN minimum “ “ “ "
STDDEV Écart type “ “ “ "
VARIANCE Variance “ “ “ “

Pour COUNT, on peut aussi utiliser COUNT(*)


115

Requêtes imbriquées
(complexes)
Sous interrogations

58
Sous interrogation ramenant
une valeur Idem : Jointure d’une
table avec elle même

Ex : Quels sont les employés (nom, fonction et numéro de dept)


ayant un salaire supérieur ou égal à celui de SCOTT ?

Select ENAME, JOB, DEPTNO


From EMP
where SAL >= (select SAL
from EMP
Where ENAME = ‘SCOTT’);

Quels sont les employés du département 10 ayant un


salaire supérieur ou égal à celui de SCOTT ?

=,>,<,>=,<=,<> (ou != ou ^=) : DOIT RAMENER UNE ET UNE SEULE LIGNE

Sous interrogation ramenant


plusieurs lignes
Avec des opérateurs admettant à leur droite un ensemble de valeurs :
IN - ANY - ALL
Ils sont svt précédés par un opérateur de comparaison classique :
=, <>, >, >=, <, <= ; (avec ou sans NOT)

EX: Quels sont les employés (nom et fonction) du département 10 qui ont
une fonction que l'on trouve dans le département 30 ?

SELECT ENAME, JOB


FROM EMP
WHERE DEPTNO = 10
AND
JOB IN (SELECT JOB
FROM EMP
WHERE DEPNO=30);

59
Sous interrogation ramenant
plusieurs lignes (2)
Quels sont les employés qui gagnent plus que tous ceux du département 30 ?

SELECT ENAME Nom, SAL Salaire


FROM EMP
WHERE SAL > ALL (SELECT SAL
FROM EMP
WHERE DEPNO=30);

Quels sont les employés qui gagnent plus qu’un employé (au moins 1) du
département 30 ?

SELECT ENAME Nom, SAL Salaire


FROM EMP
WHERE SAL > ANY (SELECT SAL
FROM EMP
WHERE DEPNO=30);

«IN» est équivalent à «= ANY» et «NOT IN» est équivalent à «!= ALL»

Sous-interrogation ramenant
plusieurs colonnes
Quels sont les employés qui ont la même fonction et le même chef
que SCOTT ?

SELECT ENAME, JOB, MGR


FROM EMP
WHERE (JOB, MGR) = (SELECT JOB, MGR
FROM EMP
WHERE ENAME = ‘SCOTT');

60
Sous-interrogation Synchronisée
avec la requête principale

Dans les cas précédents les sous requêtes sont évaluées en


premier ; le résultat est ensuite utilisé par la requête principale.

Une Sous-requête est dite Synchronisée


lorsqu’elle fait référence à une colonne de la
requête principale.
La sous requête est ainsi évaluée pour chaque
ligne de la requête principale

Sous-interrogation Synchronisée avec la


requête principale (Exemple)

Quels sont les employés (nom, fonction et Num Chef) qui ne travaillent
pas dans le même département que leur chef (MGR) ?

SELECT ENAME Nom, JOB Fonction, MGR N_Chef


FROM EMP E
WHERE DEPNO ! = (SELECT DEPTNO
FROM EMP
WHERE EMPNO = E.MGR);

Quels sont les employés (numéro de département, nom et salaire) qui gagnent
plus que la moyenne de leur département ?

SELECT DEPTNO, ENAME, SAL


FROM EMP E
WHERE SAL > (SELECT AVG(SAL)
FROM EMP
WHERE DEPTNO = E.DEPTNO) ;

61
Sou-interrogation ramenant
au moins une ligne
L’opérateur EXISTS permet de construire un
prédicat vrai si la S/R ramène au moins une ligne.
Ex : Quels sont les employés (nom et numéro de département) pour lesquels
il existe au moins un vendeur (SALESMAN) dans leur département ?

SELECT ENAME, DEPTNO


FROM EMP E
WHERE EXISTS (SELECT *
FROM EMP
WHERE JOB = ‘SALESMAN’
AND DEPTNO = E.DEPTNO);

Ex : Quels sont les départements qui (n’)ont (pas) des (d’)employés

La division
Aptitude_Pilote Hangar

Pilote Avion Avion


Ali AB 320 AB 320
Ali AB 321 AB 321
Ali B 707 B 707
Ali B 52 B 52
Moncef B 52
Moncef AB 321
Quels sont les pilotes qui peuvent
Moncef AB 320 piloter tous les avions ?
Moncef B 707
<==>
Mohamed AB 320
Mohamed AB 321
c.à.d. les pilotes pour lesquels le Nb
Salah B 707
d’avion qu’ils peuvent piloter = Nb
Salah B 52 d’avions dans le Hangar
Salah AB 320

62
La division
T1 (A :D1, B :D2)
T2 (B :D2)
SELECT A FROM T1
GROUP BY A
HAVING COUNT (distinct B ) = (SELECT count (distinct B )
FROM T2) ;

SELECT pilote FROM Aptitude_pilote


GROUP BY pilote
HAVING COUNT (distinct avion ) = (SELECT count (distinct avion )
FROM Hangar) ;

La division
Quels sont les pilotes qui peuvent conduire tous les avions ?

<==>

Le pilote pourrait dire : Il n’y a pas un avion dans le Hangar que je


ne puisse piloter !!!

SELECT distinct pilote FROM Aptitude_pilote AP1


WHERE NOT EXISTS
(SELECT * FROM Hangar H
WHERE NOT EXISTS
(SELECT * FROM Aptitude_pilote AP2
WHERE AP2.pilote = AP1.pilote
AND AP2.avion = H.avion
)
)

63
La division
Quels sont les pilotes qui peuvent conduire tous les avions ?
<==>
Les pilotes pour lesquels la diff entre les avions existants et ceux
qu’ils pilotent est nulle (ou vide – pour une table)
SELECT pilote FROM Aptitude_pilote AP1
WHERE NOT EXISTS
(SELECT avion FROM Hangar H )
MINUS
(SELECT avion FROM Aptitude_pilote AP2 WHERE AP2.pilote = AP1.pilote )

SELECT pilote FROM Aptitude_pilote AP1


WHERE (SELECT avion FROM Hangar H )
MINUS
(SELECT avion FROM Aptitude_pilote AP2 WHERE AP2.pilote = AP1.pilote )
IS NULL

Comment interpréter une requête


complexe multi tables ?

• Exemple :
SELECT N°Client, COUNT(*), SUM(QtéCom)
FROM Commande C, LigneCom L
WHERE C.N°Com = L.N°Com AND N°Pro = ‘PA 60’
GROUP BY N°Client HAVING COUNT(*) >= 2
ORDER BY N°Client

64
Comment interpréter une requête
complexe multi table ?
• on considère les tables spécifiées dans la clause FROM
• on effectue la jointure de ces tables selon le critère de
jointure de la clause WHERE
• on sélectionne les lignes de la jointure sur la base des
autres conditions de la clause WHERE
• on classe ces lignes en groupes comme spécifié dans la
clause GROUP BY
• on ne retient que les groupes qui vérifient la clause
HAVING
• de chacun de ces groupes, on extrait les valeurs
demandées dans la clause SELECT
• les valeurs demandées sont ordonnées selon la clause
ORDER BY éventuelle.

Sauvegarde d’une requête


• 3 solutions :
– Fichier .sql
– Table :
• SQL> create table nom_table [(liste de colonnes
avec ou sans types)] AS select …
from …
where … ;
Vues

65
Les vues
• Une vue est une pseudo-table ou table virtuelle.
• Sauvegarde d’une requête complexe
• Du point de vue de l’utilisateur, il n’y a pas de
différence par rapport à une table de la base.
• Du point de vue du système, c’est du code (requête)
précompilé et stocké, prêt à être exécuté.
• Les vues permettent d'assurer l'objectif
d'indépendance logique. Ainsi, chaque utilisateur aura
sa vision propre des données.
• On peut construire une vue à partir d’autres tables
et/ou d’autres vues.

Les vues
•Créer une vue
La commande CREATE VIEW permet de créer une vue en
spécifiant la requête (SELECT) constituant sa définition :

CREATE [OR REPLACE] [ FORCE | NOFORCE]


VIEW nom_vue [ ( col1 [,col2]…)] AS REQUETE
[ WITH CHECK OPTION [CONSTRAINT contrainte]]
[ WITH READ ONLY ]

66
Les vues
CREATE [OR REPLACE] [ FORCE | NOFORCE] VIEW
nom_vue [ ( col1 [,col2]…)] AS REQUETE
[ WITH CHECK OPTION [CONSTRAINT nom_contr]]
[ WITH READ ONLY [CONSTRAINT nom_contr]]

REQUETE : Toutes les clauses sauf ORDER BY

WITH CHECK OPTION


OR REPLACE spécifie
: recrée la vue si que
elle seulement
existe déjà.les lignes
accessibles parlalavue,
FORCE : créer vueque
peuvent être
la (les) M.A.J.existe(nt) ou non.
table(s)
WITH READcréer
NO FORCE ONLYlaempêche toute action
vue seulement de LMD
si la table sur la vue.
existe.

Vues simples – Vues complexes

• Vues simples : 1e seule table, ni de FG


ni groupement – LMD possible

• Vues complexes : ++ tables, jointures,


peut contenir des FG ou groupements –
LMD sous conditions.

67
Vues et LMD
• Suppression interdite si:
– FG
– Group by
– Distinct
• MAJ interdite si :
– Ci-dessus
– Colonnes définies par des expressions.
• Insertion interdite si :
– Ci-dessus
– Les tables de bases contiennes des colonnes NOT NULL
non sélectionnées par la vues

Les vues
• Exemple : Vue constituant une sélection
de la table EMP aux employés du
département 10.
CREATE VIEW emp10 AS
SELECT *
FROM emp
WHERE n_dept = 10 ;
• Supprimer une vue
DROP VIEW nom_vue;

68