在mysql中,JOIN 一般来说会默认为INNER JOIN,但这是在后续带有ON条件才会默认为INNER JOIN
即:JOIN与INNER JOIN效果一致
select * from table a JOIN table b on a.id = b.id;
select * from table a INNER JOIN table b on a.id = b.id;
当JOIN后面不带ON条件时,默认为CROSS JOIN
即:JOIN与CROSS JOIN效果一致
select * from table a JOIN table b;
select * from table a CROSS JOIN table b;
select * from table a,table b;
mysql 为什么可以这样写呢?
一方面:MySQL 是一个兼容性很强、容错性很高的数据库系统。它允许一些不完全标准SQL的写法,比如 JOIN 不加 ON 条件。
这是为了兼容老的 SQL 习惯(比如逗号分隔)以及方便开发者快速写出查询。
另一方面:早期 SQL 语法里,表之间用逗号分隔就是表示笛卡尔积(所有组合)。
后来 SQL 标准引入了显式的 JOIN ... ON ... 语法。
为了兼容旧代码和习惯,MySQL 保留了这种写法,并自动将无条件的 JOIN 解释为笛卡尔积。
如果用其他sql语言编写时,需要注意语法。