WEB开发网
开发学院数据库MSSQL Server 从算法入手讲解SQL Server的典型示例 阅读

从算法入手讲解SQL Server的典型示例

 2008-02-19 09:53:29 来源:WEB开发网   
核心提示: 2.依次批量更新数据库,把所有的level字段的值设置为D,从算法入手讲解SQL Server的典型示例(2),再次更新数据库,把成绩大于等于60的纪录的Level字段更新为C,end_score记录终止分数,level记录介于起始分数和终止分数之间的分数应该得到的成绩,依次更新B、A,这

2.依次批量更新数据库,把所有的level字段的值设置为D,再次更新数据库,把成绩大于等于60的纪录的Level字段更新为C,依次更新B、A。这样做的一个缺点是有些纪录的Level字段被更新多次,比如一个记录最后的Level字段的值是A,则它首先被更新为D,依次被更新为C、B、A。这些重复的更新是可以被消除的,把算法改进一下就可以省去重复更新的花费。更新后的算法是这样的,把成绩介于0和60分的纪录的Level字段更新为D,依次更新各个分数段的成绩。实现的这种算法的SQL语句并不难写出,使用Between…and…表达式即可以表达例如介于80到90之间纪录的选择条件。

3.鉴于第二种方法最后的分析,使用between…and…表达式同时参照一个表来更新纪录,则可以方便表达分数段与相应的level信息,把这些信息存储到一个表level_about中,在更新student_score表的过程中可以参照这个表。计算的过程中,需要把level_about表的内容读出来,然后进行计算。对于整个计算过程来说,牺牲空间和部分效率来换来操作方便,,由于现在计算机的速度相当快,level_about表占用的空间又很小,这方面的损失可以忽略不记。Level_about表中的信息至少包含3个字段:start_score,记录起始分数,end_score记录终止分数,level记录介于起始分数和终止分数之间的分数应该得到的成绩。表中的数据应该类似于这样:

Start_score End_score level
0 59 D
60 79 C
80 89 B
90 100 A

更新student_Score表中的纪录需要依据Start_score和End_score来判断当前记录中成绩所在的Level,在MSSQL中实现的SQL语句:

Update student_score set
student_score.level=level_about.level from
level_about where student.score
between level_about.start_score and level_about.end_score

Tags:算法 入手 讲解

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接