Bootstrap

SQL条件放在on、where、having的区别

三种条件关键字的执行顺序如下:

on > where > 聚合函数 > having

1.表与表之间join的时候首先通过on条件关联,但是主表的记录不会被on条件过滤掉(如:left join时左表为主表,数据将都保留)

2.on条件关联好后,对于生成的数据,再用where条件过滤时,会存在将主表数据过滤掉的情况

3.where条件过滤完后,如果有聚合函数运算的话,进行聚合函数运算

4.聚合函数运算完毕后,对最终结果再进行having过滤,得到最终表

如何选择?

1.如果我们的过滤条件需要基于聚合函数运算后的结果,那就需要放在聚合函数运算后用having过滤,如:要找到平均分大于60的班级,总分大于300分的学生等

2.如果我们的过滤条件不基于聚合函数运算后的结果,而且不要求保留主表所有的数据,那就用where

3.如果我们的过滤条件不基于聚合函数运算后的结果,但要求保留主表所有的数据,那就用on

另外,对于inner join来说,过滤条件放在where 和 on 效果是一样的 。

(如果我们选择用on,比如on t2表中的某个字段值为1,如果t1与t2左关联后,on条件没有匹配上的话,t2的值就会为null)

;