摘 ?要:智慧旅商平臺為師生提供校園資訊、信息查詢、在線辦公、生活服務(wù)等校園全方位信息服務(wù)。本文以“智慧旅商移動APP”為信息檢索的平臺,圍繞“分組”展開數(shù)據(jù)查詢,以解決宿舍的用電查詢問題。在編寫數(shù)據(jù)查詢的T-SQL語句過程中,對“HAVING”子句的條件篩選和“WHERE”子句的條件篩選進(jìn)行比較,總結(jié)出這兩種子句的條件篩選所使用的環(huán)境。
關(guān)鍵詞:管理系統(tǒng);信息檢索;數(shù)據(jù)查詢
中圖分類號:TP315 ? ? 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2019)17-0012-03
Abstract:The Intelligent Travel Business Platform provides all-round campus information services for teachers and students,such as campus information,information inquiry,online office,life services and so on. This paper takes “smart traveler mobile APP” as the information retrieval platform,launches data query around “grouping” to solve dormitory power query. In the process of writing T-SQL statement for data query,comparing the conditional filter of “HAVING” clause with the conditional filter of “WHERE” clause,get the summary of working environment for both of conditional filter clause.
Keywords:management system;information retrieval;data query
0 ?引 ?言
智慧旅商平臺為師生提供校園資訊、信息查詢、在線辦公、生活服務(wù)等校園全方位信息服務(wù)。本文以“智慧旅商移動APP”為信息檢索的平臺,針對智慧旅商平臺中的“用電查詢”模塊,根據(jù)前臺的人機(jī)界面和后臺的數(shù)據(jù)表結(jié)構(gòu),圍繞“分組”展開數(shù)據(jù)查詢,寫出分組的T-SQL語句。在編寫數(shù)據(jù)查詢的T-SQL語句過程中,對T-SQL語句中的HAVING子句的條件篩選和WHERE子句的條件篩選進(jìn)行比較,總結(jié)出這兩種子句的區(qū)別。作為計(jì)算機(jī)編程人員,面對程序,需要進(jìn)行一次次的試錯(cuò)、糾錯(cuò)、歸納總結(jié),不斷完善界面中的功能。
1 ?智慧旅商平臺簡介
智慧旅商是常州旅游商貿(mào)高等職業(yè)技術(shù)學(xué)校定制開發(fā)的校園應(yīng)用APP,其升級了教育教學(xué)管理信息化水平,打造全終端師生互動渠道,充分適應(yīng)網(wǎng)絡(luò)信息化趨勢下師生行為方式、學(xué)習(xí)方式、生活方式的變化,拓寬了師生互動的渠道,增強(qiáng)了師生互動有效性。
“智慧旅商移動APP”目前整合了校園網(wǎng)站的相關(guān)內(nèi)容,集成了OA移動辦公、一卡通在線查詢、工資查詢、場地預(yù)約、校內(nèi)黃頁、旅商社團(tuán)、圖書查詢等功能,后期將增加教務(wù)學(xué)工模塊、不僅可以實(shí)時(shí)查詢教務(wù)學(xué)工信息,還可以通過“移動課堂”功能,以課堂為單位實(shí)現(xiàn)教師與學(xué)生的雙向互動,此外,學(xué)生還可以在“學(xué)業(yè)預(yù)警”功能中了解掌握自己的學(xué)業(yè)研讀情況。而“消息推送”功能更是可以實(shí)現(xiàn)信息在師生之間“直達(dá)”推送,減少了傳統(tǒng)信息發(fā)布模式中信息量減損的問題。
2 ?通過分組實(shí)現(xiàn)數(shù)據(jù)查詢
本文以“智慧旅商移動APP”為信息檢索的平臺,通過聚合函數(shù)[1]COUNT()統(tǒng)計(jì)全校住宿生人數(shù),聚合函數(shù)SUM()統(tǒng)計(jì)宿舍的用電總量。常用的聚合函數(shù)如表1所示。
我們以“智慧旅商移動APP”中用電查詢的界面為例,如圖1所示。
在后臺數(shù)據(jù)庫中,房間用電情況數(shù)據(jù)表結(jié)構(gòu)如表2所示。
我們來探究如何實(shí)現(xiàn)查詢每個(gè)房間的用電總量和電費(fèi)總額。我們可以通過上面的聚合函數(shù)以及數(shù)據(jù)查詢中的WHERE子句來實(shí)現(xiàn)。查詢語句如下:
SELECTSUM(yongdianliang)AS'用電總量',SUM(yong dianfei)AS'電費(fèi)總額'
FROMfangjianyongdian_info
WHEREfangjian='15101'
SELECTSUM(yongdianliang)AS'用電總量',SUM(yong dianfei)AS'電費(fèi)總額'
FROMfangjianyongdian_info
WHEREfangjian='15102'
SELECTSUM(yongdianliang)AS'用電總量’,SUM(yong dianfei)AS'電費(fèi)總額'
FROMfangjianyongdian_info
WHEREfangjian='19210'
……
依次類推,能夠查詢出每個(gè)房間的用電總量和電費(fèi)總額。其實(shí)我們可以通過更加便捷有效的方式去實(shí)現(xiàn),那就是分組[2]。通過分組實(shí)現(xiàn),查詢語句如下:
SELECTfangjian AS'房間',SUM(yongdianliang)AS '用電總量',SUM(yongdianfei)AS'電費(fèi)總額'
FROMfangjianyongdian_info
GROUPBYfangjian
查詢的結(jié)果如圖2所示。
對比上述的兩種方式(WHERE子句和分組GROUP BY子句)來實(shí)現(xiàn)查詢每個(gè)房間的用電總量和用電總額,我們可以發(fā)現(xiàn),使用分組GROUP BY子句[3]的好處是縮短代碼,提高代碼的執(zhí)行效率,使查詢速度更快。使用分組,查詢結(jié)果更加清晰、一目了然。
在使用分組實(shí)現(xiàn)數(shù)據(jù)查詢的時(shí)候,通常會出現(xiàn)以下兩種錯(cuò)誤:
第一種:
SELECT fangjian,shijian,SUM(yongdianliang)AS'用電總量',SUM(yongdianfei)AS’電費(fèi)總額'
FROMfangjianyongdian_info
GROUPBYfangjian
錯(cuò)誤消息:消息8120,級別16,狀態(tài)1,第1行
選擇列表中的列'fangjianyongdian_info.shijian'無效,因?yàn)樵摿袥]有包含在聚合函數(shù)或GROUP BY子句中。
解決方案:因?yàn)閟hijian不是分組列,分組列是fangjian。去掉shijian列。
正確的T-SQL語句:
SELECTfangjian,SUM(yongdianliang)AS'用電總量',SUM(yongdianfei)AS'電費(fèi)總額'
FROMfangjianyongdian_info
GROUPBYfangjian
結(jié)論1:當(dāng)使用GROUP BY子句進(jìn)行分組時(shí),SELECT 語句的列表中所選擇的列一定是GROUP BY子句后面的分組依據(jù)列或聚合函數(shù)。
第二種:
SELECTfangjianAS'房間',SUM(yongdianliang)AS'用電總量',SUM(yongdianfei)AS'電費(fèi)總額’
FROMfangjianyongdian_info
GROUPBYfangjian
WHERE fangjian='15101'
錯(cuò)誤消息:消息156,級別15,狀態(tài)1,第4行
關(guān)鍵字'WHERE'附件有語法錯(cuò)誤。
解決方案:我們使用分組GROUP BY子句,對分組后面的列進(jìn)行條件篩選,我們只能用HAVING子句。如果想用WHERE子句,GROUP BY子句只能放在WHERE子句的后面。
正確的T-SQL語句:
SELECTfangjianAS'房間',SUM(yongdianliang)AS'用電總量',SUM(yongdianfei)AS'電費(fèi)總額'
FROMfangjianyongdian_info
GROUPBYfangjian
HAVING fangjian='15101'
或者:
SELECTfangjianAS'房間',SUM(yongdianliang)AS'用電總量',SUM(yongdianfei)AS'電費(fèi)總額'
FROMfangjianyongdian_info
WHERE fangjian='15101'
GROUPBYfangjian
結(jié)論2:對分組后的結(jié)果進(jìn)行篩選,我們用HAVING。當(dāng)SELECT語句中包含有WHERE子句的時(shí)候,GROUP BY子句只能放在WHERE子句的后面。
3 ?HAVING子句條件篩選和WHERE子句的條件篩選的比較
本論文中主要圍繞通過分組來實(shí)現(xiàn)查詢每個(gè)房間的用電總量和電費(fèi)總額,在這個(gè)過程中我們發(fā)現(xiàn)對分組后的結(jié)果進(jìn)行篩選,可以用HAVING子句篩選出15號樓101房間的用電總量、電費(fèi)總額,也可以通過WHERE子句去實(shí)現(xiàn)15號樓101房間的用電總量、電費(fèi)總額的查詢。HAVING子句條件篩選和WHERE子句的條件篩選區(qū)別[3]主要表現(xiàn)在以下幾點(diǎn):
(1)HAVING和WHERE都是用來進(jìn)行條件篩選[4]的。WHERE子句的作用是在對查詢結(jié)果進(jìn)行分組前,將不符合WHERE條件的行去掉,即在分組之前過濾數(shù)據(jù),條件中不能包含聚組函數(shù),使用WHERE條件顯示特定的行。HAVING子句的作用是篩選滿足條件的組,即在分組之后過濾數(shù)據(jù),條件中經(jīng)常包含聚組函數(shù),可以使用HAVING條件顯示特定的組,也可以使用多個(gè)分組標(biāo)準(zhǔn)進(jìn)行分組。
(2)WHERE不能放在GROUP BY后面,HAVING是跟GROUP BY連在一起用的,放在GROUP BY后面,此時(shí)的作用相當(dāng)于WHERE,WHERE后面的條件中不能有聚集函數(shù),比如SUM(),AVG()等,而HAVING可以。
4 ?結(jié) ?論
本文以“智慧旅商移動APP”為信息檢索的平臺,圍繞“分組”展開數(shù)據(jù)查詢,以解決智慧旅商中的宿舍用電查詢問題。在探究的過程中,我們分析出HAVING子句條件篩選和WHERE子句的條件篩選的不同,主要是WHERE不能放在GROUP BY后面,HAVING是跟GROUP BY連在一起用的,放在GROUP BY后面,此時(shí)的作用相當(dāng)于WHERE。WHERE后面的條件中不能有聚集函數(shù),比如SUM(),AVG()等,而HAVING可以。WHERE和HAVING都是對查詢結(jié)果的一種篩選,都是設(shè)定條件的語句。
作為計(jì)算機(jī)編程人員,對于人機(jī)界面,我們需要去分析人機(jī)界面實(shí)現(xiàn)的原理,用相應(yīng)的編程語言去實(shí)現(xiàn)人機(jī)界面的功能。
參考文獻(xiàn):
[1] 張蒲生.數(shù)據(jù)庫應(yīng)用技術(shù)SQL Server2005基礎(chǔ)篇 [M].北京:機(jī)械工業(yè)出版社,2008.
[2] 陳永強(qiáng).SQL Server數(shù)據(jù)庫企業(yè)應(yīng)用系統(tǒng)開發(fā) [M].北京:清華大學(xué)出版社,2005.
[3] 劉志成,寧云智.數(shù)據(jù)庫系統(tǒng)原理與應(yīng)用 [M].北京:機(jī)械工業(yè)出版,2010.
[4] 王永樂.SQL Server2008數(shù)據(jù)庫項(xiàng)目教程 [M].北京:郵電大學(xué)出版社,2012.
作者簡介:蘇玉燕(1989-),女,漢族,江蘇常州人,教師,助講,碩士,研究方向:計(jì)算機(jī)。