where 就不多说了,比较自由,但是必须先where后having,having要与group by 联用,对统计结果进行筛选。在having子句中可以使用出现在查询结果列的字段和统计函数,它对查询以及统计运算的结果再做一次筛选,输出满足having筛选的结果。不出现在输出列中但与查询有关的统计也可以在having子句中被使用。
ON /WHERE /HAVING是sql语句的3个筛选项,按照t-sql的查询顺序,先on在where再having(前提是用到了这些选项。如果没用到,那顺序就推后)。这里先不说on,where是在单表或者多表关联以后,筛选出符合where子句中出现的数据。也就是使得整个where子句为真的数据。having是要在group by以后才能用。而group by 是对已经通过where筛选出来的数据按照一定规则分组,生成新的临时数据集。然后做最后一次筛选,最后才select出来,最主要的两个区别其实就是:
1、顺序,先where再having
2、where几乎没什么限制条件,但是只有用了group by 才能用having,有时候单纯的where不能筛选出希望的数据,比如要先分组再做筛选,此时就要用having或者其他办法。
where是过滤数据“列”,比如where sname='张三',where day='星期三',都是对一些“列”进行刷选。
having 是过滤数据“行”,比如 having count(*)>1,这里需要配合使用group by,group by之后出来一些“行”,加上having count(*)>1就去除了某些“行”的数据
当然得先where sname='' group by '' having ''这是顺序
这是我个人的理解