Posez votre question »

MySQL - Quelle jointure choisir ?

Juillet 2015




Cet article s'adresse aux débutants qui ont décidé de se lancer dans les jointures, ô combien utiles, mais qui se perdent entre les INNER et les OUTER.

Avant-propos


Une jointure permet de récupérer des informations provenant de plusieurs tables. Ces tables doivent être liées par au moins une colonne (un nom, un ID, un numéro de téléphone, ce que vous voulez, mais ces deux tables doivent avoir une colonne en commun). C'est ce qu'on appelle un critère de jointure.

INNER JOIN : intersection des tables


Le INNER JOIN (jointure interne) est à utiliser lorsque vous avez 2 tables, et que vous ne voulez récupérer que les informations des lignes présentes dans les deux.

Exemple : vous avez une table "personnes" qui contient plein de gens avec des données générales (personne_id, nom, prénom, adresse...). À côté, vous avez une table "ingenieurs" qui contient des informations propres aux ingénieurs (id_ingenieur, personne_id, nom d'entreprise, école...). On va admettre que votre base est propre et que tous les ingénieurs sont présents dans la table "personnes".
Maintenant vous voulez récupérer toutes les informations des ingénieurs, y compris adresse, nom, prénom... il vous faut donc les informations stockées dans les deux tables !
Ici notre critère de jointure est le "id_personne" présent dans les deux, et unique dans chacune des deux tables.

On va donc faire :
SELECT * 
FROM personnes p
     INNER JOIN ingenieurs i ON i.personne_id = p.personne_id;


On recupère alors toutes les informations des gens présents dans les deux tables !

OUTER JOIN : union des tables


Le OUTER JOIN (jointure externe) devient utile si on veut garder l'une ou l'autre des deux tables complètes. Dans l'exemple ci-dessus, on ne va récupérer qu'une partie de la table "personnes" (celles qui ont une ligne dans la table ingénieurs).

Alors on va spécifier qu'on veut garder la table "personnes" complète : on aura alors les données "ingenieurs" pour les ingénieurs, et des valeurs à vide pour les personnes absentes de la table ingenieurs. Pour cela, on utilise un OUTER JOIN.

LEFT OUTER JOIN


Le LEFT OUTER JOIN spécifie que c'est la première table citée qui doit rester complète.
Dans notre exemple, cela devient :
SELECT * 
FROM personnes p
     LEFT OUTER JOIN ingenieurs i ON i.personne_id = p.personne_id;


Voilà, avec ça vous avez toute la table "personnes" complétée avec les données de la table "ingenieurs" si elles existent.

RIGHT OUTER JOIN


C'est la même que le LEFT mais c'est ici la 2nde table qui sera gardée complète. Libre à vous de choisir entre un LEFT ou un RIGHT, mais vous verrez que dans certains cas de jointures en cascade, un cas peut se révéler plus pratique à utiliser.

Notre requête serait ici :
SELECT * 
FROM ingenieurs i 
     RIGHT OUTER JOIN personnes p ON p.personne_id = i.personne_id;


Notons au passage que dans notre exemple, les ingénieurs étant tous présents dans la table "personnes", le INNER JOIN se révèle être exactement la même chose qu'un OUTER JOIN réalisé sur la table des ingénieurs. Dans les deux cas celle-ci sera récupérée en entier.

FULL OUTER JOIN


Très utile aussi, le FULL OUTER JOIN permet de récupérer l'intégralité des données des deux tables. Beaucoup de colonnes seront alors à vide pour l'une ou l'autre des tables récupérées.

Ici on aurait :
SELECT * 
FROM personnes p
     FULL OUTER JOIN ingenieurs i ON i.personne_id = p.personne_id;


Ce serait une fois de plus rigoureusement équivalent au RIGHT et au LEFT join réalisés ci-avant puisque la table ingénieurs est déjà récupérée dans sa totalité.

Bref, à vous de voir maintenant quelle est la jointure qui vous convient le mieux !

Pour une lecture illimitée hors ligne, vous avez la possibilité de télécharger gratuitement cet article au format PDF :
Mysql-quelle-jointure-choisir.pdf

Réalisé sous la direction de , fondateur de CommentCaMarche.net.

A voir également

Dans la même catégorie

MySQL - ¿Qué tipo de combinación elegir?
Par Carlos-vialfa le 31 août 2012
Publié par Mihawk.
Ce document intitulé «  MySQL - Quelle jointure choisir ?  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.