2010-02-03 4 views
3

Ces requêtes sont-elles toutes deux des représentations de equi join?SQL Server Requêtes de equi join

Je trouve que les deux retournent le même résultat.

Query1:

SELECT C.* FROM [Case] A, [Event] B, Notice C 
WHERE A.CaseID = B.CaseID 
AND B.EventID = C.EventID 

Query2:

SELECT C.* FROM [Case] A 
join [Event] B on A.CaseID = B.CaseID 
join Notice C on B.EventID = C.EventID 

S'il vous plaît préciser.

Répondre

4

Oui, mêmes requêtes, syntaxe différente.

La deuxième requête est mieux écrit:

SELECT C.* 
FROM [Case] A 
inner join [Event] B on A.CaseID = B.CaseID 
inner join Notice C on B.EventID = C.EventID 

La deuxième requête en utilisant la syntaxe ANSI a quelques avantages par rapport à la première:

  • facile à voir lorsque vous avez une clause ON manquante
  • rend clair ce que genre de jointure est fait
  • sépare JOIN clause de WHERE clause
+0

Cool .. Merci les gars! –

+0

Bien sûr, c'est la syntaxe la plus récente, l'autre est 18 ans obsolète pour les raisons que vous avez expliquées ci-dessus. Il est également plus facile de maintenir la main, surtout lorsque vous avez besoin d'ajouter des jointures à gauche car la syntaxe à l'ancienne n'a pas un bon support pour les jointures à gauche (dans SQL Server au moins). En fait, ils sont déconseillés et en ce moment dans le serveur SQL, ils peuvent renvoyer des résultats incorrects car l'optimisé est confus quant à savoir s'il s'agit d'une jointure à gauche ou d'une jointure croisée. – HLGEM

+0

Bons points - plus j'ai une ** aversion forte ** à la syntaxe pré-ANSI :) – RedFilter

0

Lorsque vous utilisez la virgule dans la clause FROM, c'est la même chose que le mot-clé JOIN. Habituellement, vous utilisez INNER JOIN ou une forme de OUTER JOIN qui donne des résultats beaucoup plus efficaces.