zoukankan      html  css  js  c++  java
  • 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关键字

  • 相关阅读:
    JavaScript 事件绑定:立即执行函数的闭包 vs let的块作用域
    JavaScript 中的组合继承 :ES5 与 ES6 中最近似的写法
    js 变量提升与函数提升
    js 函数
    清华大学孙茂松组:图神经网络必读论文列表
    idea里处理can not find declaration to go
    MySQL数据库里查询表注释、表字段注释信息
    MySQL循环游标的使用
    ELT和INTERVAL函数
    .jar文件执行命令
  • 原文地址:https://www.cnblogs.com/mzq123/p/11830443.html
Copyright © 2011-2022 走看看