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

  • 相关阅读:
    Java 基础
    Java 数据类型
    Spring 拦截器实现事物
    SSH 配置日记
    Hibernate 知识提高
    Jsp、Servlet
    leetcode 97. Interleaving String
    leetcode 750. Number Of Corner Rectangles
    leetcode 748. Shortest Completing Word
    leetcode 746. Min Cost Climbing Stairs
  • 原文地址:https://www.cnblogs.com/mzq123/p/11830443.html
Copyright © 2020-2023  润新知