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.
![La jointure des deux tables On rajoute les infos sur la console en plus des infos sur le jeu lui-même](https://doc.infoforall.fr/activite/donnees/images/bdd_sql/jointure_interne.png)
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.