SQL Server数据库查询的统一语句框架
2018-05-14包希日莫
包希日莫
[摘 要] 查询语句的教学在高校计算机专业的数据库教学中占有重要地位。在数据库的查询语句教学中引入了查询语句统一语句框架以及相应的问答填空式语句构建方法和形式化教学方案,从而克服了传统教学的诸多弊端,在教学实践中收到了较好的效果。
[关 键 词] 数据库;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.