什么是默认的 MySQLJOIN 行为,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 子句是相同的。

55361 次浏览

These are all equivalent, and also equal to, CROSS JOIN.

There are some differences between using comma and [INNER | CROSS] JOIN syntax, which might be important when joining more tables. Pretty much all you need to know is described here in the MySQL JOIN documentation.

In MySQL writing JOIN unqualified implies INNER JOIN. In other words the INNER in INNER JOIN is optional. INNER and CROSS are synonyms in MySQL. For clarity I write JOIN or INNER JOIN if I have a join condition and CROSS JOIN if I don't have a condition.

The allowed syntax for joins is described in the documentation.


Right now I'm thinking a stand-alone JOIN is nothing more than (identical to) using commas and WHERE clauses.


The effect is the same, but the history behind them is different. The comma syntax is from the ANSI-89 standard. However there are a number of problems with this syntax so in the ANSI-92 standard the JOIN keyword was introduced.

I would strongly recommend that you always use JOIN syntax rather than the comma.

  • T1 JOIN T2 ON ... is more readable than T1, T2 WHERE ....
  • It is more maintainable because the table relationships and filters are clearly defined rather than mixed together.
  • The JOIN syntax is easier to convert to OUTER JOIN than the comma syntax.
  • Mixing the comma and JOIN syntax in the same statement can give curious errors due to the precedence rules.
  • It is less likely to accidentally create a cartesian product when using the JOIN syntax due to a forgotten join clause, because the join clauses are written next to the joins and it is easy to see if one is missing.