


摘 ?要:智慧旅商平臺為師生提供校園資訊、信息查詢、在線辦公、生活服務等校園全方位信息服務。本文以“智慧旅商移動APP”為信息檢索的平臺,圍繞“分組”展開數據查詢,以解決宿舍的用電查詢問題。在編寫數據查詢的T-SQL語句過程中,對“HAVING”子句的條件篩選和“WHERE”子句的條件篩選進行比較,總結出這兩種子句的條件篩選所使用的環境。
關鍵詞:管理系統;信息檢索;數據查詢
中圖分類號:TP315 ? ? 文獻標識碼: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 ?引 ?言
智慧旅商平臺為師生提供校園資訊、信息查詢、在線辦公、生活服務等校園全方位信息服務。本文以“智慧旅商移動APP”為信息檢索的平臺,針對智慧旅商平臺中的“用電查詢”模塊,根據前臺的人機界面和后臺的數據表結構,圍繞“分組”展開數據查詢,寫出分組的T-SQL語句。在編寫數據查詢的T-SQL語句過程中,對T-SQL語句中的HAVING子句的條件篩選和WHERE子句的條件篩選進行比較,總結出這兩種子句的區別。作為計算機編程人員,面對程序,需要進行一次次的試錯、糾錯、歸納總結,不斷完善界面中的功能。
1 ?智慧旅商平臺簡介
智慧旅商是常州旅游商貿高等職業技術學校定制開發的校園應用APP,其升級了教育教學管理信息化水平,打造全終端師生互動渠道,充分適應網絡信息化趨勢下師生行為方式、學習方式、生活方式的變化,拓寬了師生互動的渠道,增強了師生互動有效性。
“智慧旅商移動APP”目前整合了校園網站的相關內容,集成了OA移動辦公、一卡通在線查詢、工資查詢、場地預約、校內黃頁、旅商社團、圖書查詢等功能,后期將增加教務學工模塊、不僅可以實時查詢教務學工信息,還可以通過“移動課堂”功能,以課堂為單位實現教師與學生的雙向互動,此外,學生還可以在“學業預警”功能中了解掌握自己的學業研讀情況。而“消息推送”功能更是可以實現信息在師生之間“直達”推送,減少了傳統信息發布模式中信息量減損的問題。
2 ?通過分組實現數據查詢
本文以“智慧旅商移動APP”為信息檢索的平臺,通過聚合函數[1]COUNT()統計全校住宿生人數,聚合函數SUM()統計宿舍的用電總量。常用的聚合函數如表1所示。
我們以“智慧旅商移動APP”中用電查詢的界面為例,如圖1所示。
在后臺數據庫中,房間用電情況數據表結構如表2所示。
我們來探究如何實現查詢每個房間的用電總量和電費總額。我們可以通過上面的聚合函數以及數據查詢中的WHERE子句來實現。查詢語句如下:
SELECTSUM(yongdianliang)AS'用電總量',SUM(yong dianfei)AS'電費總額'
FROMfangjianyongdian_info
WHEREfangjian='15101'
SELECTSUM(yongdianliang)AS'用電總量',SUM(yong dianfei)AS'電費總額'
FROMfangjianyongdian_info
WHEREfangjian='15102'
SELECTSUM(yongdianliang)AS'用電總量’,SUM(yong dianfei)AS'電費總額'
FROMfangjianyongdian_info
WHEREfangjian='19210'
……
依次類推,能夠查詢出每個房間的用電總量和電費總額。其實我們可以通過更加便捷有效的方式去實現,那就是分組[2]。通過分組實現,查詢語句如下:
SELECTfangjian AS'房間',SUM(yongdianliang)AS '用電總量',SUM(yongdianfei)AS'電費總額'
FROMfangjianyongdian_info
GROUPBYfangjian
查詢的結果如圖2所示。
對比上述的兩種方式(WHERE子句和分組GROUP BY子句)來實現查詢每個房間的用電總量和用電總額,我們可以發現,使用分組GROUP BY子句[3]的好處是縮短代碼,提高代碼的執行效率,使查詢速度更快。使用分組,查詢結果更加清晰、一目了然。
在使用分組實現數據查詢的時候,通常會出現以下兩種錯誤:
第一種:
SELECT fangjian,shijian,SUM(yongdianliang)AS'用電總量',SUM(yongdianfei)AS’電費總額'
FROMfangjianyongdian_info
GROUPBYfangjian
錯誤消息:消息8120,級別16,狀態1,第1行
選擇列表中的列'fangjianyongdian_info.shijian'無效,因為該列沒有包含在聚合函數或GROUP BY子句中。
解決方案:因為shijian不是分組列,分組列是fangjian。去掉shijian列。
正確的T-SQL語句:
SELECTfangjian,SUM(yongdianliang)AS'用電總量',SUM(yongdianfei)AS'電費總額'
FROMfangjianyongdian_info
GROUPBYfangjian
結論1:當使用GROUP BY子句進行分組時,SELECT 語句的列表中所選擇的列一定是GROUP BY子句后面的分組依據列或聚合函數。
第二種:
SELECTfangjianAS'房間',SUM(yongdianliang)AS'用電總量',SUM(yongdianfei)AS'電費總額’
FROMfangjianyongdian_info
GROUPBYfangjian
WHERE fangjian='15101'
錯誤消息:消息156,級別15,狀態1,第4行
關鍵字'WHERE'附件有語法錯誤。
解決方案:我們使用分組GROUP BY子句,對分組后面的列進行條件篩選,我們只能用HAVING子句。如果想用WHERE子句,GROUP BY子句只能放在WHERE子句的后面。
正確的T-SQL語句:
SELECTfangjianAS'房間',SUM(yongdianliang)AS'用電總量',SUM(yongdianfei)AS'電費總額'
FROMfangjianyongdian_info
GROUPBYfangjian
HAVING fangjian='15101'
或者:
SELECTfangjianAS'房間',SUM(yongdianliang)AS'用電總量',SUM(yongdianfei)AS'電費總額'
FROMfangjianyongdian_info
WHERE fangjian='15101'
GROUPBYfangjian
結論2:對分組后的結果進行篩選,我們用HAVING。當SELECT語句中包含有WHERE子句的時候,GROUP BY子句只能放在WHERE子句的后面。
3 ?HAVING子句條件篩選和WHERE子句的條件篩選的比較
本論文中主要圍繞通過分組來實現查詢每個房間的用電總量和電費總額,在這個過程中我們發現對分組后的結果進行篩選,可以用HAVING子句篩選出15號樓101房間的用電總量、電費總額,也可以通過WHERE子句去實現15號樓101房間的用電總量、電費總額的查詢。HAVING子句條件篩選和WHERE子句的條件篩選區別[3]主要表現在以下幾點:
(1)HAVING和WHERE都是用來進行條件篩選[4]的。WHERE子句的作用是在對查詢結果進行分組前,將不符合WHERE條件的行去掉,即在分組之前過濾數據,條件中不能包含聚組函數,使用WHERE條件顯示特定的行。HAVING子句的作用是篩選滿足條件的組,即在分組之后過濾數據,條件中經常包含聚組函數,可以使用HAVING條件顯示特定的組,也可以使用多個分組標準進行分組。
(2)WHERE不能放在GROUP BY后面,HAVING是跟GROUP BY連在一起用的,放在GROUP BY后面,此時的作用相當于WHERE,WHERE后面的條件中不能有聚集函數,比如SUM(),AVG()等,而HAVING可以。
4 ?結 ?論
本文以“智慧旅商移動APP”為信息檢索的平臺,圍繞“分組”展開數據查詢,以解決智慧旅商中的宿舍用電查詢問題。在探究的過程中,我們分析出HAVING子句條件篩選和WHERE子句的條件篩選的不同,主要是WHERE不能放在GROUP BY后面,HAVING是跟GROUP BY連在一起用的,放在GROUP BY后面,此時的作用相當于WHERE。WHERE后面的條件中不能有聚集函數,比如SUM(),AVG()等,而HAVING可以。WHERE和HAVING都是對查詢結果的一種篩選,都是設定條件的語句。
作為計算機編程人員,對于人機界面,我們需要去分析人機界面實現的原理,用相應的編程語言去實現人機界面的功能。
參考文獻:
[1] 張蒲生.數據庫應用技術SQL Server2005基礎篇 [M].北京:機械工業出版社,2008.
[2] 陳永強.SQL Server數據庫企業應用系統開發 [M].北京:清華大學出版社,2005.
[3] 劉志成,寧云智.數據庫系統原理與應用 [M].北京:機械工業出版,2010.
[4] 王永樂.SQL Server2008數據庫項目教程 [M].北京:郵電大學出版社,2012.
作者簡介:蘇玉燕(1989-),女,漢族,江蘇常州人,教師,助講,碩士,研究方向:計算機。