Maison >base de données >tutoriel mysql >Clause ON ou WHERE dans les JOIN : quand dois-je utiliser lequel ?

Clause ON ou WHERE dans les JOIN : quand dois-je utiliser lequel ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-05 00:02:40994parcourir

ON vs. WHERE Clause in JOINs: When Should I Use Which?

Clause ON et clause WHERE dans les opérations JOIN

Lors de l'utilisation des opérations INNER JOIN, la clause ON et la clause WHERE peuvent être utilisées pour filtrer les données. Bien qu'elles puissent sembler interchangeables dans certains cas, il existe des différences subtiles qui méritent attention.

Clause ON

La clause ON est utilisée pour spécifier les conditions spécifiques qui doivent être remplies. pour les lignes à inclure dans le résultat de la jointure. Il filtre les données au niveau de la jointure, garantissant que seules les lignes des deux tables qui satisfont aux conditions spécifiées sont combinées.

Clause WHERE

La clause WHERE est utilisée pour filtrer lignes après l'opération de jointure. Il applique des conditions à l'ensemble de données combiné, affinant davantage les résultats.

Considérations sur les performances

En général, il n'y a pas de différence de performances significative entre l'utilisation de la clause ON ou de la clause WHERE pour filtrer les données dans les opérations INNER JOIN. Cependant, il existe des exceptions.

Jointures externes

Lors de l'utilisation de jointures externes, telles que LEFT OUTER JOIN, l'emplacement de la condition de filtre peut affecter les résultats. L'application du filtre dans la clause ON exclura les lignes de la table de droite (pour LEFT OUTER JOIN) qui ne remplissent pas la condition. D'un autre côté, l'application du filtre dans la clause WHERE filtrera les lignes de l'ensemble de données combiné après la jointure, renvoyant potentiellement plus de lignes.

Exemple :

Considérez le exemple suivant :

SELECT * 
FROM Foo f 
LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId) AND (b.IsApproved = 1);

Dans ce cas, utiliser la clause ON avec le filtre (b.IsApproved = 1) exclura tous lignes de Bar pour lesquelles IsApproved n'est pas défini sur 1.

Alternativement,

SELECT * 
FROM Foo f 
LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId)
WHERE (b.IsApproved = 1);

Cela effectuera d'abord l'opération de jointure, puis filtrera l'ensemble de résultats en fonction de la condition IsApproved, renvoyant potentiellement des lignes de Bar où IsApproved est NULL.

Autre Considérations

  • Pour les jointures internes simples, l'utilisation de la clause ON est généralement préférable car elle évite que la clause WHERE ne soit encombrée.
  • Des conditions complexes impliquant plusieurs jointures ou sous-requêtes peuvent être plus facile à gérer dans la clause WHERE.
  • L'utilisation de l'index doit être prise en compte lors de la sélection de la meilleure approche. Un filtre dans la clause ON peut utiliser un index sur la colonne de jointure, tandis qu'un filtre dans la clause WHERE peut nécessiter une analyse de table.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn