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

被折叠的 条评论
为什么被折叠?



