MySQL系列之Natural Join用法
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用法相关推荐
- mysql natural join用法_MySQL NATURAL JOIN
NATURAL JOIN 也叫自然连接,实际是属于 JOIN 的一种. MySQL NATURAL JOIN 语法如下: ... FROM table1 NATURAL JOIN table2 ... ...
- mysql的natural join_MySQL基础之Natural Join用法
Natural join即自然连接,natural join等同于inner join或inner using,其作用是将两个表中具有相同名称的列进行匹配 用https://www.w3resourc ...
- MySQL应用之CROSS JOIN用法(有时挺管用)
目录 cross join简介 cross join用法 本博客翻译自两篇博客的: http://www.mysqltutorial.org/mysql-cross-join/ https://www ...
- mysql数据库inner join_inner join用法是什么
inner join(等值连接):只返回两个表中联结字段相等的行. left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录. right join(右联接):返回包括右表中的 ...
- mysql中的left join用法 (及多条件查询
语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2 说明:table1, table2参数用于指定要将记录组 ...
- 数据基础---mysql数据库操作(二)---JOIN用法
mysql的john用法总结 左"的笛卡尔积和"右"的笛卡尔积 根据mysql join 连接的方式我把它归为两类,"左"的笛卡尔积和"右& ...
- MYSQL学习笔记 (三)JOIN用法
数据库的操作分开增删改查,其中查询操作基本占系统的90%,大家所说的优化SQL语句基本是优化查询语句.接下来将学习JOIN的用法,JOIN包括:INNER JOIN(内连接).LEFT JOIN(左外 ...
- MySQL的JOIN用法
全文共925个字,10张图,预计阅读时间6分钟. 数据库中的JOIN称为连接,连接的主要作用是根据两个或多个表中的列之间的关系,获取存在于不同表中的数据.连接分为三类:内连接.外连接.全连接.另外还有 ...
- 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 ...
最新文章
- 通过WMI获得硬盘和CPU的物理序列号(VB.net)
- POI处理Excel中的日期数据类型
- 推荐给程序员的经典书——八月图书推荐
- Linux Kernel Coding Style
- MVC中HtmlHelper用法大全
- 鲁迅散文——随感录四十九
- CodeForces - 1450E Capitalism(差分约束)
- 深入理解null的原理
- WPF实现时间轴(仿Gitee)
- antd table排序 vue_商品品牌业务之Vue编写前端页面
- mysql表空间增长过快_Oracle表空间增长异常解决又一例
- 《Essential C++》笔记之设计一个泛型算法(一)
- [Bzoj4817] [Sdoi2017]树点涂色 (LCT神题)
- 2018-4-18 Linux学习笔记
- python3访问map
- mysql怎么显示创表的语句_MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试...
- 淘宝宝贝类目怎么更换?
- ad20/ad21/ad22学习笔记(基本包含一套流程)Altium Designer
- pdfFactory Pro 不能被安装(AddPrinterDriver 失败)...找不到指定的模块
- Python抖音弹幕