前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL基础之Natural Join用法

MySQL基础之Natural Join用法

作者头像
SmileNicky
发布2019-11-12 17:50:38
1.1K0
发布2019-11-12 17:50:38
举报
文章被收录于专栏:Nicky's blogNicky's blog

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://cloud.tencent.com/developer/article/1537459

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

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

Natural join特征:

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

建立两张表:

代码语言:javascript
复制
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;

往两张表写数据:

代码语言:javascript
复制
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相同的数据

代码语言:javascript
复制
SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 INNER JOIN t2 ON t1.id = t2.id;

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

代码语言:javascript
复制
SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 NATURAL JOIN t2;

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

修改一下t1的id类型

代码语言:javascript
复制
ALTER TABLE t1 MODIFY id VARCHAR(50);

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

代码语言:javascript
复制
SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 NATURAL JOIN t2;

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

代码语言:javascript
复制
SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 INNER JOIN t2 ON t1.id = t2.id;

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

代码语言:javascript
复制
SET @session.sql_mode = 'STRICT_TRANS_TABLES';

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档