2012-09-19 21 views
1

鑑於這兩個表:JOIN操作應該被多表SELECT所取代嗎?

A.a B.b 
-  - 
1  3 
2  4 
3  5 
4  6 

如果我想交叉匹配我都可以做

SELECT * FROM A, B WHERE A.a = B.b; # and 
SELECT * FROM A INNER JOIN B ON (A.a = B.b) 

或者,如果我想要一個LEFT OUTER JOINRIGHT OUTER JOIN

SELECT * FROM A,B WHERE A.a = B.b(+); # and 
SELECT * FROM A LEFT OUTER JOIN B ON (A.a = B.b) 

但是,在查詢語句之間是否存在任何引擎/性能差異?

+3

不,他們產生完全相同的查詢計劃。 –

+0

他們***應該***生成相同的計劃。但在* some * RDBMS上,舊的記法*有時會失敗;給一個可憐的查詢計劃或可能甚至不正確的查詢計劃*(以及不正確的結果)* - 雖然這很少見,但我遇到過。 ANSI-92語法不容易出現這個問題,並且更具可讀性。 – MatBailie

回答

4

他們最有可能在現代RDBMS上生成相同的計劃。該JOIN語法是自1992年以來

0

理論上的ANSI SQL語法,多選將首先選擇了從兩個表,存儲在內存中的所有數據,然後將每個比較給大家。但在實踐中,沒有數據庫會做到這一點。任何現代數據庫都會優化此查詢,以便同時處理多選和JOIN版本。