2010-10-10 38 views
8

比方說,我有三個表,每一個涉及到另一個,如何以最佳方式組織內部聯接中(選擇)聲明

,當我需要從每個表得到一個列,這有區別如何組織(內連接)?

Select table1.column1,table2.column2,table3.column2 
From table1 
Inner Join table2 on ..... etc 
Inner Join table3 on ..... 

換句話說,我可以把(表2)之後(從)?

Select table1.column1,table2.column2,table3.column2 
From table2 
Inner Join table1 on ..... etc 
Inner Join table3 on ..... 

回答

14

對於大多數查詢,訂單無關緊要。

  • 內部聯接既是聯想和交換等等表的順序並不重要
  • SQL是聲明。也就是說,你如何定義查詢不是優化器如何實現的。它不會像你寫的那樣一行一行地完成它。

也就是說......

  • 外部聯接既不是聯想也不可交換
  • 對於複雜的查詢,優化器將「最佳猜測」,而不是通過所有可能去哪個"costs"太多。表順序可能這裏的問題
6

inner join操作具有從左到右的關聯性。只要您在加入之前沒有在ON條件中引用任何表格,那麼寫出表格的順序並不重要。

執行語句時,數據庫引擎將確定執行連接的最佳順序,這可能與它們在SQL查詢中出現的順序不同。