2012-08-15 52 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子句中。