2010-02-03 96 views
3

這些查詢都表示equi加入?SQL Server查詢表示equi加入

我發現兩者都返回相同的結果。

查詢1:

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 

請澄清。

回答

4

是的,相同的查詢,不同的語法。

第二個查詢是更好的寫法如下:

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

使用ANSI語法中的第二個查詢具有在第一一些優勢:

  • 容易看到當你有一個失蹤ON條款
  • 明確了什麼種類的加入正在完成
  • 分離JOIN子句WHERE子句
+0

很酷..謝謝你們! – 2010-02-03 16:14:53

+0

PLus當然是最近的語法,另一個是過時的18年,因爲你上面解釋過的原因。 由於舊式語法對左連接沒有很好的支持(至少在SQL Server中),所以特別是在需要添加左連接時更容易。實際上,它們已被棄用,並且現在在SQL服務器中,它們可能會返回不正確的結果,因爲優化會對它是左連接還是交叉連接感到困惑。 – HLGEM 2010-02-03 16:19:27

+0

好點 - 加上我對**之前的ANSI語法有**強烈的厭惡感:) – RedFilter 2010-02-03 16:22:20

0

在FROM子句中使用逗號時,它與關鍵字JOIN相同。通常,您將使用INNER JOIN或OUTER JOIN的形式,從而得到更有效的結果。