MySQL系列之Natural Join用法

MySQL系列之Natural Join用法Naturaljoin 即自然连接 naturaljoin 等同于 innerjoin 或 innerusing 其作用是将两个表中具有相同名称的列进行匹配

Natural join即自然连接,natural join等同于inner join或inner using,其作用是将两个表中具有相同名称的列进行匹配

Natural join特征:

  • 关联的表具有一对或多对同名的列
  • 连接时候不需要使用on或者using关键字

建立两张表:

CREATE TABLE t1(id INT,desc1 VARCHAR(50),desc2 VARCHAR(50))ENGINE=INNODB; CREATE TABLE t2(id INT,desc3 VARCHAR(50),desc4 VARCHAR(50))ENGINE=INNODB; 

往两张表写数据:

INSERT INTO t1(id,desc1,desc2) VALUES(100,'desc11','desc12'),(101,'desc21','desc22'),(102,'desc31','desc32'); INSERT INTO t2(id,desc3,desc4) VALUES(101,'desc41','desc42'),(103,'desc51','desc52'),(105,'desc61','desc62'); 

内连接查询id相同的数据

SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 INNER JOIN t2 ON t1.id = t2.id; 

natural join连接查询的效果等同于如上sql

SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 NATURAL JOIN t2; 

在这里插入图片描述
ok,接着验证列类型不一样是否还可以继续关联,本博客只在mysql5.7版本验证
在这里插入图片描述
修改一下t1的id类型






ALTER TABLE t1 MODIFY id VARCHAR(50); 

继续查询,用natural join,验证后发现还可以查询的

SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 NATURAL JOIN t2; 

用内连接的方法,ps:Oracle里id类型不一样(一个为int,一个为varchar)是会报错的,不过我在5.7版本验证,并没有报错

SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 INNER JOIN t2 ON t1.id = t2.id; 

所以,我怀疑是否因为sql_mode没有开启为严格模式导致的?

SET @session.sql_mode = 'STRICT_TRANS_TABLES'; 

开启严格模式,继续查询都没问题,所以mysql的语法还是相对没那么严格限制的

ok,综上,可以得出,natural join只是根据列的名称和数据进行关联而已,在5.7版本并没有限制要求列的类型要一样,而且natural join连接时候也不需要使用on或者using关键字

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214532.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午4:02
下一篇 2026年3月18日 下午4:02


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号