今天被问到一个问题,通过 left join 对两个表做关联查询,结果中数据量为何比左表的数据量少?按理说数据量应该和左表保持一致呀。看了一下 SQL,大概逻辑如下:
selecta.XX,...,b.XXfrom aleft join bon a.id=b.object_idwhere a.data_date=20210323and b.data_date=20210323
create table dept(dept_id int not null AUTO_INCREMENT PRIMARY KEY comment '部门编号',dept_name varchar(10) not null default '' comment '部门名称') comment '部门表';create table emp(id int not null AUTO_INCREMENT PRIMARY KEY comment '员工编号',name varchar(10) not null default '' comment '姓名',dept_id int not null default 0 comment '所在部门编号') comment '员⼯表';insert into dept values (1,'财务部'),(2,'销售部'),(3,'研发部'),(4,'后勤部');insert into emp values (1,'张三',2),(2,'李四',2),(3,'王五',3),(4,'赵六',0),(5,'旺财',0);
当执行如下语句时,结果如下图:
select a.*,b.* from emp a left join dept bon a.dept_id =b.dept_id

如果加上 ' and a.dept_id = 2 ',结果如下:

可见结果还是以左表为准,只是右边除了 dept_id = 2 的数据,其余都用 NULL 补齐了

此时结果就比左表数据要少了。

通过 where 过滤的原理如下:

文章转载自大数据记事本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




