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

MySQL系列之Natural Join用法相关推荐

  1. mysql natural join用法_MySQL NATURAL JOIN

    NATURAL JOIN 也叫自然连接,实际是属于 JOIN 的一种. MySQL NATURAL JOIN 语法如下: ... FROM table1 NATURAL JOIN table2 ... ...

  2. mysql的natural join_MySQL基础之Natural Join用法

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

  3. MySQL应用之CROSS JOIN用法(有时挺管用)

    目录 cross join简介 cross join用法 本博客翻译自两篇博客的: http://www.mysqltutorial.org/mysql-cross-join/ https://www ...

  4. mysql数据库inner join_inner join用法是什么

    inner join(等值连接):只返回两个表中联结字段相等的行. left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录. right join(右联接):返回包括右表中的 ...

  5. mysql中的left join用法 (及多条件查询

    语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2  说明:table1, table2参数用于指定要将记录组 ...

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

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

  7. MYSQL学习笔记 (三)JOIN用法

    数据库的操作分开增删改查,其中查询操作基本占系统的90%,大家所说的优化SQL语句基本是优化查询语句.接下来将学习JOIN的用法,JOIN包括:INNER JOIN(内连接).LEFT JOIN(左外 ...

  8. MySQL的JOIN用法

    全文共925个字,10张图,预计阅读时间6分钟. 数据库中的JOIN称为连接,连接的主要作用是根据两个或多个表中的列之间的关系,获取存在于不同表中的数据.连接分为三类:内连接.外连接.全连接.另外还有 ...

  9. 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 ...

最新文章

  1. 通过WMI获得硬盘和CPU的物理序列号(VB.net)
  2. POI处理Excel中的日期数据类型
  3. 推荐给程序员的经典书——八月图书推荐
  4. Linux Kernel Coding Style
  5. MVC中HtmlHelper用法大全
  6. 鲁迅散文——随感录四十九
  7. CodeForces - 1450E Capitalism(差分约束)
  8. 深入理解null的原理
  9. WPF实现时间轴(仿Gitee)
  10. antd table排序 vue_商品品牌业务之Vue编写前端页面
  11. mysql表空间增长过快_Oracle表空间增长异常解决又一例
  12. 《Essential C++》笔记之设计一个泛型算法(一)
  13. [Bzoj4817] [Sdoi2017]树点涂色 (LCT神题)
  14. 2018-4-18 Linux学习笔记
  15. python3访问map
  16. mysql怎么显示创表的语句_MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试...
  17. 淘宝宝贝类目怎么更换?
  18. ad20/ad21/ad22学习笔记(基本包含一套流程)Altium Designer
  19. pdfFactory Pro 不能被安装(AddPrinterDriver 失败)...找不到指定的模块
  20. Python抖音弹幕

热门文章

  1. ubuntu 下如何下载linux内核源码
  2. 【专题】经典DP问题(上)
  3. DSP学习(8)—— linker.cmd文件解析
  4. 小波阈值去噪的原理及程序
  5. HTML显示默认图片实现
  6. C++泛型编程——模板学习
  7. 2021-06-15记录端午假期学习微信小程序 计算器
  8. 1287 - 【基础】高精度乘
  9. Int16, Int32, Int64 范围
  10. Excel 拆分 分割 数据 (对数据进行分列)