国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

SQL中where, group by, having的用法和區(qū)別

2019-11-10 17:02:03
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

group by,where,having 是數(shù)據(jù)庫(kù)查詢中最常用的幾個(gè)關(guān)鍵字。在工作中,時(shí)常用到,那么,當(dāng)一個(gè)查詢中使用了where ,group by ,having及聚集函數(shù)時(shí) ,執(zhí)行順序是怎么樣的?為了回答這個(gè)問(wèn)題,將這個(gè)三個(gè)關(guān)鍵字的用法整理一下。

where:數(shù)據(jù)庫(kù)中常用的是where關(guān)鍵字,用于在初始表中篩選查詢。它是一個(gè)約束聲明,用于約束數(shù)據(jù),在返回結(jié)果集之前起作用。如下面這個(gè)例子,從user表中查詢出userDepartmentId等于2的數(shù)據(jù)

select * from dbo.user where userDepartmentId=2

group by:對(duì)select查詢出來(lái)的結(jié)果集按照某個(gè)字段或者表達(dá)式進(jìn)行分組,獲得一組組的集合,然后從每組中取出一個(gè)指定字段或者表達(dá)式的值。 在說(shuō)group by的時(shí)候,我們還需要了解聚合函數(shù),聚合函數(shù)是SQL語(yǔ)言中一種特殊的函數(shù)。例如:

count(*):獲取數(shù)量sum():求和(這里要注意求和是忽略null值的,null與其他數(shù)值相加結(jié)果為null,所以可以通過(guò)ifnull(xxx,0)將null的值賦為0)avg():求平均數(shù)max():求最大值min():求最小值

這些函數(shù)和其它函數(shù)的根本區(qū)別就是它們一般作用在多條記錄上。

我們需要注意的是:在使用group by的SQL語(yǔ)句中,select中返回的字段,必須滿足以下兩個(gè)條件之一:

包含在group by語(yǔ)句的后面,作為分組的依據(jù);這些字段包含在聚合函數(shù)中。

從剛才的那個(gè)例子中,我們查詢出每個(gè)城市,相同年齡的員工數(shù)量:

select city, count(*),age from dbo.user where departmentID=2 group by city,age

having:用于對(duì)where和group by查詢出來(lái)的分組經(jīng)行過(guò)濾,查出滿足條件的分組結(jié)果。它是一個(gè)過(guò)濾聲明,是在查詢返回結(jié)果集以后對(duì)查詢結(jié)果進(jìn)行的過(guò)濾操作。 所以having的使用需要注意以下幾點(diǎn):

having只能用于group by(分組統(tǒng)計(jì)語(yǔ)句中)where 是用于在初始表中篩選查詢,having用于在where和group by 結(jié)果分組中查詢having 子句中的每一個(gè)元素也必須出現(xiàn)在select列表中having語(yǔ)句可以使用聚合函數(shù),而where不使用。

還是剛才的例子,我們進(jìn)一步整理,查詢員工數(shù)量大于20的城市和年齡段

select city, count(*),age from dbo.user where departmentID=2 group by city,age having age >40

回到開(kāi)頭的那個(gè)問(wèn)題:當(dāng)一個(gè)語(yǔ)句中同時(shí)含有where、group by 、having及聚集函數(shù)時(shí),執(zhí)行順序如下:

執(zhí)行where子句查找符合條件的數(shù)據(jù);使用group by 子句對(duì)數(shù)據(jù)進(jìn)行分組;對(duì)group by 子句形成的組運(yùn)行聚集函數(shù)計(jì)算每一組的值;最后用having 子句去掉不符合條件的組。

需要注意的是,

having 子句中的每一個(gè)元素也必須出現(xiàn)在select列表中。有些數(shù)據(jù)庫(kù)例外,如Oracle.having子句和where子句都可以用來(lái)設(shè)定限制條件以使查詢結(jié)果滿足一定的條件限制。having子句限制的是組,而不是行。where子句中不能使用聚集函數(shù),而having子句中可以。

當(dāng)加上其他sql語(yǔ)句時(shí),執(zhí)行順序如下: S-F-W-G-H-O 組合

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

順序是不能改變的


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 芦溪县| 奉节县| 台安县| 钟山县| 太谷县| 克东县| 读书| 苍梧县| 广饶县| 新和县| 昌邑市| 黄梅县| 勐海县| 宽甸| 洮南市| 南丰县| 临清市| 翁源县| 罗田县| 金塔县| 永泰县| 禹城市| 林州市| 凌海市| 遂平县| 梨树县| 基隆市| 枣庄市| 大英县| 青龙| 麟游县| 三江| 林西县| 中山市| 田东县| 南部县| 易门县| 阳信县| 措勤县| 弋阳县| 新宾|