1.首先建立三张表
表a
表b
表c
首先看一个sql
SELECT * FROM a LEFT JOIN b ON a.id
= b.id
LEFT JOIN c ON b.id
=c.id
这个sql的结果如下
1.会显示a的所有信息
2.这个on 是对leftjoin的表的右侧的数据做了限制 , 比如你不满足这个on后面的条件 我就只显示null 比如我这里 b表就被做了限制, 只会显示和a表一样的
3.下一个on 又是对c表做了限制, 是b对c做的限制, 但是 其实b是有5的 而c也有, c应该把5显示出来 ,但是没有显示 ,说明 此时的b已经在第一个leftjoinon的
基础上被限制住了 , 因为我们最终是以a表为基础
接着往下看
最后是对表c做了限制, 你看只显示了id为4的
接着往下
这个sql 还是对表c做了限制 , 他只会显示a中test等于1的数据 并且他同时还要满足b.id=c.id的数据 两个同时满足 ,才会在c中做展示
接着看
这个数据 c中做了更多限制, 除了限制on的条件 还要限制两个and, 都是对表c做的限制
现在我们看另一种情况
上面的对比可以看出, where只显示符合要求的数据, 他是以a表为基础, 在以a表为基础的基础上, 最后把
SELECT * FROM a LEFT JOIN b ON a.id
= b.id
LEFT JOIN c ON b.id
=c.id
这个结果取成一个整体, 并且在这个整体中 把满足where条件的做显示, 这里只显示满足where条件的
最后看一个对比
这个对比 就是说 , where后面的and 是对where后的数据 总体的 进一步去处理, 而右侧的 还是只是相对于表C来说的
这就基本上涵盖left join on where and 的所有用法了