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

Qua*_*Van 86 mysql select join

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

MySQL中的默认JOIN是什么?

SELECT * FROM t1 JOIN t2
Run Code Online (Sandbox Code Playgroud)

这是一样的吗?

SELECT * FROM t1, t2

OR

SELECT * FROM t1 INNER JOIN t2
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ers 116

在MySQL编写JOIN不合格的含义INNER JOIN.换句话说,INNER输入INNER JOIN是可选的.INNER并且CROSS是MySQL的同义词.为清楚起见,我写JOININNER JOIN如果我有一个连接条件,CROSS JOIN如果我没有条件.

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


现在我认为一个独立的JOIN只不过是使用逗号和WHERE子句(相同).


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

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

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

  • @Quang:例如这将失败:`SELECT*FROM t1,t2 JOIN t3 ON t1.x = t3.y WHERE t1.a = t2.b` (2认同)