SQL中ON和WHERE的区别

一直觉得自己SQL不熟练,于是开始刷SQL题,发现了不懂SQL中ON和WHERE的区别,搜索结果网上几十几十篇的博客互相抄 ,关键抄得还很迷惑。好在最后还是弄懂了。


1.首先on是用在连接join中的,它的意思是在生成连接结果的时候  偏心地 剔除掉一些不符合条件的

至于怎么偏心,比如在left join中 它就“偏袒”左(left)边的表 只把右边的表中不符合条件的剔除了(置为null)

如下:

表main

表ext

可以把这两张表看作是用来存放用户信息的, main放置主要信息,ext表放置附加信息,两张表的关系是1对1的,以id字符作为对应关系键。现在我们需要将地址不为杭州的所有用户信息筛选出来,结果中需要包含main表和ext表的所有字段数据。

select * from main left JOIN ext on main.id = ext.id and address <> '杭州'

闭上眼睛, 请用大脑人肉运行一下这段SQL, 想象一下是什么结果。

这个例子中划红线的,原左边记录被“偏袒”留下了,右边的剔除了(置为null)


right join同理偏袒右(right)边的表,但是inner join “偏心”向中间 就和 where没区别了。


2.而where呢,它是在生成连接结果之后,再去一整条记录去剔除(原两张表的内容都会被剔除)



posted @ 2017-12-23 15:42  词汇族  阅读(348)  评论(0编辑  收藏  举报