MySQL基礎(chǔ)知識——HAVING
點擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,
設(shè)為“置頂或星標(biāo)”,第一時間送達(dá)干貨
HAVING的作用
HAVING 子句使你能夠指定過濾條件,從而控制查詢結(jié)果中哪些組可以出現(xiàn)在最終結(jié)果里面。
WHERE 子句對被選擇的列施加條件,而 HAVING 子句則對 GROUP BY 子句所產(chǎn)生的組施加條件。
HAVING語法
在 SELECT 查詢中,HAVING 子句必須緊隨 GROUP BY 子句,并出現(xiàn)在 ORDER BY 子句(如果有的話)之前。帶有 HAVING 子句的 SELECT 語句的語法如下所示:
SELECT column1,column2
FROM table1,table2
WHERE [conditions]
GROUP BY column1,column2
HAVING [conditions]
ORDER BY column1,column2
示例數(shù)據(jù)表
我們以表customers為例,表中數(shù)據(jù)如下:

表customers
HAVING實例
SELECT?* FROM?Customers
WHERE?城市 IN?(
SELECT?城市 FROM?Customers
GROUP?BY?城市
HAVING?COUNT(1)>1
)結(jié)果為:

上面的代碼用了一個嵌套子查詢(后面會介紹),因為我們只是對城市列進(jìn)行分組,所以子查詢中先將符合條件的城市查詢出來,然后將結(jié)果集返回給主查詢的IN條件。最后得到我們看到的結(jié)果集。
HAVING與WHERE的區(qū)別
HAVING和WHERE都是用來過濾數(shù)據(jù)的,他們可以使用相同的運(yùn)算符來進(jìn)行數(shù)據(jù)過濾,不同的是:
WHERE發(fā)生在HAVING之前,在執(zhí)行HAVING之前,會先將不符合WHERE條件的數(shù)據(jù)過濾掉。
WHERE過濾的是行,而HAVING過濾的是分組聚集后的數(shù)據(jù)。
例如查詢不在廣州的顧客信息,可以這樣寫:
SELECT?* FROM?customers
WHERE?`城市`<>'廣州'結(jié)果為:

這里只是單純的行過濾,沒有涉及分組聚集。
再例如查詢城市不在廣州,且城市相同記錄出現(xiàn)兩次及以上的客戶信息,可以這樣寫:
SELECT?* FROM?Customers
WHERE?城市 IN?(
SELECT?城市 FROM?Customers
WHERE?城市<>'廣州'
GROUP?BY?城市
HAVING?COUNT(1)>1
)
——End——
后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨 后臺回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。 推薦閱讀 這是一個能學(xué)到技術(shù)的公眾號,歡迎關(guān)注
覺得不錯,記得幫忙點下『在看』↓↓↓
