数据库通过左连接或者右连接去操作多表时都会生成一张临时表来存储数据接下来在通过条件进行过滤返回给用户想要的信息。
现在我们讨论下left join on and 和left join on where 的区别
1.首先让我创建两张表如下: 订单表 id 对应的服务prefer_id
服务表id name对应服务名称service_mode 对应服务类型
2.先看left join on where 选择结果 首先它会关联生成临时表数据;然后在通过where条件进行筛选
目标sql :select * from `order` a left join `exp` b on a.prefer_id = b.id where b.service_mode <> 3
以下是中间临时结果数据
以下是中间数据的筛选结果数据
select * from `order` a left join `exp` b on a.prefer_id = b.id where b.service_mode <> 3
3.接下来我们在分析left join on and处理过程,它的处理过程是先将右侧表以and为条件进行筛选 再和左侧表进行关联查询;最终的结果就是以左侧表为基础 将右侧符合条件的数据置为null 结果如下; 【先查询exp表内service_mode不等于3的数据,再将临时结果和order表进行做关联】等效sql如下:
select * from `order` a left join (select * from `exp` b where b.service_mode<>3) c on a.prefer_id = c.id