一直觉得自己SQL不熟练,于是开始刷SQL题,发现了不懂SQL中ON和WHERE的区别,搜索结果网上几十几十篇的博客互相抄 ,关键抄得还很迷惑。好在最后还是弄懂了。
1.首先on是用在连接join中的,它的意思是在生成连接结果的时候 偏心地 剔除掉一些不符合条件的
至于怎么偏心,比如在left join中 它就“偏袒”左(left)边的表 只把右边的表中不符合条件的剔除了(置为null)
如下:
表main
表ext
可以把这两张表看作是用来存放用户信息的, main放置主要信息,ext表放置附加信息,两张表的关系是1对1的,以id字符作为对应关系键。现在我们需要将地址不为杭州的所有用户信息筛选出来,结果中需要包含main表和ext表的所有字段数据。
闭上眼睛, 请用大脑人肉运行一下这段SQL, 想象一下是什么结果。
这个例子中划红线的,原左边记录被“偏袒”留下了,右边的剔除了(置为null)
right join同理偏袒右(right)边的表,但是inner join “偏心”向中间 就和 where没区别了。
2.而where呢,它是在生成连接结果之后,再去一整条记录去剔除(原两张表的内容都会被剔除)