天天看點

where、group by、 having 的用法

where:

資料庫中最常用的是where關鍵字,用于在初始表中篩選查詢。它是一個限制聲明,用于限制資料,在傳回結果集之前起作用。

group by:

對select查詢出來的結果集按照某個字段或者表達式進行分組,獲得一組組的集合,然後從每組中取出一個指定字段或者表達式的值。

having:

用于對where和group by查詢出來的分組經行過濾,查出滿足條件的分組結果。它是一個過濾聲明,是在查詢傳回結果集以後對查詢結果進行的過濾操作。

基本文法:

select 列a,聚合函數 from 表名 where 過濾條件 group by 列a having 過濾條件;

where與having的差別:

1、where一定在group by 之前,having一般在group by 之後;

2、where後的條件表達式裡不允許使用聚合函數,而having可以;

3、having 子句中的每一個元素也必須出現在select清單中(有些資料庫例外,如Oracle)

4、文法順序和執行順序:

①執行where子句查找符合條件的資料,傳回結果集1;

②使用group by 子句對結果集1進行分組;

③對group by 子句形成的組運作聚集函數計算每一組的值,傳回結果集2;

④最後用having 子句去掉不符合條件的組,傳回最終結果集。

即先對select xx from xx的記錄集合用where進行篩選,然後再使用group by 對篩選後的結果進行分組,最後使用having子句對分組後的結果進行篩選。

當加上其他sql語句時,執行順序如下:

select –>where –> group by–> having–>order by

group by 語句中,select中傳回的字段,必須滿足以下兩個條件之一:

①包含在group by語句的後面,作為分組的依據;

②這些字段包含在聚合函數中

相關概念:

聚合函數:聚合函數是SQL語言中一種特殊的函數,例如:

count(*):擷取數量

sum():求和(這裡要注意求和是忽略null值的,null與其他數值相加結果為null,是以可以通過isnull(xxx,0)将null的值賦為0)

avg():求平均數

max():求最大值

min():求最小值

這些函數和其它函數的根本差別就是它們一般作用在多條記錄上。