mysql的natural join_MySQL基础之Natural Join用法

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

用https://www.w3resource.com的图例:

09da9a58fcc1dda86837fdafe086363c.png

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;

7f091f4b85ad283b3e314aef91f0ce88.png

ok,接着验证列类型不一样是否还可以继续关联,本博客只在mysql5.7版本验证

a1dbc101b8ef6049d4d8d53bde443a9f.png

修改一下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关键字

本文分享 CSDN - smileNicky。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值