小白学mysql中。。。
很容易把where和having弄混淆,特地总结一下,给新入门的小伙伴,大家共勉!
where是从数据表中的字段直接进行的筛选的,而having是从前面筛选的字段再筛选。
下面用一个例子来具体的讲解:
全表为:
- where和having都可以使用的场景
1)SELECT first_name,last_name FROM person_test WHERE first_name=‘s’;
2)SELECT first_name,last_name FROM person_test HAVING first_name=‘s’;
解释:上面的having可以用的前提是我已经筛选出了first_name字段,在这种情况下和where的效果是等效的,但是如果没有select first_name就会报错!!因为having是从前面筛选的字段再筛选,而where是从数据表中的字段直接进行的筛选的。
- 只可以用where,不可以用having的情况
1) SELECT first_name,last_name FROM person_test WHERE sex=‘male’;
2) SELECT first_name,last_name FROM person_test HAVING sex=‘male’;
//报错!!!因为前面并没有筛选出sex字段
- 只可以用having,不可以用where情况
计算表中last_name,first_name一样的信息:
1)SELECT COUNT() FROM person_test GROUP BY last_name,first_name HAVING COUNT()>1;
2)SELECT COUNT() FROM person_test GROUP BY last_name,first_name WHERE COUNT()>1;
//报错!!因为from person_test 这张数据表里面没有COUNT(*)这个字段
注意:where 后面要跟的是数据表里的字段。而having只是根据前面查询出来的是什么就可以后面接什么。