Persistance des données I
DON2
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier, Bruno
Motry, Selim Rexhep, Mathieu Sassolas
Haute École Bruxelles-Brabant
École Supérieure d’Informatique
Année académique 2024 / 2025
Plan du cours
0 – Présentation
1 – Introduction
2 – Le modèle relationnel
3 – SQL : Projection et sélection
4 – SQL : Fonctions agrégatives
5 – SQL : DDL-DML
6 – SQL : Contraintes
7 – SQL : Jointures
8 – Les modèles non relationnels
5 – Jointure
1 Introduction
2 Algèbre relationnelle
3 SQL - Produit cartésien
4 SQL - Jointure
5 SQL - Jointure - Sémantique
6 SQL - Jointure - Exercices
7 SQL - Jointure - Clé étrangère réflexive
8 SQL - Jointure - Clé étrangère nulle
Introduction
Introduction
La jointure permet de produire une table constituée de données extraites
de plusieurs tables :
SELECT ncom, dateCom, [Link], nom, localite
FROM commande
JOIN client ON [Link] = [Link]
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 4 / 31
Introduction
Rappel - Identifiants et clés étrangères
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 5 / 31
Algèbre relationnelle
Algèbre relationnelle - Introduction
Produit cartésien
Le produit cartésien de A et B est noté A × B
Jointure
La jointure, notée
(A) ./<condition> (B),
est l’ensemble des lignes du produit cartésien qui vérifient la condition.
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 6 / 31
Algèbre relationnelle
Algèbre relationnelle - Produit cartésien
A×B =
a1 a2 a3 b1 b2 b3
10 aaaa 15 33 xxxx 10
10 aaaa 15 15 bbbb 40
10 aaaa 15 41 tttt 40
10 aaaa 15 49 dddd 75
20 bbbb 15 33 xxxx 10
20 bbbb 15 15 bbbb 40
20 bbbb 15 41 tttt 40
20 bbbb 15 49 dddd 75
30 cccc 22 33 xxxx 10
30 cccc 22 15 bbbb 40
30 cccc 22 41 tttt 40
30 cccc 22 49 dddd 75
40 dddd 33 33 xxxx 10
40 dddd 33 15 bbbb 40
40 dddd 33 41 tttt 40
40 dddd 33 49 dddd 75
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 7 / 31
Algèbre relationnelle
Algèbre relationnelle - Jointure
(A) ./a1=b3 (B) =
a1 a2 a3 b1 b2 b3
10 aaaa 15 33 xxxx 10
10 aaaa 15 15 bbbb 40
10 aaaa 15 41 tttt 40
10 aaaa 15 49 dddd 75
20 bbbb 15 33 xxxx 10
20 bbbb 15 15 bbbb 40
20 bbbb 15 41 tttt 40
20 bbbb 15 49 dddd 75
30 cccc 22 33 xxxx 10
30 cccc 22 15 bbbb 40
30 cccc 22 41 tttt 40
30 cccc 22 49 dddd 75
40 dddd 33 33 xxxx 10
40 dddd 33 15 bbbb 40
40 dddd 33 41 tttt 40
40 dddd 33 49 dddd 75
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 8 / 31
Algèbre relationnelle
Algèbre relationnelle - Jointure
(A) ./a1=b3 (B) =
a1 a2 a3 b1 b2 b3
10 aaaa 15 33 xxxx 10
40 dddd 33 15 bbbb 40
40 dddd 33 41 tttt 40
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 9 / 31
Algèbre relationnelle
Algèbre relationnelle - Jointure
(A) ./a16=b3 (B) =
a1 a2 a3 b1 b2 b3
10 aaaa 15 33 xxxx 10
10 aaaa 15 15 bbbb 40
10 aaaa 15 41 tttt 40
10 aaaa 15 49 dddd 75
20 bbbb 15 33 xxxx 10
20 bbbb 15 15 bbbb 40
20 bbbb 15 41 tttt 40
20 bbbb 15 49 dddd 75
30 cccc 22 33 xxxx 10
30 cccc 22 15 bbbb 40
30 cccc 22 41 tttt 40
30 cccc 22 49 dddd 75
40 dddd 33 33 xxxx 10
40 dddd 33 15 bbbb 40
40 dddd 33 41 tttt 40
40 dddd 33 49 dddd 75
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 10 / 31
Algèbre relationnelle
Algèbre relationnelle - Jointure
(A) ./a16=b3 (B) =
a1 a2 a3 b1 b2 b3
10 aaaa 15 15 bbbb 40
10 aaaa 15 41 tttt 40
10 aaaa 15 49 dddd 75
20 bbbb 15 33 xxxx 10
20 bbbb 15 15 bbbb 40
20 bbbb 15 41 tttt 40
20 bbbb 15 49 dddd 75
30 cccc 22 33 xxxx 10
30 cccc 22 15 bbbb 40
30 cccc 22 41 tttt 40
30 cccc 22 49 dddd 75
40 dddd 33 33 xxxx 10
40 dddd 33 49 dddd 75
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 11 / 31
Algèbre relationnelle
Algèbre relationnelle - Exercices
Pour les deux relations suivantes :
calculez :
1 le produit cartésien Client × Commande
2 la jointure
(Client) ./nCli=cli (Commande)
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 12 / 31
SQL - Produit cartésien
SQL - Produit cartésien
SELECT ∗ FROM commande,client
Pas de condition de jointure
On obtient donc le produit cartésien : chaque ligne de COMMANDE est
couplée avec chaque ligne de CLIENT
La requête est valide mais d’une utilité réduite dans ce cas. Utile
quand on veut combiner toutes les lignes d’une table avec toutes les lignes
d’une autre table.
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 13 / 31
SQL - Jointure
SQL - Jointure
La jointure permet de produire une table constituée de données extraites
de plusieurs tables :
SELECT ncom, datecom, [Link], nom, localite
FROM commande
JOIN client ON [Link] = [Link] ;
Il faut préfixer les noms de colonne s’il y a ambiguïté
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 14 / 31
SQL - Jointure
SQL - Jointures
SELECT liste d’expressions
FROM table1
JOIN table2 ON condition de jointure ;
Une condition de jointure sera souvent de la forme :
Clé étrangère = identifiant primaire de la table référencée. (FK=ID)
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 15 / 31
SQL - Jointure
SQL - Jointures
Exemple :
SELECT [Link], nom, datecom, npro
FROM Client
JOIN commande
ON [Link] = [Link]
JOIN Detail
ON [Link] = [Link]
Jointure sur 3 tables
Quelle est la sémantique de la requête ?
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 16 / 31
SQL - Jointure
SQL - Jointures
Exemple :
SELECT ncom, [Link], nom, datecom, adresse
FROM client
JOIN commande ON [Link] = [Link]
WHERE cat = ’C1’ AND datecom < ’23−12−2009’
Condition de jointure
+
condition de sélection
Quelle est la sémantique de la requête ?
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 17 / 31
SQL - Jointure
SQL - Jointures - Lignes célibataires
SELECT localite, [Link], nom, ncom, datecom
FROM client
JOIN commande ON [Link] = [Link] ;
Nous obtenons les clients ayant passé au moins une commande.
Cette requête ignore les lignes de CLIENT qui n’ont pas de lignes
correspondantes dans COMMANDE
Ces lignes de CLIENT n’ayant pas de correspondance dans COMMANDE
sont dites célibataires.
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 18 / 31
SQL - Jointure
SQL - Jointures - Valeurs dérivées
Exemple :
SELECT ncom, [Link], qcom∗prix
FROM detail d
JOIN produit p ON [Link] = [Link]
d et p sont des alias de table
Quelle est la sémantique de la requête ?
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 19 / 31
SQL - Jointure
SQL - Jointures - Valeurs dérivées
Exemple :
SELECT ’Montant commande 30184 = ’, SUM(qcom∗prix)
FROM detail d JOIN produit p
ON [Link] = [Link]
WHERE [Link] = ’30184’
jointure + clause WHERE + fonction agrégative
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 20 / 31
SQL - Jointure - Sémantique
SQL - Jointures - Sémantique
Une ligne de CLIENT représente un client.
Une ligne de COMMANDE représente une commande.
Que représente chaque ligne de la jointure
(client c) ./[Link]=[Link] (commande m)
SELECT [Link], nom, localite
FROM client c
JOIN commande m ON [Link] = [Link] ;
un client ?
un client qui a passé une commande ?
une commande ?
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 21 / 31
SQL - Jointure - Sémantique
SQL - Jointures - Sémantique
(client c) ./[Link]=[Link] (commande m)
SELECT [Link], nom, localite
FROM client c
JOIN commande m ON [Link] = [Link] ;
Autre formulation : il y a autant de lignes dans le résultat qu’il y a
de clients ?
de clients qui ont passé des commandes ?
de commandes ?
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 22 / 31
SQL - Jointure - Sémantique
SQL - Jointures - Sémantique
Le résultat d’une jointure FK/ID représente les entités de la table de la clé
étrangère
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 23 / 31
SQL - Jointure - Sémantique
SQL - Jointures - Sémantique
SELECT ncli, [Link], datecom, npro
FROM detail d
JOIN commande c ON [Link] = [Link] ;
SELECT localite, [Link], [Link], libelle
FROM client c
JOIN commande com ON [Link] = [Link]
JOIN detail d ON [Link] = [Link]
JOIN produit p ON [Link] = [Link] ;
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 24 / 31
SQL - Jointure - Exercices
SQL - Jointures - Exercices
Donnez la sémantique de la requête suivante :
SELECT [Link], [Link], qcom, qstock
FROM detail
JOIN produit ON [Link] = [Link]
WHERE qcom > qstock ;
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 25 / 31
SQL - Jointure - Exercices
SQL - Jointures - Exercices
Donnez la sémantique de la requête suivante :
SELECT DISTINCT [Link], libelle, prix
FROM produit p
JOIN detail d ON [Link] = [Link]
JOIN commande com ON [Link] = [Link]
JOIN client c ON [Link] = [Link]
WHERE localite IN (0 Bruxelles 0 ,0 Liège 0 ,0 Namur 0 ) ;
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 26 / 31
SQL - Jointure - Exercices
SQL - Jointures - Exercices
Donnez la sémantique de la requête suivante :
SELECT DISTINCT [Link]
FROM commande
JOIN client ON [Link] = [Link]
WHERE compte < 0 ;
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 27 / 31
SQL - Jointure - Exercices
SQL - Jointures - Exercices
Si la table CLIENT comporte 16 lignes et la table COMMANDE 7,
combien de lignes seront retournées par la requête suivante ?
SELECT *
FROM commande
JOIN client ON [Link] != [Link] ;
Quel est sa sémantique ?
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 28 / 31
SQL - Jointure - Clé étrangère réflexive
SQL - Jointures - Clé étrangère réflexive
DptAdm est une clé étrangère vers DptNo.
C’est une clé étrangère réflexive (self-reference)
DptAdm est facultatif. Il peut être NULL.
Dessinez l’arborescence des départements suivants :
DptNo DptLib DptMgr DptAdm
A00 DEVELOPPEMENT 320 D21
B01 PRODUCTION 020 A00
C01 MAINTENANCE 030 A00
D11 SUPPORT 060 E11
D21 DIRECTION 070 null
E01 MARKETING 050 E11
E11 VENTES 340 D21
E21 FORMATION 100 E11
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 29 / 31
SQL - Jointure - Clé étrangère réflexive
SQL - Jointures - Clé étrangère réflexive
DptNo DptLib DptMgr DptAdm
A00 DEVELOPPEMENT 320 D21
B01 PRODUCTION 020 A00
C01 MAINTENANCE 030 A00
D11 SUPPORT 060 E11
D21 DIRECTION 070 null
E01 MARKETING 050 E11
E11 VENTES 340 D21
E21 FORMATION 100 E11
Que retournera la requête suivante sur la table ci-dessus ?
SELECT [Link], [Link], [Link]
FROM departement sup
JOIN departement dpt ON [Link] = [Link] ;
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 30 / 31
SQL - Jointure - Clé étrangère nulle
SQL - Jointures - Clé étrangère nulle
DptNo DptLib DptMgr DptAdm
A00 DEVELOPPEMENT 320 D21
B01 PRODUCTION 020 A00
C01 MAINTENANCE 030 A00
D11 SUPPORT 060 E11
D21 DIRECTION 070 null
E01 MARKETING 050 E11
E11 VENTES 340 D21
E21 FORMATION 100 E11
La requête suivante sur la table ci-dessus retournera combien de lignes ?
SELECT [Link], [Link], [Link]
FROM departement sup
JOIN departement dpt ON [Link] != [Link] ;
Quel est sa sémantique ?
Zakaria Attaouil, Abderrahmen Belfikh, Geneviève Cuvelier,
Persistance
Bruno Motry,
des données
Selim IRexhep, Mathieu Sassolas (HE2B
2024-2025
- ÉSI) 31 / 31