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

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

DDD
DDDoriginal
2024-12-29 22:45:24738parcourir

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

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 :

  • Clause ON : Spécifie les conditions utilisées pour identifier les lignes correspondantes pour la jointure. Les lignes qui ne remplissent pas ces conditions sont exclues de l'ensemble de résultats joint.
  • Clause WHERE : Filtre les lignes de l'ensemble de résultats joint en fonction de conditions supplémentaires.

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!

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