A left join B 和 B right join A

本文深入探讨了SQL中左连接(left join)与右连接(right join)的实际应用效果,通过实例对比说明两者在处理一对多关系数据时的等效性。同时,文章强调了小表驱动大表的原则,即在连接操作中应优先选择记录较少的表作为驱动表,以提高查询效率。

先说结论,A left join B 和 B right join A效果是一样一样的。

left  join(左链接)where条件语句只影响右表,右表存在符合条件的记录则展示,否则为null,右表多出的数据不展示。

右链接雷同。

例:

表a,用户信息表,表b,用户的积分流水记录表。

left join:

SELECT a.merchant_id,a.member_id,a.wid,b.point_flow_id 
FROM `cc_member_card_main_info_6` a 
left join `cc_point_log_6` b  
on a.merchant_id = b.merchant_id and a.member_id = b.member_id 
WHERE a.merchant_id = 870;

左链接结果:

right join:

SELECT a.merchant_id,a.member_id,a.wid,b.point_flow_id 
FROM `cc_point_log_6` b  
right join `cc_member_card_main_info_6` a 
on a.merchant_id = b.merchant_id and a.member_id = b.member_id 
WHERE a.merchant_id = 870;

右链接结果:

 

结果相同,同时可以看到,表a(用户信息表)和表b(用户流水记录表)是一对多的关系,对应的多条记录都会被查找出来。

---------

在另一个文章看到另外一个点:小表驱动大表原则。参考https://blog.youkuaiyun.com/huangfan322/article/details/50516851

意思是说,查到的记录以符合条件的,记录少的表为主。

以左链接为例:

修改查询语句,添加记录id限定条件,sql语句如下:

SELECT a.merchant_id,a.member_id,a.wid,b.point_flow_id 
FROM `cc_member_card_main_info_6` a 
left join `cc_point_log_6` b  
on a.merchant_id = b.merchant_id and a.member_id = b.member_id 
WHERE b.merchant_id = 870 and b.point_flow_id < 3000;

运行结果:

用户信息共19条,用户积分记录共9条,查询结果只展示了5条。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值