包希日莫

[摘 要] 查詢語句的教學在高校計算機專業的數據庫教學中占有重要地位。在數據庫的查詢語句教學中引入了查詢語句統一語句框架以及相應的問答填空式語句構建方法和形式化教學方案,從而克服了傳統教學的諸多弊端,在教學實踐中收到了較好的效果。
[關 鍵 詞] 數據庫;SQL Server;查詢語句;統一語句框架
[中圖分類號] G623.58 [文獻標志碼] A [文章編號] 2096-0603(2018)17-0036-02
一、傳統的數據庫查詢教學
數據庫查詢是計算機專業數據庫教學的重點和難點。目前,即使在主流的項目式或任務驅動的教學模式下,仍在沿用通過具體實例逐一介紹查詢技巧的傳統教學方法[1][2][3]。例如,介紹如何獲取某數據表的前若干條記錄時,通常使用實例
SELECT Top n *
FROM Table1
其含義為返回數據表Table1的前n條記錄;介紹左外連接查詢時,使用類似于
SELECT Table1.Column1,Table2.Column2
FROM Table1
LEFT JOIN Table2
ON Table1.Column1=Table2.Column1
的實例,其含義是返回數據表Table1和Table2的笛卡爾積中的滿足指定匹配條件的記錄的指定列和Table1中的失配記錄的指定列。
雖然遵循由簡單到復雜的教學規律,但是上述教學方法缺乏系統性和關聯性,知識傳授過于零散,不利于學生整體知識結構的形成和解決問題能力的培養。此外,由于過于強調知識傳授的完整性,較難做到主次分明、重點突出,違背教學規律和認知規律[4][5]。
二、數據庫查詢統一語句框架
筆者在數據庫查詢教學中設計和運用了如下圖所示的SQL Server數據庫查詢統一語句框架,并輔以問答填空式語句構建方法和形式化教學方案,克服了傳統教學的上述諸多不足,在實踐中收到了較好的效果。
數據庫查詢統一語句框架將查詢語句的諸多方面有機地關聯和整合在一起,有助于學生認清查詢語句各要素之間的關系并從整體上學習、理解和運用查詢語句。
下面詳細闡述和說明該統一語句框架。
(一)路徑①
SELECT語句不以任何數據表為查詢對象(如查詢當前數據庫的相關信息)時,只包含SELECT關鍵字以及根據需要給出的函數或系統變量列表。例如
SELECT HOST_NAME( ),@@SERVERNAME,DB_NAME( ),@@VERSION
該語句查詢當前的主機名稱、服務器名稱、數據庫名稱以及SQL Server版本。
(二)路徑②、③
SELECT語句以數據表為查詢對象時,SELECT關鍵字后可以跟隨篩選記錄條件,如TOP n、TOP n PERCENT等,之后應為由要求返回其值的列、常量、變量或函數構成的列表。
對數據表進行非外連接查詢時,SELECT語句中應包含FROM關鍵字和被查詢數據表的名稱列表,當這種查詢為條件查詢時,還應包含WHERE關鍵字和查詢條件。例如
SELECT TOP n Table1.Column1,Table2.Column1
FROM Table1,Table2
WHERE Table1.Column1>=Table2.Column1
該語句返回數據表Table1和Table2的迪卡爾積的滿足條件Table1.Column1>= Table2.Column1的前n條記錄的指定列。
對數據表進行返回未匹配記錄的外連接查詢時,SELECT語句應包含
FROM ( )
RIGHT|LEFT|FULL JOIN ( )
ON ( )
FROM、JOIN和ON關鍵字后依次為左數據表名稱、右數據表名稱和匹配條件。外連接查詢的實例請參見本文的第二個例子。
(三)路徑④
對數據表的查詢結果進行分組時,SELECT語句應包含GROUP BY和作為分組依據的列的名稱,需要對分組結果進行進一步篩選時,應包含HAVING關鍵字和篩選條件。例如
SELECT Column1,Function1(*),Function2(Column2)
FROM Table1
GROUP BY Column1
HAVING Column1> n
該語句將Column1的值相同的記錄劃為一組,返回滿足條件Column1> n的各組的Column1列、Funtion1(*)函數和Function2(Column2)函數的值。
(四)路徑⑤
需要對查詢結果進行排序時,SELECT語句中應當引入ORDER BY、排序依據以及升序、降序選擇。例如
SELECT Column1,Column2
FROM Table1
ORDER BY Column2 DESC
該語句對查詢結果以Column2的降序進行排序。需要指出的是,如果GROUP BY后使用ORDER BY,則對分組結果進行排序。例如
SELECT Column1, Function1(Column2)
FROM Table1
GROUP BY Column1
ORDER BY Function1(Column2) DESC
該語句對數據表Table1的內容以Column1為依據進行分組,計算每組記錄的Function1(Column2)值,最后對分組結果按Function1(Column2)的降序進行排序。
三、數據庫查詢的問答填空式語句構建
面對實際查詢需求,可以基于上述統一語句框架,采用問答填空式方法構建需要的查詢語句。
首先,通過回答下列問題,選擇查詢語句的主要關鍵字從而確定其主體結構:
1.是否為數據表查詢?該問題用于取舍上圖框架中的路徑①;
2.數據表查詢時,是否要求返回不匹配的記錄?該問題用于在上圖框架的路徑②和路徑③之間進行選擇;
3.數據表非外連接查詢時,是否有查詢條件?該問題用于決定是否包含WHERE關鍵字;
4.數據表查詢時是否需要分組,分組后是否需要篩選?這些問題分別用于取舍上圖框架中的路徑④以及關鍵字HAVING;
5.數據表查詢時是否需要排序?該問題用于取舍上圖框架中的路徑⑤。
之后,分析確定統一語句框架中被選定關鍵字后的各括號位置上應填的內容,從而構建起完整的查詢語句。
例如,如果查詢需求為“統計圖書信息表中清華大學出版社、電子工業出版社以及機械工業出版社出版的書籍的數量,計算各出版社出版的書籍的平均價格并按平均價格由高到低的順序進行排序”,通過回答上述問題,可以依次做到:舍棄路徑①;在路徑②和③之間選擇路徑②;不包含關鍵字WHERE;選擇路徑④及關鍵字HAVING;選擇路徑⑤。之后在每個關鍵字后填寫查詢需求中提到的條件,即可得到滿足要求的查詢語句:
SELECT 出版社,COUNT(*),AVG(價格)
FROM 圖書信息表
GROUP BY 出版社
HAVING 出版社=′清華大學出版社′OR 出版社=′電子工業出版社′OR出版社=′機械工業出版社′
ORDER BY AVG(價格) DESC。
四、數據庫查詢的教學方案設計
圍繞統一語句框架和配套的語句構建方法展開的數據庫查詢教學,其總體教學方案可設計如下:
(一)實例導入
在介紹數據庫查詢的概念、重要性和應用場景的前提下,讓學生直接感受若干個簡單的查詢語句,從而使他們對數據庫查詢形成初步的感性認識。
(二)統一語句框架與問答填空式語句構建
在闡述查詢語句關鍵字集合的基礎上,重點引入和講授本文的數據庫查詢統一語句框架以及基于該框架的問答填空式查詢語句構造方法。與查詢語句相關的零散內容,如函數的使用、條件表達式的書寫等,可以在介紹問答填空式語句構建方法時附帶講授。
(三)鞏固練習
針對各種查詢需求進行查詢語句構造練習。此期間的練習題覆蓋面要廣,諸多練習題應當涵蓋上圖所示統一語句框架的主要路徑,即練習題中應當包括非外連接(單表查詢、多表查詢)查詢、外連接(左外連接、右外連接、全外連接)查詢以及查詢結果分組與排序的各類題目。
五、總結
以數據庫查詢統一語句框架為核心、輔以問答填空式語句構建方法和形式化教學方案的數據庫查詢教學為傳統教學帶來了諸多變化,如教學內容相互關聯并構成了有機整體;教學過程更加主次分明、重點突出;教學目標更加具體和明確;學生成就感增強,學習積極性得到提高;近乎形式化的過程使學習難度降低,學生負擔減輕。
如何設計形式化教學方案是需要進一步深入探討的課題。
參考文獻:
[1]孫繼紅,黃龍泉.SQL Server 2005數據庫原理及應用[M].北京:國防工業出版社,2012.
[2]魏善沛,何海江.數據庫基礎及應用(SQL Server 2012)[M].北京:機械工業出版社,2017.
[3]張立新,徐劍波.數據庫原理與SQL Server應用教程[M].北京:電子工業出版社,2017.
[4]李丹,趙占坤,丁宏偉,等.SQL Server數據庫管理與開發實用教程[M].2版.北京:機械工業出版社,2015.
[5]陳承歡,趙志茹,肖素華.SQL Server 2014數據庫應用、管理與設計[M].北京:電子工業出版社,2016.