我最近try 了涉及INNER JOINCROSS JOIN的MySQL查询,这两个查询都没有指定任何条件.令人惊讶的是,这两个查询对我的数据集产生了相同的结果.

SELECT * FROM untitled_table INNER JOIN untitled_table2;
SELECT * FROM untitled_table CROSS JOIN untitled_table2;

我观察到,CROSS JOININNER JOIN都可以在没有任何条件的情况下执行,并且它们仍然会产生相同的结果.更有趣的是,当我在没有条件的情况下运行INNER JOIN或在有条件的情况下运行CROSS JOIN时,MySQL工作台不会抛出任何错误.

在没有条件的情况下使用时,这两种连接类型之间有什么根本区别吗?

如果没有区别,为什么MySQL有两个关键字来表示似乎相同的操作?

此外,当我将条件应用于CROSS JOININNER JOIN时,它们仍然产生匹配的结果.

为什么这些看似不同的联接类型在此场景中的行为相似?

推荐答案

正如您已经提到的,在MySQL中,没有ON个条件的内部联接的行为与交叉联接相同.这只是MySQL中的语法问题,仅此而已.应该注意的是,在大多数其他数据库(例如postgres)中,没有连接条件的内部连接会导致语法编译错误,并且不会运行.

至于在MySQL中应该使用的which版本,我认为你应该使用CROSS JOIN,因为它使你的意图变得明确和清晰. 使用INNER JOIN没有标准,你可能已经看到自己,可能会混淆的人谁是不流利的MySQL.

Mysql相关问答推荐

嵌套MySQL语句问题

MySQL::JSON列的添加使SELECT查询非性能(当需要临时表时)

Hibernate 不创建表'

MySQL中如何对字符串进行算术运算?

在MySQL的join查询中进行计算

在两个日期之间生成每个月的1行数据.

为什么Mysql会根据查询参数改变查询执行计划?

使用 autocommit = 0 和 InnoDB 表的 LOCK TABLES 检测死锁

如何同时从同一个表中 Select 从 SQL 表中删除行

MYSQL 删除两个已知字符串之间的字符串

获取 MySQL 中每一行之间负差的总和

包含 group_contact 的视图的问题

查找同时玩过这两种游戏的玩家

MySQL:如何多次加入同一张表?

如何查看打开了多少 MySQL 连接?

脚本超时,如果要完成导入,请重新提交相同的文件,导入将恢复

我应该使用什么列数据类型来存储大量文本或 html

PHP mySQL - 将新记录插入表中,主键自动递增

你能推荐一个免费的 Linux 轻量级 MySQL GUI 吗?

带有 LIKE 运算符的 Select 语句中的 MySQL case