3.关联表时出现null字段

在实际工作中,经常会遇到需要关联表的场景,常见的关联有左连接,右连接,内连接等。关联的时候需要做到对相应的关联字段做关联,避免出现数据发散。有时候会发现需要关联的字段有null的出现,那么假如两个表中关联字段出现null=null的情况,是否会对他进行关联呢?
验证开始:

  1. 建表:

create table if not exists user1
(
id numeric(5),
name varchar(50),
count numeric(5)
);
create table if not exists user2
(
id numeric(5),
name varchar(50),
count numeric(5)
)

  1. 插入数据,其中name字段设置为null

insert into user1 values (1,null,10);

insert into user2 values (1,null,10), (2,null,20), (3,null,30)

  1. 内连接验证:
    连接条件没有null字段情况:

mysql>select a.id,a.name,(a.count+b.count) from user1 a, user2 b where a.id=b.id

结果如下:
在这里插入图片描述
果然出现了数据发散的情况。

连接条件出现null字段情况:

mysql>select a.id,a.name,(a.count+b.count) from user1 a, user2 b
where a.id=b.id and a.name=b.name

结果如下:
在这里插入图片描述
我们发现内连接条件出现null=null情况时,数据库并不会将他们相互关联。

  1. 左连接验证:
    连接条件没有null字段情况:

mysql>select a.id,a.name,(a.count+b.count) from user1 a left join user2 b on a.id=b.id

结果如下:
在这里插入图片描述
同样出现了数据发散的情况。

连接条件出现null字段情况:

mysql>select a.id,a.name,(a.count+b.count) from user1 a left join user2 b
on a.id=b.id and a.name=b.name

结果如下:
在这里插入图片描述
我们发现内连接条件出现null=null情况时,数据库也并不会将他们相互关联。只会将相应字段进行null操作显示的情况。

  1. 结论:我们可以同时发现,数据库中null=null的情况,数据库会给出null的结果,也就是说他并不会认为null与null相等,同样也就不会对这种情况作出更多的后续操作,因为在关联表的时候也不会出现因为null字段相等从而出现数据发散的情况。但是考虑到相应字段可能应用了索引,所以我们最好给字段设置一个默认值,这样就不用去判断null的情况,也可以避免出现索引失效从而引起全表扫描的极端情况。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值