Les jointures naturelles

Vous avez sûrement déjà travaillé avec des tables en relation les unes avec les autres dans une base de données. Puis écris des jointures sur plusieurs lignes en vous demandant comment vous aviez appelé les champs de la jointure dans chacune des tables.

Et bien vous allez être surpris de la puissance de la jointure naturel.


Le problème

Imaginons 2 tables : les utilisateurs et les articles qu’ils rédigent.

CREATE TABLE `laboratoire`.`utilisateur` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nom` VARCHAR( 20 ) NOT NULL ,
`prenom` VARCHAR( 20 ) NOT NULL
) ENGINE = MYISAM ;
 
CREATE TABLE `laboratoire`.`article` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`utilisateur_id` INT NOT NULL ,
`titre` VARCHAR( 20 ) NOT NULL
) ENGINE = MYISAM ;


Avec ces tables, la requête que vous devez écrire pour la jointure est la suivante :

SELECT *
FROM article
INNER JOIN utilisateur
ON article.utilisateur_id = utilisateur.id;
id utilisateur_id titre id nom prenom
1 1 aze 1 PEREZ Olivier

Ici nous avons été obligé d’écrire 4 lignes en trouvant quel était le champs de la table « article » qui faisait référence à la table « utilisateur« .


Solution

La solution que je vous propose dans cet article est la jointure naturelle. Mais commençons par réécrire nos tables pour nommer de la même façon les deux champs qui organisent la jointure, à savoir article.utilisateur_id et utilisateur.id.

CREATE TABLE `laboratoire`.`utilisateur` (
`utilisateur_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`utilisateur_nom` VARCHAR( 20 ) NOT NULL ,
`utilisateur_prenom` VARCHAR( 20 ) NOT NULL
) ENGINE = MYISAM ;
 
CREATE TABLE `laboratoire`.`article` (
`article_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`utilisateur_id` INT NOT NULL ,
`article_titre` VARCHAR( 20 ) NOT NULL
) ENGINE = MYISAM ;


Maintenant écrivons notre requête sans se fatiguer :

SELECT *
FROM article
NATURAL JOIN utilisateur;


utilisateur_id article_id article_titre utilisateur_nom utilisateur_prenom
1 1 aze PEREZ Olivier

Et voilà, le resultat arrive rapidement et de façon très clair. On comprends tout de suite de quelle table vient quelle valeur.

En prenant deux secondes pour créer une base de données avec des champs bien nommés on peut faire des requêtes SQL plus propres et plus faciles à comprendre.

Tagués avec : , , ,
Publié dans MySQL

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*