2012-01-26 56 views
5
SELECT title,name FROM Lessons,Users WHERE Lessons.author = Users.email; 

這三個MySQL查詢有什麼區別?

SELECT title,name FROM Lessons JOIN Users ON Lessons.author = Users.email; 

SELECT title,name FROM Lessons INNER JOIN Users ON Lessons.author = Users.email; 

教訓有一個名爲author索引爲外鍵的列Users.emailtitleLessonsname一列是Users

+0

我相信這是這個問題的解決:http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line – jzila

+0

的區別僅僅是風格, – onedaywhen

回答

12

列有三個語句之間沒有任何區別,他們都是,無論是隱性或顯性的,INNER JOIN小號

  1. 第一條語句是使用隱式舊連接語法。雖然這仍然受支持,但使用顯式連接更具可讀性和可維護性。不要使用舊式連接。

  2. 第二個聲明是使用顯式連接而不指定連接的類型。默認情況下,這是一個INNER JOIN

  3. 第三條語句也是明確加入並避免任何含糊之處。這是寫作連接的最推薦的方式。

1

不僅有完美的冪等,但可能有另一種方式。 例如,如果您可以重命名Lesson.email中的Lessons.author,爲了確保兩個表中的相關列具有相同的名稱,您可以使用NATURAL JOIN,它隱式地將來自不同表的行共享同一個名字:

-- After renaming Lessons.author in Lessons.email, you simply use NATURAL JOIN 
SELECT title,name FROM Lessons NATURAL JOIN Users;