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
Libérer: 2024-12-29 22:45:24
original
706 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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       |
Copier après la connexion

Requête 1 :

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

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'
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal