Dans le langage SQL, la commande NATURAL JOIN permet de faire une jointure naturelle entre 2 tables. Cette jointure s’effectue à la condition qu’il y ai des colonnes du même nom et de même type dans les 2 tables. Le résultat d’une jointure naturelle est la création d’un tableau avec autant de lignes qu’il y a de paires correspondant à l’association des colonnes de même nom.
A noter : puisqu’il faut le même nom de colonne sur les 2 tables, cela empêche d’utiliser certaines règles de nommages pour le nom des colonnes. Il n’est par exemple pas possible de préfixer le nom des colonnes sous peine d’avoir malheureusement 2 nom de colonnes différents.
Syntaxe
La jointure naturelle de 2 tables peut s’effectuer facilement, comme le montre la requête SQL suivante :
SELECT * FROM table1 NATURAL JOIN table2
L’avantage d’un NATURAL JOIN c’est qu’il n’y a pas besoin d’utiliser la clause ON.
Exemple
Une utilisation classique d’une telle jointure pourrait être l’utilisation dans une application qui utilise une table utilisateur et une table pays. Si la table utilisateur contient une colonne pour l’identifiant du pays, il sera possible d’effectuer une jointure naturelle.
Table “utilisateur” :
user_id | user_prenom | user_ville | pays_id |
---|---|---|---|
1 | Jérémie | Paris | 1 |
2 | Damien | Montréal | 2 |
3 | Sophie | Marseille | NULL |
4 | Yann | Lille | 9999 |
5 | Léa | Paris | 1 |
Table “pays” :
pays_id | pays_nom |
---|---|
1 | France |
2 | Canada |
3 | Belgique |
4 | Suisse |
Pour avoir la liste de tous les utilisateurs avec le pays correspondant, il est possible d’effectuer une requête SQL similaire à celle-ci:
SELECT * FROM utilisateur NATURAL JOIN pays
Cette requête retournera le résultat suivant :
pays_id | user_id | user_prenom | user_ville | pays_nom |
---|---|---|---|---|
1 | 1 | Jérémie | Paris | France |
2 | 2 | Damien | Montréal | Canada |
NULL | 3 | Sophie | Marseille | NULL |
9999 | 4 | Yann | Lille | NULL |
1 | 5 | Léa | Paris | France |
Cet exemple montre qu’il y a bien eu une jointure entre les 2 tables grâce à la colonne “pays_id” qui se trouve dans l’une et l’autre des tables.