【问题标题】:What is the default MySQL JOIN behaviour, INNER or OUTER?什么是默认的 MySQL JOIN 行为,INNER 或 OUTER?
【发布时间】:2011-05-24 01:22:45
【问题描述】:

所以我在过去的一个小时里一直在浏览互联网,阅读并寻找这个简单问题的明确答案。

MySQL 中默认的 JOIN 是什么?

SELECT * FROM t1 JOIN t2

是一样的

SELECT * FROM t1, t2

OR

SELECT * FROM t1 INNER JOIN t2

还有一个相关的问题,当你使用“WHERE”子句时,它与JOIN或INNER JOIN一样吗?

现在我认为独立的 JOIN 与使用逗号和 WHERE 子句相同。

【问题讨论】:

    标签: mysql select join


    【解决方案1】:

    这些都是等价的,也等于CROSS JOIN

    使用逗号和[INNER | CROSS] JOIN 语法之间存在一些差异,这在连接更多表时可能很重要。 MySQL JOIN documentation 中描述了您需要知道的几乎所有内容。

    【讨论】:

    • ^--- 问题的答案是 JOIN(独立)基本上与 INNER 和逗号+where 子句相同
    【解决方案2】:

    在 MySQL 中,JOIN 不合格意味着INNER JOIN。换句话说,INNER JOIN 中的INNER 是可选的。 INNERCROSS 在 MySQL 中是同义词。为清楚起见,如果我有连接条件,我写 JOININNER JOIN,如果我没有条件,我写 CROSS JOIN

    documentation 中描述了允许的连接语法。


    现在我认为独立的 JOIN 只不过是(等同于)使用逗号和 WHERE 子句。


    效果相同,但背后的历史不同。逗号语法来自 ANSI-89 标准。但是这种语法存在许多问题,因此在 ANSI-92 标准中引入了 JOIN 关键字。

    我强烈建议您始终使用 JOIN 语法而不是逗号。

    • T1 JOIN T2 ON ...T1, T2 WHERE ... 更具可读性。
    • 它更易于维护,因为表关系和过滤器被明确定义而不是混合在一起。
    • JOIN 语法比逗号语法更容易转换为 OUTER JOIN。
    • 由于优先规则,在同一语句中混合使用逗号和 JOIN 语法会产生奇怪的错误。
    • 使用 JOIN 语法时,由于忘记了连接子句,不太可能意外创建笛卡尔积,因为连接子句写在连接旁边,很容易看出是否缺少。

    【讨论】:

    • 太好了,感谢您为我澄清了这个简单的问题 :) 过去我一直使用逗号+where 子句...但将根据您的建议转换为使用 JOIN。谢谢
    • 嘿,马克,你说的 JOIN 和逗号的混合是什么意思。像这样混合查询,SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c) ?
    • @Quang:例如这将失败:SELECT * FROM t1, t2 JOIN t3 ON t1.x=t3.y WHERE t1.a = t2.b
    猜你喜欢
    • 2010-09-07
    • 2013-10-16
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    相关资源
    最近更新 更多