2011-10-11 27 views
3

可能重複:
Is it better to do an equi join in the from clause or where clauseSQL查詢使用和不使用內部聯接

我在SQL一個菜鳥,我有2個疑問:

SELECT 
    A.COLUMN1,B.COLUMN2, C.COLUMN3 
FROM 
    TB_ITEM A, 
    TB_ITEM_CAT B, 
    TB_ITEM_SUBCAT C 
WHERE 
    A.COLUMN1 = B.COLUMN1 
    AND A.COLUMN1 = c.COLUMN1 

SELECT 
    A.COLUMN1,B.COLUMN2, C.COLUMN3 
FROM 
    TB_ITEM A 
INNER JOIN TB_ITEM_CAT B on A.COLUMN1 = B.COLUMN1 
INNER JOIN TB_ITEM_SUBCAT C on A.COLUMN1 = C.COLUMN1 

在第一個查詢中,我們沒有INNER JOINS,並從3個表中進行選擇。 在第二個,我們有與INNER JOINS相同的查詢,並從3個表中選擇。

他們應該顯示相同的結果? 這些查詢有什麼區別?

+4

ANSI-89與ANSI-92。性能沒有差異。請參閱[顯式vs隱式SQL連接](http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins) –

+0

您是否看到結果中的任何差異?我希望他們是相同的。這個問題與http://stackoverflow.com/questions/7686190/mysql-query-perfomance-which-one-is-best非常相似,儘管這特別關注MySQL的性能。 –

回答

3

它們在語義上是相同的。一個體面的優化器將認識到這一點產生同樣有效的計劃。一位經驗豐富的SQL編碼人員也會認識到這一點;)

Joe Celko的報價:「至少有七種方法可以編寫查詢;只有兩種方法值得使用 」。

1

第一個查詢確實有內連接。在FROM子句中,逗號是INNER JOIN的縮寫。

+0

問題是它是否正確連接。 –

+0

嗡嗡聲,如果它沒有逗號?會是一樣的嗎? – ozsenegal

0

好,

我認爲結果是一樣的。但是,當您的SQL非常大時,使用INNER JOIN將幫助您組織查詢。