left join 的一些问题,不一定以左表为准,数据行数减少或者数据增多,打破你的认知
left join 完,行数一定等于左表行数吗? 不一定!!
错误理解
一直以来我脑海中一直存有一个连接的图
并且我一直有一个错误的认知,就是左连接查询的数据,是以左表的行数为基准,不会多于左表的行数,但是先说结论,这个理解是错误的。
正确理解
并且正确的理解应该是,使用左外连接的时候,会以连接条件会基准,先把符合连接条件的数据筛选出来,再讲左表(基准表)的所有数据显示出来,如果左表有的数据,右表不存在满足连接条件的数据,则左表的数据依然展示,而右表的显示为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');
结果图:
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);
结果图:
好了,做好上面数据的准备,我们写一个很简单的sql,也不加筛选条件先,仅作一个左连接查询,看下效果图
select * from admin a left join boys b on a.id = b.id;
看到了么,我们使用的左连接,以admin表为主表,admin只有三行数据,但是查询的时候,结果是有5行的,是多于左边主表的行数的。
看下结果再想下上面提到的正确解读的2个步骤,是不是会明白这个结果。
参考文章:
left join 的一些问题
mysql left join之后的行数有可能与左表的行数不同
艾欧尼亚,昂扬不灭,为了更美好的明天而战(#^.^#)
分类:
mysql基础+高级
标签:
mysql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构