2012-11-27 89 views
1

可能重複:
ANSI joins versus 「where clause」 joins內部聯接與正常查詢

我們可以通過下面的方法正確查詢兩個表?

SELECT customer.name 
FROM customer 
INNER JOIN order 
ON customer.cus_id=order.cus_id 
ORDER BY customer.name 


SELECT c.name 
FROM customer c, order o 
WHERE 
c.cus_id=o.cus_id 
ORDER BY c.name 

將join用於後者的優點是什麼?

+0

它們都是連接 - 後者只是使用隱式連接符號。請參閱:http://en.wikipedia.org/wiki/Join_(SQL)#Inner_join – nickhar

回答

4

執行沒有區別。這兩個是剛剛寫入不同的相同查詢。

2

對於這兩個確切的查詢沒有區別。查詢計劃員將爲他們創建完全相同的查詢計劃。

一般來說,使用join更加靈活,除了inner join你也有left outer joinright outer joincross join

有針對「舊風格」加入這些變化的語法,但畢竟是非標準的,例如在SQL Server 2005中

1

棄用對於什麼是值得的INNER JOIN的區別與「正常「查詢不準確。

逗號樣式連接語法在ANSI SQL-89標準中定義。然後他們意識到他們不能用這種語法做一些類型的連接。正如@Guffa提到的,Oracle和Sybase發明了自己專有的增強功能來加入句法來處理外連接。

在ANSI SQL-92中,標準引入了INNER/OUTER JOIN語法選項。但爲了向後兼容,舊語法仍然受支持,至今仍在規範中。所以他們都是標準。

自從顯式連接語法成爲官方SQL標準的一部分以來,它已經有20年了。現在是時候您接受作爲「正常」語法。

哪種性能更好?他們都表現完全一樣。所有合理的SQL實現都以相同的方式處理連接,並且這兩種語法形式都調用相同的代碼。

我發現SQL-92 JOIN語法更清晰。如果您有多個表的聯接,則可以將聯接表達式放置在聯接表的旁邊。如果你使用舊的語法,你的WHERE子句會混雜許多術語,而且很難理清每個術語使用哪個連接表。

有些人堅持舊的SQL-89風格更清晰,但他們錯了。 :-)