Les jointures gauches revisitées : la distinction entre les clauses ON et WHERE
Dans SQL Server, l'opération LEFT JOIN joue un rôle crucial dans la récupération des données à partir de plusieurs tables. Cependant, il existe une différence subtile mais significative entre la spécification des conditions de jointure dans la clause ON et la clause WHERE.
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
Cette requête tente de récupérer la colonne f2 de table t1, tout en joignant éventuellement les lignes du tableau t2 en fonction des valeurs correspondantes dans les colonnes f1 et de conditions supplémentaires (cond2 et t2.f3 > quelque chose).
En revanche, la requête suivante adopte une approche différente :
SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 WHERE t2.f3 > something
Ici, la condition de jointure est spécifiée uniquement dans la clause ON, tandis que t2.f3 > quelque chose de condition est ajouté comme filtre dans la clause WHERE.
Comprendre la différence
La principale différence entre ces deux requêtes réside dans l'ordre des opérations :
Exemple
Pour illustrer cette distinction, considérons un tableau de candidats (candidats) et un tableau de votes (votes) :
candidates | name | |-------------| | Obama | | Romney | votes | voter | voted_for | |-------------|-------------| | Mickey Mouse | Romney | | Donald Duck | Obama |
Requête 1 :
SELECT * FROM candidates c LEFT JOIN votes v ON c.name = v.voted_for AND v.voter = 'Donald Duck'
Cette requête récupère tous les candidats, y compris Romney, même si Donald Duck a voté pour Obama. En effet, la condition v.voter = 'Donald Duck' est spécifiée dans la clause ON, ce qui n'affecte que l'opération de jointure.
Requête 2 :
SELECT * FROM candidates c LEFT JOIN votes v ON c.name = v.voted_for WHERE v.voter = 'Donald Duck'
Dans cette requête, la condition v.voter = 'Donald Duck' est déplacée vers la clause WHERE. En conséquence, Romney est exclu de l'ensemble des résultats parce qu'il ne dispose pas d'un vote correspondant à celui de Donald Duck. Seul Obama, qui a reçu un vote de Donald Duck, est renvoyé.
Conclusion
Comprendre la distinction entre les clauses ON et WHERE dans les opérations LEFT JOIN est essentiel pour récupérer efficacement données dans SQL Server. En plaçant soigneusement les conditions dans la clause appropriée, vous pouvez contrôler les critères de correspondance et filtrer efficacement l'ensemble de résultats joint.
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!