Maison >base de données >tutoriel mysql >Clause ON ou WHERE dans les JOIN : quand dois-je utiliser lequel ?
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
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!