LEFT JOIN avec condition : On vs. WHERE
Dans SQL Server, les LEFT JOIN sont souvent utilisés pour récupérer les données d'une table lors de la liaison vers une autre table via une colonne commune. Cependant, une distinction subtile apparaît lors de l'utilisation de conditions dans les clauses ON et WHERE, conduisant à des résultats différents.
Clause JOIN ON par rapport à la clause WHERE
La clause ON dans un LEFT JOIN spécifie la condition qui détermine quelles lignes de la table principale (table jointe) seront mises en correspondance avec les lignes de la table secondaire (table jointe). En revanche, la clause WHERE filtre l'ensemble de résultats une fois la jointure effectuée.
Exemple
Considérez les deux requêtes suivantes :
-- LEFT JOIN with Condition in ON Clause SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 AND t2.f3 > something; -- LEFT JOIN with Condition in WHERE Clause SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 WHERE t2.f3 > something;
Résultats
Étonnamment, ces deux requêtes ne produisent pas les mêmes résultats. La raison réside dans la différence entre les clauses JOIN et WHERE.
Dans la première requête, la condition de la clause ON restreint les lignes de t2 qui sont jointes à t1. Par conséquent, les lignes de t2 qui ne remplissent pas la condition (t2.f3 <= quelque chose) seront exclues de la jointure. Par conséquent, l'ensemble de résultats n'inclura pas les lignes de t1 qui auraient pu potentiellement correspondre aux lignes exclues de t2.
Dans la deuxième requête, la condition de la clause WHERE est appliquée après la jointure. a été effectuée. Par conséquent, toutes les lignes de t1 sont jointes à toutes les lignes de t2, qu'elles remplissent ou non la condition. Par la suite, la clause WHERE filtre les lignes qui ne remplissent pas la condition, fournissant un ensemble de résultats différent de celui de la première requête.
Conclusion
Comprendre la distinction entre les clauses ON et WHERE sont cruciales lorsque vous travaillez avec des LEFT JOIN. La clause ON détermine les lignes correspondantes pour la jointure, tandis que la clause WHERE filtre le jeu de résultats une fois la jointure terminée. Cette compréhension garantit que les résultats souhaités sont obtenus à partir de requêtes SQL impliquant des LEFT JOIN.
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!