张继德
【摘要】SQL语言是数据库原理、数据库应用等课程的核心内容,也是这些课程的重点及难点,本文结合SQL语言在实际工程中的应用,从教学内容取舍、教学过程等方面,提出了一些应对策略。
【关键词】数据库应用SQL语言教学教学内容
【基金项目】河北联合大学教改资助项目,项目编号Z1108-08。
【中图分类号】G64 【文献标识码】A 【文章编号】2095-3089(2014)06-0144-01
SQL(Structured Query Language)语言作为数据库的标准操作语言,在基于数据库的应用系统开发中应用十分广泛,SQL语言也是数据库应用、数据库原理、多种开发工具类课程以及毕业设计等实践环节均会涉及到的内容,并且是这些课程的重点及难点,学生能否掌握及熟练使用SQL语言,是能否进行数据库应用系统开发的基础和关键。尽管SQL语言具有高度结构化的特点,基本的SQL语句语法也并不复杂,通过教师的讲解绝大多数学生都能够理解,但是要弄懂全部的語法结构并将SQL语句灵活应用于实际项目,却让很多学生感到力不从心。本文针对SQL语言教学过程中遇到的一些实际问题,提出了解决方法和应对策略。
一、语法过于庞杂,令学生望而却步。
多数教材考虑到语法的完整性,会罗列出SQL语句的全部语法,使得看上去相当庞杂,学生很难搞清楚所有的语法构成成分,从而增加了学生的畏难情绪。
比如SQL语句中最常用的SELECT语句的语法如下:
[WITH
SELECT[ ALL | DISTINCT ]
[ TOP expression [ PERCENT ] [ WITH TIES ] ]
[ INTO new_table ]
[ FROM table_source ]
[ WHERE search_condition ]
[ GROUP BY group_by_expression]
[ HAVING search_condition]
[ ORDER BY order_expression [ ASC | DESC ] ]
{*
| { table_name | view_name | table_alias }.*
|{column_name | [ ] expression | $IDENTITY|$ROWGUID} [ [ AS ] column_alias ]
| udt_column_name [ { . | :: } { { property_name | field_name } | method_name(argument [,...n] ) } ]
| column_alias = expression } [ ,…n ]
面对如此庞杂的语法,很多同学会望而却步。
笔者针对这个问题,提出如下的解决方法:
1.摒弃完整语法,通过简单的例子引入最简单的语法,培养成就感。
兴趣是最好的老师,而成就感能有效的提高学生的学习兴趣。所以在学习SQL语言的过程中,应该摒弃复杂的SQL语法,让学生很快并经常性的体验到成就感,树立起学生对学好SQL语言的信心。
例如通过查询学生基本信息的示例“SELECT 学号,姓名 FROM 学生表”入手,总结出最简单的SELECT语句语法为:
SELECT 列名1,列名2,…, 列名n FROM表名
然后通过逐步加深应用的需求来逐渐增加语法成分。而极少用到的语法成分,则可不讲解。完整的语法结构可以最后给出,并且只讲语法符号的含义,而不讲语法的含义,感兴趣的学生自己阅读相关参考手册了解具体含义,教师负责答疑。
2.能用中文表示的语法成分尽量用中文表示。
多数教材考虑到语法的规范性,或者是为了与MSDN保持一致,SQL语句采用全英文语法,使得部分英文不太好的学生产生抵触情绪。通过笔者实践,除了关键词外,尽量使用中文形式的语法,会更容易被学生接受。
二、学生不知道如何应用SQL语句解决实际问题。
通过教师讲解,多数学生都能掌握基本SQL语句的编写,但是多数同学不能将所学内容灵活应用于实际项目。比如学生能够理解函数、自连接等内容,但是给出实际问题时却不知道如何解决。针对这种问题,笔者结合多年的教学及工程经历,精心收集、设计了一些数据库应用的案例,比如超市的进销存系统、公司的财务管理系统、学校的学生成绩管理系统、网站的后台管理等,让学生将所学内容与工程实际紧密结合起来,着手处理和解决实际应用问题。
如:在进销存系统中,销售单表(产品编码, 产品名称, 销售单号, 数量,单价,金额),有类似表1的统计要求。
表1 销售情况统计表
产品编码:0001 产品名称:联想笔记本电脑
解1 使用内连接
select t1.*,(select sum(金额) from销售单表where 产品编码=t1.产品编码 and 销售单号<=t1.销售单号)
from 销售单表t1 where 产品编码=‘0001
解2 使用标量函数
create function uf_sum(@产品编码 char(20),@销售单号 char(20))
returns decimal(12,2)
as
begin
declare @sum decimal(12,2)
select @sum=sum(金额) from 销售情况统计表 where 产品编码=@产品编码 and 销售单号<=@销售单号
return @sum
end
select t1.*,dbo.uf_sum(产品编码,销售单号)
from 销售情况统计表 t1 where 产品编码=‘0001
三、教师讲得多,学生练得少。
1.多年来受多种因素的制约,课程评价基本上沿袭以理论考核为主,以闭卷为主。然而,在实际工程中强调的却是团队合作、强调充分利用互联网信息等现代化手段,因此课程考核方式应采取开放式考核、实际项目考核,加大上机考核的比重,实践性较强的知识点尽量放在上机操作上进行考核,重点测试学生的实践技能,把任务分解给学生,在上机时独立完成。
2.加大上机的比重,上机课时不少于三分之一,甚至可以达到50%。
针对上述问题提出的解决方案,经过教学实践检验,提高了学生解决实践问题的能力,收到了较好的教学效果。