什么是默认的MySQL JOIN行为,INNER或OUTER?

时间:2010-12-11 20:26:43

标签: mysql select join

所以我在最后一小时一直在浏览互联网,阅读并寻找这个简单问题的最终答案。

MySQL中的默认JOIN是什么?

SELECT * FROM t1 JOIN t2

相同
SELECT * FROM t1, t2

OR

SELECT * FROM t1 INNER JOIN t2

当你使用“WHERE”子句时,它是一个相关的问题,它是否与JOIN或INNER JOIN相同?

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

2 个答案:

答案 0 :(得分:113)

在MySQL编写JOIN时,不合格意味着INNER JOIN。换句话说,INNER中的INNER JOIN是可选的。 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语法时不太可能意外地创建笛卡尔积,因为连接子句写在连接旁边,很容易看出是否缺少连接子句。

答案 1 :(得分:0)

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

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

中进行了描述