提问
先提个问题:A left join B,查询出来的记录数会比 A 表的多吗?
答案是会,不知道大家是不是跟我一样,之前听到的版本是:A left join B,返回左表(A)的所有行,如果B表中没有匹配项,则结果集中B表的部分将包含NULL值。然后一直以为总记录数就是左表的记录数,不会左边的表多。
所以感觉之前见到的这个图有点误导人,因为结果的记录数可能比左表还多:
接下来我们来验证一下:
测试
准备sql
很简单,2 张表:
create table t1(
name varchar(255),
age int
);
create table t2(
name varchar(255),
role varchar(255)
);
insert into t1(name, age)value ('张三', 18);
insert into t2(name, role)value ('张三', '管理员'),('张三', '员工');
测试 left join
select * from t1 left join t2 on t1.name = t2.name;
结果:t1表只有 1 条记录,结果确有 2 条;
t1 left join t2,在匹配t1和t2的过程中,如果 t2表有多条记录匹配,则结果中会有多条记录。我们根据t1表的 name去匹配,在t2表可以找到 2 条记录,因此结果有 2 条
大家好,我是猫哥, 5 年+Java开发经验,之前学习都是只求多,也不管掌握了多少,现在要开始尝试写博客,用最简单的语言,把每个知识点讲清楚。检验是否掌握的标准是能用最简洁的话让一个外行人听明白。这也是著名的 费曼学习法
觉得有帮助的同学们,点点关注呀,你的支持是我更新的动力,给大佬们鞠一躬!