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基础之STRAIGHT JOIN用法简介
MySQL基础之STRAIGHT JOIN用法简介 引用mysql官方手册的说法: STRAIGHT_JOIN is similar to JOIN, except that the left tab ...
- MySQL应用之CROSS JOIN用法简介教程
目录 2. cross join用法 @ 本博客翻译自两篇博客的: http://www.mysqltutorial.org/mysql-cross-join/ https://www.w3resou ...
- mysql中left join right join inner join用法分析
mysql数据库中的关联查询,基本都会用到left join,right join,inner join等查询方式,今天来说说这三种用法的区别 1.创建表test1,test2,插入测试数据 #创建表 ...
- MySQL的几种连接 join/inner join/cross join/逗号/left join/right join/natural join
转载请注明出处!! 之前数据表连接操作多使用逗号或者join,对几种连接的概念一直浑浑噩噩,最近研究了一波,把这些连接的区别搞明白了. 连接:A xjoin B(主表 操作 关联表) selec ...
- MYSQL学习笔记 (三)JOIN用法
数据库的操作分开增删改查,其中查询操作基本占系统的90%,大家所说的优化SQL语句基本是优化查询语句.接下来将学习JOIN的用法,JOIN包括:INNER JOIN(内连接).LEFT JOIN(左外 ...
- mysql学习之join用法
转载 一张图看懂 SQL 的各种 join 用法 一.JOIN 使用介绍 下面例子使用的数据表如下: -- ---------------------------- -- Table structu ...
- MySQL的JOIN用法
JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接.这里描述先甩出一张用烂了的图,然后插入测试数据. CREATE TABLE t_blog( i ...
- Mysql中natural join和inner join的区别
假设有如下两个表TableA,TableB TableA TableB Column1 Column2 Column1 Column3 1 2 1 3 TableA的Column1列名和TableB的 ...
- “,”、“natural join”、“natural left outer join”、“natural right outer join”的用法总结
“,”:代表笛卡尔积: “natural join”:代表自然连接,即同名列等值连接: “natural left outer join”:表示左外连接: “natural right outer j ...
随机推荐
- right join 和left join 的区别
SQL 数据库 right join 和left join 的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中 ...
- 每日JAVA面试
- hibernate opensission.createSQLquery 问题
在进行分页查询的时候,通常会用到,页码,每页容量等等的参数进行操作,如下图: query.list()的时候会执行得到所需要的集合的值,在这个过程中, 如果使用自定义的返回参数,比如将日期做一些基本处 ...
- Python Poetry 学习和使用
Poetry是啥? 是一个Python虚拟环境和依赖管理工具,另外它还提供了包管理功能,比如打包和发布.可以用来管理python库和python程序. 安装Poetry curl -sSL https ...
- [考试反思]1113csp-s模拟测试114:一梦
自闭.不废话.写一下低错. T1:觉得信心赛T1不会很恶心一遍过样例直接没对拍(其实是想写完T2之后回来对拍的) 状态也不好,基本全机房都开始码了我还没想出来(skyh已经开T2了).想了40多分钟. ...
- Yii2中$model->load($data)一直返回false问题
上次使用$model->load()方法时一直返回false,数据添加不成功,这里记录一下: 出错代码: $data = [ 'name' => 'test', 'phone' => ...
- Java实现网络聊天中使用的socket API与Linux socket API之间的关系
尝试着用Java编写一个网络聊天程序,发现总不如网上写的好,所以就直接引用了网上大神的优秀代码.代码如下: package project1; import java.awt.*; import ja ...
- eclipse_neon 的Spket 目录下只有一个Task Tags,没有其他的选项,导致没有办法添加提示文件! 添加sdk文件之后还是没有办法显示的解决办法
问题解决办法: 将 spket-1.6.23的安装包里面的features plugins 单独复制到D:\eclipse_neon\dropins 目录下,重启一下eclipse即可正常显示! 添 ...
- SpringBoot2.0 整合 ElasticSearch框架,实现高性能搜索引擎
本文源码:GitHub·点这里 || GitEE·点这里 一.安装和简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful ...
- Spark家族:Win10系统下搭建Scala开发环境
一.Scala环境基础 Scala对Java相关的类,接口进行了包装,所以依赖Jvm环境. Jdk 1.8 scala 依赖 scala 2.11 安装版本 idea 2017.3 开发工具 二.配置 ...