2014-05-04 39 views
1

有這兩個代碼是否有替代內部連接

select a.firstname, 
     a.lastname, 
     b.salary, 
     b.designation 
from table a, 
    table b 
where a.id = b.id 

select a.firstname, 
     a.lastname, 
     b.salary, 
     b.designation 
from table a inner join table b on a.id = b.id 
+2

不,這是正確的。 你還沒有看下面的答案。 – Nisar

+1

@radha - 你爲什麼不認爲這是正確的;你認爲它不會奏效,或者你不喜歡這種風格? –

回答

3

功能,沒有這些具體的查詢是相同的東西之間的不同。第二種是使用ANSI連接語法,自SQL-92以來它一直是標準語言,可在Oracle since 9i中找到。儘管兩者仍然有效,但在使用外部連接時還需要使用ANSI語法。

新的風格通常是優選的,部分是因爲舊的風格使得它可能意外地通過省略連接條件引進笛卡爾乘積 - 你不能用join語法(意外做,你仍然可以做一個cross join如果你真的想要這樣做),它可以使你的加入/過濾意圖更清晰。許多人發現閱讀起來比較容易,但這是一個意見問題,所以這方面是無關緊要的。

Oracle recommend you use ANSI joins,至少在外部連接。從計劃和追蹤中可以看到,Oracle實際上仍然在內部將ANSI語法轉換爲舊格式,只要您的查詢是正確的(即沒有缺失條件),那麼就沒有性能差異;優化器仍然可以選擇使用基於where子句的索引,而不僅僅是on子句。

這裏很多人會建議你使用ANSI語法從一開始,如果你是新來的Oracle。當然,並不是每個人都同意;例如,有一個參考文獻here以反對聲音。