Il n'y a pas de type de jointure «meilleur» ou «pire». Ils ont une signification différente et doivent être utilisés en fonction de celle-ci.
Dans votre cas, vous ne probablement pas les employés sans work_log (aucune ligne dans cette table), donc LEFT JOIN
et JOIN
sera équivalent dans les résultats. Cependant, si vous aviez une telle chose (un nouvel employé sans journal de travail enregistré), un wold omettrait JOIN
cet employé, tandis qu'une jointure gauche (dont la première table est des employés) les afficherait tous, et des valeurs nulles dans les champs de work_log s'il y avait ne sont pas des correspondances.
Encore une fois, les performances sont une chose secondaire pour interroger l'exactitude. Certaines personnes disent que vous ne devriez pas utiliser LEFT JOIN
le par. Il est vrai qu'un LEFT JOIN force l'optimiseur à exécuter la requête dans un ordre particulier, empêchant certaines optimisations (réorganisation des tables) dans certains cas. Voici un exemple . Mais vous ne devez pas choisir l'un plutôt que l'autre si l'exactitude / la signification est sacrifiée, car une INNER JOIN n'est pas intrinsèquement pire. Le reste des optimisations habituelles s'appliquent comme d'habitude.
En résumé, ne l'utilisez pas LEFT JOIN
si vous voulez vraiment dire INNER JOIN
.
Dans MySQL CROSS JOIN
, INNER JOIN
et JOIN
sont les mêmes. Dans la norme et sémantiquement, a CROSS JOIN
est un INNER JOIN
sans ON
clause, vous obtenez donc toutes les combinaisons de lignes entre les tables.
Vous avez des exemples de tous les types de jointures sémantiques sur Wikipédia . En pratique, dans MySQL, nous avons tendance à écrire uniquement JOIN
et LEFT JOIN
.
JOIN
sans réserve impliqueINNER JOIN
Quelle jointure est plus performante si toutes fournissent le même résultat?
J'ajoute la réponse précédente, pour ce que je sais, MySQL est optimisé pour avoir les mêmes performances.
Avec de bons index, par exemple, la clause
JOIN
vsLEFT JOIN
+WHERE
à filtrer, ce sera la même chose. L'optimisation par rapport à la lecture humaine prend tout son sens sur les grandes requêtes avec beaucoup de jointures.L'utilisation de bons index et d'un bon cache est plus importante.
Vous pouvez lire une bonne explication du processus d'optimisation ici:
Le processus d'optimisation des requêtes : une requête peut souvent être exécutée de différentes manières et produire le même résultat. Le travail de l'optimiseur consiste à trouver la meilleure option.
la source