小白學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只是根據前面查詢出來的是什麼就可以後面接什麼。