當一個查詢語句同時出現了where,group by,having,order by的時候,執行順序和編寫順序
使用count(列名)當某列出現null值的時候,count(*)仍然會計算,但是count(列名)不會。
二、數據分組(group by ):
select 列a,聚合函數(聚合函數規范) from 表明 where 過濾條件 group by 列a
group by 字句也和where條件語句結合在一起使用。當結合在一起時,where在前,group by 在后。即先對select xx from xx的記錄集合用where進行篩選,然后再使用group by 對篩選后的結果進行分組。
三、使用having字句對分組后的結果進行篩選,語法和where差不多:having 條件表達式
需要注意having和where的用法區別:
1.having只能用在group by之后,對分組后的結果進行篩選(即使用having的前提條件是分組)。
2.where肯定在group by 之前,即也在having之前。
3.where后的條件表達式里不允許使用聚合函數,而having可以。
4.having后只能跟group by后邊字段條件 或者 非group by(group by 字段也可以使用聚合函數)字段的聚合函數條件(按組查詢);
四、當一個查詢語句同時出現了where,group by,having,order by的時候,執行順序和編寫順序是:
1.執行where xx對全表數據做篩選,返回第1個結果集。 2.針對第1個結果集使用group by分組,返回第2個結果集。
3.針對第2個結果集中的每1組數據執行select xx,有幾組就執行幾次,返回第3個結果集。
4.針對第3個結集執行having xx進行篩選,返回第4個結果集。 5.針對第4個結果集排序。
———————————————————————————————————————————————-
Group By 和 Having, Where ,Order by這些關鍵字是按照如下順序進行執行的:Where, Group By, Having, Order by。
———————————————————————————–
粗淺的理解的話,
SELECT的語法順序就是起執行順序
FROM
WHERE (先過濾單表/視圖/結果集,再JOIN)
GROUP BY
HAVING (WHERE過濾的是行,HAVING過濾的是組,所以在GROUP之后)
ORDER BY
