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

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

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关键字

本文分享 CSDN - smileNicky。

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

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

mysql的natural join_MySQL基础之Natural Join用法相关推荐

  1. mysql natural join_MySQL STRAIGHT_JOIN 与 NATURAL JOIN

    MySQL STRAIGHT_JOIN STRAIGHT_JOIN 是 MySQL 对标准 SQL 的扩展,用于在多表查询时指定表载入的顺序.在 JOIN 表连接中,同样可以指定表载入的顺序,本文只讲 ...

  2. mysql 一对多 join_Mysql中FIND_IN_SET与JOIN在一对多关系查询时的优劣

    Mysql中的FIND_IN_SET函数在我知道它之前,我在做一个一对多的外键查询时,都会在中间设计一个关系表.比如一篇文章(post)对应多个标签(tag),我就会在中间设计一个关系表(post_t ...

  3. mysql 多 inner join_mySQL多个INNER JOIN

    我们有三个表要查询,以查找每个企业的客户数和每个企业的记录数 这三个表是: businessDetails ------------------- businessDetails.ID busines ...

  4. 数据基础---mysql数据库操作(二)---JOIN用法

    mysql的john用法总结 左"的笛卡尔积和"右"的笛卡尔积 根据mysql join 连接的方式我把它归为两类,"左"的笛卡尔积和"右& ...

  5. mysql rollup 排序_MySQL基础实用知识集合(二)

    上期小编给大家汇总介绍了mysql的6个基础的知识点,下面继续给大家分享一下另外7个知识点: 7.什么是死锁?怎么解决? 死锁:两个或多个事务相互占用了对方的锁,就会一直处于等待的状态. 常见的解决死 ...

  6. MySQL增删改查基础知识

    前几天学习了MySQL数据库的一些基础知识,了解了后台数据库的一些基础的数据操作:增删改查,对于项目前后台的数据传递有了些概念,总结了一些MySQL的基础语法. 一.数据存储形式发展和数据库作用 根据 ...

  7. mysql 联表比对,MySQL联表查询详解/超详细mysql left join,right join,inner join用法分析比较...

    超详细mysql left join,right join,inner join用法分析 下面是例子分析 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a200 ...

  8. MySQL的初次见面礼基础实战篇

    [版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/61614366 出自[zejian ...

  9. 2.5.1 MySQL数据库备份恢复基础讲解

    MySQL数据库备份恢复基础 MySQL常见的故障类型 对于用户来说,数据库中保存的数据通常至关重要,所以要采取各种手段来防止各种可能的数据损失和数据故障. DBA主要任务就是维持数据库的高可靠性运行 ...

最新文章

  1. 英文文献中的一些单词
  2. 对list中的元素按照元素的属性进行排序
  3. zcmu1203(逆序对,归并排序)
  4. 结合现有分布式系统的数据一致性思考
  5. codeforces1453 D. Checkpoints
  6. 自动驾驶芯片_自动驾驶芯片“争夺战”
  7. linux的多任务 多进程,浅谈linux模拟多线程崩溃和多进程崩溃
  8. 大数据可视化dataease(有所帮助)
  9. HDOJ 1007(T_T)
  10. appscan无法连接到服务器_和平精英无法连接到服务器是怎么回事 最新解决方案...
  11. apt update时出现签名无法验证,公钥失效的解决办法
  12. [www.infoshare.cc]【uiautomator】报告简介及查看
  13. SRA 案例:关于华为开发者联盟基础服务文档内容的改进建议(华为开发者联盟文档深度体验官)
  14. 《物联网Android程序开发案例式教程》Demo2:相对布局
  15. 【控制】《最优控制理论与系统》-胡寿松老师-目录
  16. 彻底解决pip下载pytorch慢的问题
  17. excel中如何解锁锁定单元格
  18. Linux 开始IntelCPU节能模式
  19. 王者荣耀与英雄联盟:如何解决玩家骂人的问题?
  20. 四周型文字环绕怎么设置_word怎样设置四周型版式

热门文章

  1. SAP Spartacus Page Layout学习笔记
  2. 用了四年的联想Thinkpad P50,今天还给公司了,拍个照留念
  3. 使用Angular CLI创建一个Hello World级别的Angular应用
  4. JSP导入XML不成功的一个原因
  5. SAP ABAP和Hybris Commerce的Sample数据
  6. 2015-03-17 how is task transaction type retrieved
  7. Fiori 里周期性检查window size大小的变化
  8. Uncaught SyntaxError - unexpected end of input
  9. request download - 两个队列的研究
  10. root cause of message type unknown during BP delta upload