一尘不染

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

mysql

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

MySQL中的默认JOIN是什么?

SELECT * FROM t1 JOIN t2

一样吗

SELECT * FROM t1, t2

OR

SELECT * FROM t1 INNER JOIN t2

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

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


阅读 5069

收藏
2020-05-17

共1个答案

一尘不染

在MySQL中,写JOIN不合格的隐含含义INNER JOIN。换句话说,INNERin INNER JOIN是可选的。INNERCROSS在MySQL的同义词。为了清楚起见,我写JOIN或者INNER JOIN如果我有一个连接条件,CROSS JOIN如果我没有条件。

文档中介绍了允许的联接语法。


现在,我认为独立的JOIN就是(使用)逗号和WHERE子句。


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

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

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