2011-05-03 85 views

回答

0

他們很可能會進行優化,由RDBMS同樣的事情。他們都JOINA.ID = B.ID標準的表。

但是,JOIN語法是明確的並被認爲是正確的。

0

前者是ANSI-89語法,後者是ANSI-92語法。後者應該幾乎總是被使用,因爲當你用ANSI-92語法表示時開始使用外部連接時它會更清晰。

0

第一種語法是(如您所指出的)兩個表的交叉連接或笛卡爾乘積。在沒有優化器(或優化器不佳)的系統中,這將產生第一個表中每個記錄與第二個表中每個記錄的組合,然後將它們過濾爲只匹配WHERE子句的那些記錄。

這兩個語句的輸出都是一樣的,如果你使用的系統有一個好的優化器,那麼性能也是一樣的。

兩個意見,我會提供:

1)我覺得寫的語句時,它最好是明確你的意圖。如果您打算執行INNER JOIN,則使用INNER JOIN語法。未來你6個月的形式現在將感恩。

2)SQL Server中的優化器將在這種情況下執行一個INNER JOIN(至少是最近的版本,不能保證所有版本),但是它如何猜測該路徑將取決於SQL的版本服務器引擎並不保證將來保持不變(我懷疑它會在這種情況下發生變化,但是鍵入的幾個字符的成本真的很高?)

0

@ypercube正確地指出了你的問題是關於兩種不同的INNER JOIN語法。您沒有任何外部連接語法。正如@Matt Whitfield指出的那樣,第一種語法是ANSI-92,第二種是ANSI-89樣式。我完全同意,在更復雜的查詢中,ANSI-92語法更具可讀性。

此外,取決於您的SQL Server版本ANSI-89語法是DEPRECATED,可以給你的問題。請參閱SR0010: Avoid using deprecated syntax when you join tables or views事實上,在下一個版本的SQL 2011或Denali中,或者我們稱之爲的任何東西,ANSI-89語法都將不受支持。參見:Features Not Supported in the Next Version of SQL Server (搜索單詞「join」)。