如何同时使用多个join——多个连续的left join连接顺序验证

 在实际工作中,很多情况下会用到外连接,尤其是做主页面的数据展示查询时,连续用到多个left join会很常见,这样的多个left join会怎么样执行呢,之前在网上查到的执行顺序是,顺序的从坐到右的连接表,例如有 a,b,c三张表的数据都需要查到,就需要进行连接查询,如 select *  from  a  left join b on a.id = b.id left join a.id = c.id,这时是怎么顺序进行执行的呢?

 上网找资料,我们得知是a表先和b表进行连接,会生成一张中间临时表,然后这张表的数据再和c表进行连接,最后生成的表的数据就是a left join b left join c 的。

我们实际进行跑库的验证:

有商品表(product),库存表(stock),价格表三张表(price),做连接,为了验证是第一、二张表的中间表和第三张表进行的连接,我们第一张和第二张表连接时让一部分第二张表的数据连接的字段是null,即sql:

SELECT a.goods_id,b.specification,c.money FROM product  a  LEFT JOIN stock  b 

ON a.goods_id = b.goods_id AND b.goods_id>5    -------让a表连接b表时goods_id<=5的连接不到b表数据,显示为null

LEFT JOIN   price c
ON a.goods_id  = c.goods_id   

即只执行 ab连接sql:SELECT a.goods_id,b.specification FROM product a LEFT JOIN stock  b ON a.goods_id = b.goods_id AND b.goods_id>5 

再执行完整的sql,结果为:

发现 goods_id 为1的对应8条c表数据,这8条均为c表的数据:

SELECT * FROM  price WHERE goods_id = 1

a left join b on 条件1 left join c on 条件2 执行顺序是:先a和b进行连接,生成一张中间表d,然后再和c进行条件连接生成最后的表的数据 


 select * from a left join b on (a,b的连接条件)left join c on(a,b形成的临时中间表和c的连接条件)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值