文章

目前顯示的是 六月, 2014的文章

SQL語法中WHERE與HAVING有何差異?

圖片
SQL語法中WHERE與HAVING有何差異? 這兩個都是在進行資料的過濾,但是在使用上是有差別的。 在SQL語法中,我們可以使用WHERE給予條件,進行資料的過濾,例如有如下資料表: 我們使用 SELECT * FROM mymoney WHERE mamount>1000; 如下,資料只顯示出金額大於1000的資料列。 但是如果我們使用  SELECT * FROM mymoney HAVING mamount>1000; 雖然沒有錯誤,但是就不是好的語法了。 為何呢?  因為HAVING只能用在aggregate (合計) 情況下 ,也就是有GROUP BY的時候,並且HAVING要過濾的條件,要跟GROUP BY的合計函數有關。 例如我們來看以下範例:  SELECT SUM(mamount) FROM mymoney WHERE SUBSTR(mdate,1,6)='201401'; 列出符合201401條件的金額加總,如上列出75500。 SELECT SUM(mamount) FROM mymoney WHERE SUBSTR(mdate,1,6)='201401' GROUP BY mperson; 以mperson為群組,列出符合201401條件的金額加總。 如上列出三筆,每筆為符合201401條件的每個人的金額加總。 SELECT SUM(mamount) as s FROM mymoney WHERE SUBSTR(mdate,1,6)='201401' GROUP BY mperson HAVING s>200; 以mperson為群組,列出符合201401條件的金額加總,並且只列出總金額大於200的資料。 如上列出二筆,每筆為符合201401條件的每個人的金額加總。 所以如果你使用WHERE來進行總金額條件的過濾,或是使用HAVING在普通欄位的條件過濾,就不太適合,或是會出現語法錯誤。 因此WHERE與HAVING有何差異呢? (1) 沒有GROUP BY的時候,只使用WHERE而不使用HAVING。 例如: SELECT * FROM mymoney