Maison > base de données > tutoriel mysql > LEFT JOIN en SQL : quelle est la principale différence entre les clauses « ON » et « WHERE » ?

LEFT JOIN en SQL : quelle est la principale différence entre les clauses « ON » et « WHERE » ?

Barbara Streisand
Libérer: 2025-01-03 00:18:40
original
631 Les gens l'ont consulté

LEFT JOIN in SQL:  What's the Key Difference Between `ON` and `WHERE` Clauses?

LEFT JOIN avec conditions : où est la différence entre ON et WHERE ?

Dans SQL Server, LEFT JOIN combine les lignes de deux tables en fonction de une condition de jointure spécifiée. Alors que la clause ON définit la condition de jointure dans l'instruction LEFT JOIN, la clause WHERE filtre les lignes après l'opération de jointure. Cette distinction subtile peut conduire à des résultats inattendus si elle n'est pas correctement comprise.

Considérez la requête suivante :

SELECT t1.f2
FROM   t1
LEFT JOIN t2
ON t1.f1 = t2.f1 AND cond2 AND t2.f3 > something
Copier après la connexion

Étonnamment, cette requête ne produit pas les mêmes résultats que la suivante :

SELECT t1.f2
FROM   t1
LEFT JOIN t2
ON t1.f1 = t2.f1 AND cond2
WHERE  t2.f3 > something
Copier après la connexion

L'explication

La clause ON joue un rôle crucial pour déterminer quel les lignes participent à la jointure. La condition spécifiée dans ON doit être vraie pour que les lignes correspondent et soient incluses dans le résultat de la jointure. En revanche, la clause WHERE filtre les lignes déjà jointes.

Dans la première requête, la condition t2.f3 > quelque chose fait partie de la clause ON. Par conséquent, seules les lignes où t2.f3 est supérieur à quelque chose seront incluses dans la jointure. Cela signifie que toutes les lignes correspondantes où t2.f3 n'est pas supérieur à quelque chose seront exclues du résultat.

Dans la deuxième requête, la condition t2.f3 > quelque chose fait partie de la clause WHERE. Cette clause est évaluée une fois la jointure effectuée. Par conséquent, toutes les lignes qui satisfont à la condition de la clause ON (t1.f1 = t2.f1 et cond2) feront partie du résultat de la jointure. La clause WHERE filtre ensuite ces lignes, ne retenant que celles où t2.f3 est supérieur à quelque chose.

Exemple

Pour illustrer ce concept, considérons un tableau de candidats ( candidats) et un tableau des votes (votes). Si nous voulons trouver des candidats qui ont reçu des votes, nous pouvons utiliser un LEFT JOIN :

SELECT  *
FROM    candidates c
LEFT JOIN    
        votes v
ON      c.name = v.voted_for
Copier après la connexion

Cette requête renvoie tous les candidats, même ceux qui n'ont reçu aucun vote. Si on déplace la condition vers la clause WHERE :

SELECT  *
FROM    candidates c
LEFT JOIN    
        votes v
ON      c.name = v.voted_for
WHERE   v.voted_for IS NOT NULL
Copier après la connexion

Les résultats incluent désormais uniquement les candidats ayant reçu au moins un vote.

Conclusion

Comprendre la différence entre les clauses ON et WHERE dans un LEFT JOIN est crucial pour manipuler efficacement les données. En plaçant soigneusement les conditions dans les clauses appropriées, vous pouvez vous assurer que vos requêtes renvoient les résultats souhaités.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal