2011-06-15 132 views
1

具有以下SQLMySQL的連接查詢

SELECT 
    u.user_id  AS user_id, 
    u.user_name AS user_name, 
    d.user_data AS user_data 
FROM 
    tbl_users u, 
    tbl_data d   
WHERE 
    d.user_id = u.user_id 

這是否仍然會產生一個JOIN(因爲沒有加入這個SQL關鍵字)? MySQL如何處理這個查詢?

如果WHERE子句是u.user_id = d.user_id而不是d.user_id = u.user_id,那麼有什麼區別嗎?

謝謝。

+1

你已經得到了'FROM'子句中的兩個表,和'WHERE'條款中有關他們 - 這是一個喬裝加盟。 – 2011-06-15 22:02:40

回答

3

什麼你寫的是老式的SQL語法之前ANSI標準化JOIN關鍵字早在1992年

有了像你上面寫着什麼簡單的查詢,大多數的RDBMS將在內部將其轉換爲同一查找方法作爲內部聯接。

至於where子句中列的順序,唯一重要的是當你有派生列或函數時。一般而言,您希望首先保留非派生列或非功能列,以便引擎可以計算出正確的索引。

2

是的,這是加入的替代(舊)語法。

它仍然是完全有效的。 AND條件的順序無關緊要。

+0

我一直在用這種方式寫查詢......因爲我老了:) – Randy 2011-06-15 22:02:45

1

您的查詢結果與您做過INNER JOIN的查詢結果相同。

而且WHERE條款的順序沒有什麼區別。

1

是的,這隱含告訴MySQL做一個內部聯接,它等同於:

SELECT 
    u.user_id  AS user_id, 
    u.user_name AS user_name, 
    d.user_data AS user_data 
FROM 
    tbl_users u 
    INNER JOIN 
     tbl_data d 
    ON 
     d.user_id = u.user_id