今天被问到一个问题,通过 left join 对两个表做关联查询,结果中数据量为何比左表的数据量少?按理说数据量应该和左表保持一致呀。看了一下 SQL,大概逻辑如下:
select
a.XX,
...,
b.XX
from a
left join b
on a.id=b.object_id
where a.data_date=20210323
and 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 b
on a.dept_id =b.dept_id
如果加上 ' and a.dept_id = 2 ',结果如下:
可见结果还是以左表为准,只是右边除了 dept_id = 2 的数据,其余都用 NULL 补齐了
此时结果就比左表数据要少了。
通过 where 过滤的原理如下:
文章转载自大数据记事本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。