讓我們先運行2個sql語句:
代碼如下 復制代碼
SELECT * FROM `welcome` HAVING id >1 LIMIT 0 , 30
SELECT * FROM `welcome` WHERE id >1 LIMIT 0 , 30
查看一下結果吧,怎麼樣?是不是查詢到相同的結果。
讓我們再看2個sql語句:
代碼如下 復制代碼
SELECT user, MAX(salary) FROM users GROUP BY user HAVING MAX(salary)>10;
SELECT user, MAX(salary) FROM users GROUP BY user WHERE MAX(salary)>10;
怎麼樣?看出差別了嗎,第一個sql語句可以正常運行【舊版mysql可能會出錯】,而第二個則會報錯。
如果你沒看出我們再看
•WHERE子句是在第一步從表或視圖中配全SELECT子句把數據過濾性地查詢出來。如:
代碼如下 復制代碼 1.select * from table_a where title1='a';
•HAVING子句是在SELECT子句與WHERE子句把查詢出來的結果存放到內存中的二次過濾。如:
總結
二者相似,卻也有不同。讓我們簡單了解一下。
where和having的區別是where子句對一個表的所有記錄進行操作,只搜索與指定條件相匹配的記錄。
而having子句只對經過操作的表記錄進行檢索,對結果集進行更進一步的篩選。
通常,having子句和group by子句相連,而where子句和select,delete和update語句相連。