1.1 Mécanisme de la jointure (interne)
Principe du JOIN, INNER JOIN
On veut créer une "nouvelle" table qui possède tous les attributs de la table 1 et tous les attributs de la table 2.
Pour cela, on part d'une première table (disons la table 1 qui possède une clé étrangère) : pour chacun des n-uplets 1, on va cherche (dans l'autre table) le n-uplet 2 pour lequel la valeur de la clé primaire correspond à la valeur de la clé étrangère. On crée alors un nouvel n-uplet à partir du n-uplet 1 en rajoutant les valeurs du n-uplet 2 pour les attributs manquants.
On obtient alors un nouveau n-uplet, plus complet. Comme si nous n'avions qu'un seul tableau.
Notez bien qu'ici, nous ne formons aucun n-uplet incomplet dans notre réponse : les entrées pour lesquelles la clé étrangère est non renseignée n'apparaissent pas dans la réponse.
Avec une telle jointure, le jeu Donkey Kong n'apparaîtra plus. C'est comme ça.
C'est ce qu'on nomme une jointure interne (INNER JOIN). C'est la jointure la plus commune.
Exemple de fonctionnement avec Python
Les n-uplets nommés sont implémentés par des dictionnaires (on prendrait des tuples pour de simples n-uplets).
Chaque table est donc une list-python de dictionnaires : list[dict].
Voici comment on peut réaliser la jointure :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 |
|
Voici l'affichage obtenu dans la console après jointure : on obtient bien des dictionnaires qui ont les clés des deux tables jeu et console réunies et avec une jointure correctement réalisée.
{'j_id': 7, 'j_jeu': 'Flight Simulator', 'j_description': "Simulation d'avion", 'j_sortie': 1980, 'j_éditeur': 'subLOGIC', 'j_genre': 'Simulateur', 'j_id_support': 1, 'c_id': 1, 'c_nom': 'Apple II', 'c_RAM': '4 ko', 'c_date_sortie': '1977-06-10'}
{'j_id': 9, 'j_jeu': 'PIFALL!', 'j_description': 'Pitfall Harry, un explorateur', 'j_sortie': 1982, 'j_éditeur': 'Activision', 'j_genre': 'Plate-formes', 'j_id_support': 2, 'c_id': 2, 'c_nom': 'Atari 2600', 'c_RAM': '4 ko', 'c_date_sortie': '1977-10-14'}
{'j_id': 10, 'j_jeu': 'PIFALL!', 'j_description': 'Pitfall Harry, un explorateur', 'j_sortie': 1983, 'j_éditeur': 'Nintendo', 'j_genre': 'Plate-formes', 'j_id_support': 3, 'c_id': 3, 'c_nom': 'C64', 'RAM': 'c_64 ko', 'c_date_sortie': '1982-08-01'}
{'j_id': 11, 'j_jeu': 'Boulder Dash', 'j_description': 'Rockford, mineur téméraire', 'j_sortie': 1983, 'j_éditeur': 'First Star Software', 'j_genre': 'Plate-formes', 'j_id_support': 3, 'c_id': 3, 'c_nom': 'C64', 'RAM': 'c_64 ko', 'c_date_sortie': '1982-08-01'}
D'autres types de jointure existent, nous n'en parlerons pas ici.