mySQL JOIN 用法 [重复]

Posted

技术标签:

【中文标题】mySQL JOIN 用法 [重复]【英文标题】:mySQL JOIN usage [duplicate] 【发布时间】:2012-08-12 06:59:38 【问题描述】:

可能重复:INNER JOIN ON vs WHERE clause

大约 1 年前,我开始担任网络开发人员。从那时起,我经历了 phpmysqljavascript、jQuery 等。我想我在这段时间里学到了一些东西。但是当涉及到 SQL 时,我是一个真正的菜鸟。我只是做了几个 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 相同的结果吗?

【问题讨论】:

您刚刚发现了内连接的语法快捷方式。还有其他类型的连接。 ***.com/questions/894490/… 谢谢!从现在开始,我将开始使用 JOIN,我同意,我有一些带有旧 WHERE 子句的大型不可读查询 【参考方案1】:

您的示例恰好产生相同的结果,但意识到还有其他类型的连接 - LEFT JOIN 是我通常使用的唯一另一种 - 连接的概念与使用 WHERE 子句过滤结果的概念是分开的.有时 WHERE 子句可能会变得足够复杂,而没有混合所有连接条件。让您的 SQL 易于维护,并在 JOIN 子句中加入,而不是在 WHERE 子句中。

【讨论】:

【参考方案2】:

是的,它们会产生相同的结果,但是,SELECT * FROM TablaA, TablaB WHERE TablaA.name = TablaB.name 是一种较旧的执行连接方法,不符合 SQL-92 标准。一旦您的查询开始变得非常复杂,阅读起来也变得更加困难。最好坚持使用显式声明的 INNER JOIN 格式。

【讨论】:

谢谢!我将研究SQL JOIN以更好地理解它

以上是关于mySQL JOIN 用法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL应用之CROSS JOIN用法简介教程

MySQL的JOIN:用法

MySQL join 用法

定义13: mysql left join,right join,inner join用法分析

超详细mysql left join,right join,inner join用法分析

超详细mysql left join,right join,inner join用法分析