2012-08-15 56 views
2

可能重複:
INNER JOIN ON vs WHERE clauseMySQL的JOIN使用

我大約一年前開始作爲Web開發人員。從那時起我已經通過PHP,MySQL,Javascript,jQuery等等。我認爲我在這段時間學到了一些東西。但是當談到SQL時,我是一個真正的noob。我只是做幾個SELECT,INSERT,UPDATE,並使用一些像SUM或UNIX_TIMESTAMP等功能。

我遇到了JOIN函數,它似乎很有用,但我沒有看到使用JOIN或某些WHERE子句來「加入」表間數據的區別。

我讀了this article(西班牙語)關於加入。我真的看不到它的用處。例如:

假設這個數據集:

id nombre  id nombre 
-- ----   -- ---- 
1 Pirata  1 Rutabaga 
2 Mico   2 Pirata 
3 Ninja  3 Darth Vader 
4 Spaghetti 4 Ninja 

這豈不查詢:SELECT * FROM TablaA INNER JOIN TablaB ON TablaA.name = TablaB.name產生相同的結果SELECT * FROM TablaA, TablaB WHERE TablaA.name = TablaB.name

+2

您剛剛發現了內部聯接的語法快捷方式。還有其他類型的連接。 – 2012-08-15 23:01:46

+0

http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line – dugas 2012-08-15 23:04:03

+0

謝謝!從現在開始,我將開始使用JOIN,並且我同意,使用舊的WHERE子句有一些大型的不可讀的查詢 – davidaam 2012-08-15 23:14:47

回答

4

是的,它們會產生相同的結果,但是,SELECT * FROM TablaA, TablaB WHERE TablaA.name = TablaB.name是執行不符合SQL-92標準的聯接的較舊方法。一旦你的查詢開始變得非常複雜,閱讀也變得更加困難。堅持使用顯式聲明的INNER JOIN格式更好。

+0

謝謝!我將研究SQL JOIN以更好地理解它 – davidaam 2012-08-15 23:16:33

2

您的示例碰巧產生相同的結果,但意識到還有其他類型的連接 - LEFT JOIN是我通常使用的唯一另一個連接 - 並且連接的概念與使用WHERE篩選結果的概念分離條款。有時WHERE子句可能會變得很複雜,而且沒有在那裏混合所有的連接條件。保持SQL易於維護並加入JOIN子句,而不是在WHERE子句中。