• left join 的一些问题,不一定以左表为准,数据行数减少或者数据增多,打破你的认知


    left join 完,行数一定等于左表行数吗? 不一定!!

    错误理解

    一直以来我脑海中一直存有一个连接的图
    image
    并且我一直有一个错误的认知,就是左连接查询的数据,是以左表的行数为基准,不会多于左表的行数,但是先说结论,这个理解是错误的。

    正确理解

    并且正确的理解应该是,使用左外连接的时候,会以连接条件会基准,先把符合连接条件的数据筛选出来,再讲左表(基准表)的所有数据显示出来,如果左表有的数据,右表不存在满足连接条件的数据,则左表的数据依然展示,而右表的显示为null.
    也就是说,连接其实应该按照2个步骤理解:
    1.先讲符合连接条件的数据展示出来
    2.再将左表数据展示出来

    数据演示

    admin表结构和数据

    CREATE TABLE `admin` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(10) NOT NULL,
      `password` varchar(10) NOT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
    

    数据:

    INSERT INTO `girl`.`admin`(`id`, `username`, `password`) VALUES (1, 'john', '8888');
    INSERT INTO `girl`.`admin`(`id`, `username`, `password`) VALUES (2, 'lyt', '6666');
    INSERT INTO `girl`.`admin`(`id`, `username`, `password`) VALUES (7, 'aimily', '9999');
    

    结果图:
    image
    boys表结构和数据

    CREATE TABLE `boys` ( 
    `id` INT ( 11 ) DEFAULT NULL, 
    `boyName` VARCHAR ( 20 ) DEFAULT NULL, 
    `userCP` INT ( 11 ) DEFAULT NULL ) ENGINE = INNODB DEFAULT CHARSET = utf8 ROW_FORMAT = COMPACT;
    

    数据:

    INSERT INTO `girl`.`boys`(`id`, `boyName`, `userCP`) VALUES (1, '张无忌', 100);
    INSERT INTO `girl`.`boys`(`id`, `boyName`, `userCP`) VALUES (2, '鹿晗', 800);
    INSERT INTO `girl`.`boys`(`id`, `boyName`, `userCP`) VALUES (3, '黄晓', 50);
    INSERT INTO `girl`.`boys`(`id`, `boyName`, `userCP`) VALUES (4, '段誉', 300);
    INSERT INTO `girl`.`boys`(`id`, `boyName`, `userCP`) VALUES (1, '小王子', 666);
    INSERT INTO `girl`.`boys`(`id`, `boyName`, `userCP`) VALUES (2, '小舒', 333);
    

    结果图:
    image
    好了,做好上面数据的准备,我们写一个很简单的sql,也不加筛选条件先,仅作一个左连接查询,看下效果图

    select *  from admin a left join boys b on a.id = b.id;
    

    image
    看到了么,我们使用的左连接,以admin表为主表,admin只有三行数据,但是查询的时候,结果是有5行的,是多于左边主表的行数的。
    看下结果再想下上面提到的正确解读的2个步骤,是不是会明白这个结果。
    image
    参考文章:
    left join 的一些问题
    mysql left join之后的行数有可能与左表的行数不同

    艾欧尼亚,昂扬不灭,为了更美好的明天而战(#^.^#)
  • 相关阅读:
    文件下载和进度显示
    响应
    log4j2-2.13.0版本安装
    maven私服nexus仓库3.24.0版本搭建
    window下MYSQL定时备份表库的BAT
    JBoss7.3.0EAP版本安装
    jetbrains-IDEA2020版本插件搜索以及官方汉化和其他插件安装介绍
    Jenkins迁移job插件Job Import Plugin
    Appium下出现Original error: pkg.... 解决办法
    IIS10下部署.NetCore站点出现出现 HTTP 错误 500.19,错误代码:0x8007000d及一些问题
  • 原文地址:https://www.cnblogs.com/lovelywcc/p/15192214.html
Copyright © 2020-2023  润新知