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

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

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写入JOIN不合格意味着INNER JOIN 。 换句话说INNER JOIN中的INNER JOIN是可选的。 INNERCROSS是MySQL中的同义词。 为了清楚起见,如果我没有条件,如果我有连接条件和CROSS JOIN则写入JOININNER JOIN

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


现在我正在考虑一个独立的JOIN只不过是使用逗号和WHERE子句(相同)。


效果是一样的,但背后的历史是不同的。 逗号语法来自ANSI-89标准。 然而这个语法有很多问题,所以在ANSI-92标准中引入了JOIN关键字。

我强烈build议你总是使用JOIN语法而不是逗号。

  • T1 JOIN T2 ON ...T1, T2 WHERE ...更可读T1, T2 WHERE ...
  • 它更易于维护,因为表格关系和filter是明确定义的而不是混合在一起的。
  • JOIN语法比逗号语法更容易转换为OUTER JOIN。
  • 在同一个语句中混合使用逗号和JOIN语法会由于优先规则而导致奇怪的错误。
  • 使用JOIN语法时由于被遗忘的连接子句而不小心创build笛卡尔积,因为连接子句写在连接旁边,很容易看出是否缺less连接子句。

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

使用逗号和[INNER | CROSS] JOIN之间有一些区别 [INNER | CROSS] JOIN语法,这在连接更多表时可能很重要。 几乎所有你需要知道的是在MySQL JOIN文档中描述的 。