第5章数据库编程基础内容提要本章主要介绍数据库程序设计基础。介绍数据管理的发展过程以及数据库的发展过程。从应用的角度介绍了SQL语言,重点介绍了常用的数据查询语言和数据操作语言,并简要介绍了聚合函数、分组查询以及交叉查询的使用方法。最后介绍如何使用ASP程序执行SQL语句。数据库系统简介数据库管理系统——通常是指DBMS(DatabaseManagementSystem)它是一个程序集合,使我们能够在数据库中存储和修改信息,并从数据库中抽取信息。数据管理的发展过程数据管理的发展经历了三个阶段:(1)数据管理最早采用的是人工管理阶段,这一阶段没有支持数据管理的软件,数据和程序不独立。(2)后来发展到文件系统阶段,这一阶段中信息以文件为单位存储,并且由操作系统统一管理。这样逻辑结构和物理结构分离,是数据与程序有了一定的独立性,实现了以文件为单位的共享。(3)最后发展到数据库系统阶段,在这一阶段中,企业或部门以数据为中心组织数据,形成综合性的数据库,为各种应用共享。这样,程序和数据具有较高的独立性,数据容易修改,容易扩展,具有良好的用户接口。数据库的发展过程数据库系统发展经过了四个阶段:(1)20世纪60年代,采用的是层次关系型数据库系统。(2)到了20世纪70年代,采用的是网状型数据库。(3)到了20世纪80年代,采用的是关系型数据库系统,1970年,E.F.Codd博士首先提出关系模型,目前,几乎所有数据库系统全都是建立在关系模型上的。1979年推出的OracleV2是最早的商业关系型数据库系统。(4)到了90年代末期,提出了对象关系型数据库系统,允许定义数据方法和数据类型,通过方法对对象进行操作。数据库的基本术语数据库就是把各种各样的数据按照一定的规则组合在一起形成的数据集合。常用的关系型数据库有:Access、SQLServer、Oracle、DB2和MySQL等等。关系型数据库是由二维表格组成的数据集合。SQL语言概述SQL(StructuredQueryLanguage,结构化查询语言)是关系型数据库的标准语言,是由国际标准组织提出的,各种关系型数据库都支持SQL指令。SQL语句有如下的两大特点:(1)SQL是一种类似于英语的语言,很容易理解和书写。(2)SQL语言是非过程化的语言(第四代语言)。SQL语句分类SQL分类描述数据定义语言数据定义语言(DDL)用于定义、修改或者删除数据库对象,如CreateTable等数据查询语言数据查询语句(DataQueryLanguage,DQL)用于对数据进行检索。如最常用的Select语句数据操纵语言数据操纵语言(DML)用于访问、建立或者操纵在数据库中已经存在数据,如Insert、Update和Delete等等。事务控制语言事务控制语言(TransactControlLanguage)管理DML语句所做的修改,是否保存修改或者放弃修改。如:Commit、Rollback、Savepoint、SetTransaction等命令。数据控制语言数据控制语言(DCL)管理对数据库内对象的访问权限和授予和回收,如Grant、Revoke等等。数据准备首先创建一个Access数据库表,打开Access2000/XP/2003,选择“新建数据库”,数据库命名为:“person.mdb”,出现如图5-2所示界面。基本SQL语句基本的SQL语句包括DQL和DML。也就是对数据库最常用的四大基本操作:查询(SELECT)、插入(INSERT)、更新(UPDATE)和删除(DELETE)。句型一:(最简单的语句)例1:SELECT*FROMgrade功能说明:将grade表中的所有字段取出来。例2:SELECT学号,姓名FROMgrade功能说明:将grade表中学号和姓名字段取出来。例3:SELECT学号,姓名,语文+数学+英语as总成绩FROMgrade功能说明:将grade表中的学号和姓名取出来,并将语文、数学和英语成绩相加产生虚拟列总成绩。基本句型二:(使用条件查询)例1:SELECT*FROMgradeWHERE数学60功能说明:把所有数学成绩大于60分的记录选出来。例2:SELECT*FROMgradeWHERE数学=300OR语文=300功能说明:把数学成绩等于300分或者语文成绩等于300分的人选出来。例3:Like子句基本格式一:“_”匹配。功能说明:每个下划线匹配一个任意字符,注意只匹配一个字符。比如:姓名like'_敏',匹配姓名以“敏”字结尾且字数等于二的所有数据记录,如:“张敏”。例4:Like子句基本格式二:“%”匹配。比如:姓名Like'%敏%',匹配姓名中出现“敏”的所有数据记录,如:“周惠敏”,“于敏”、“敏大”、“敏二”等。比如要在数据库中查询姓江的人,只要利用一条SQL语句就可以,SELECT*FROM数据库表WHERE姓名Like'江%'。基本句型三:(进行排序)例1:SELECT*FROMgradeORDERBY数学注:从低到高排序功能说明:从grade表中取出所有字段,并按数学成绩排序。例2:SELECT*FROMgradeORDERBY数学,语文功能说明:从grade表中取出所有字段,并按数学成绩排序,如果数学成绩相同则按照语文成绩排序。例3:SELECT*FROMgradeORDERBY数学DESC注:从高到低排序功能说明:从grade表中取出所有字段,并按数学成绩倒序。例4:SELECTTOP5*FROMgrade功能说明:从grade表中取出前五条记录的所有字段。DML的基本格式DML包括三种基本格式:数据添加(INSERTINTO)、数据修改(UPDATE)和数据删除(DELETE)。1.DELETE指令:删除数据记录。基本语法:DELETEFROM数据表WHERE条件例:DELETEFROMgradeWHERE数学=0功能说明:删除所有数学成绩为零的记录,如果没有WHERE子句,则删除所有记录。UPDATE指令:更新数据记录基本语法:UPDATE数据表SET字段名1=新值,字段名2=新值…WHERE条件例1:UPDATEgradeSET数学=数学+10说明:将grade表中所有人的成绩加10分例2:UPDATEgradeSET数学=100WHERE姓名like'%敏%'功能说明:将姓名中含有敏的人的数学成绩更新为100分INSERTINTO指令:添加数据记录。(INTO可以省略)基本格式1:INSERTINTO数据表VALUES(字段新值)基本格式2:INSERTINTO数据表(字段一,字段二,……)VALUES(字段新值)其中关键字两种格式的区别是:当VALUES含有数据库表所有字段的值,并且顺序和数据库字段一致时,就可以省略数据库表后面的字段名称。例1:INSERTINTOgrade(学号,姓名,数学)VALUES(1234,'小周',70)例2:INSERTINTOgradeVALUES(5678,'小周',70,80,90)其中,例2等价于:INSERTINTOgrade(学号,姓名,语文,数学,英语)VALUES(5678,'小周',70,80,90)因为包含数据库所有字段,而且顺序和数据库一致,所以字段列表可以省略。聚合函数聚合函数在信息管理系统经常使用,功能是做一些基本的统计和计算。聚合函数有5个,分别是SUM函数、AVG函数、COUNT函数、MAX函数和MIN函数。SUN函数(1)SUN函数,功能是算出某个字段的总值。例.SELECTSUM(数学)ASTotalFROMgrade功能说明:求出所有学生数学成绩总和,这个数值的列名为Total。AVG函数COUNT函数MAX函数MIN函数(2)AVG函数,功能是算出某个字段的平均值。例.SELECTAVG(数学)ASAverageFROMgrade功能说明:求出所有学生数学成绩平均分,这个数值的列名为Average。(3)COUNT函数,功能是算出返回记录的行数。例.SELECTCOUNT(*)ASCountsFROMgrade功能说明:求出满足条件的记录总数。(4)MAX函数,功能是算出某个字段的最大值。例.SELECTMAX(数学)ASFirstFROMgrade功能说明:求出所有学生数学成绩的最高分,这个数值的列名为First。(5)MIN函数,功能是算出某个字段的总值。例.SELECTMIN(数学)ASLastFROMgrade功能说明:求出所有学生数学成绩的最低分,这个数值的列名为Last。分组查询分组查询包括GROUPBY和HAVING关键字。比如计算某班男生女生的数学平均分,利用可以利用分组查询完成。可以使用“SELECT性别,AVG(数学)AS平均分FROMgradeGROUPBY性别”得到男生和女生的平均分需要注意在使用分组查询的时候,有4点需要注意。(1)WHERE子句必须放在GROUPBY子句之前。(2)HAVING子句中只能包含分组字段或者聚合函数。(3)SELECT语句选择的列只能是分组字段或者聚合函数。(4)HAVING必须放在GROUPBY子句之后。交叉查询考虑3个表:学生表(Student)、课程表(Course)和选课表(SC)表的关系如图5-14所示。交叉查询查找选择课程为“软件工程”的所有同学姓名?可以利用如下的SQL语句。SELECTb.snameFROMsca,studentb,coursecWHEREa.cno=c.cnoANDa.sno=b.snoandc.cname=‘软件工程’其中“sca”表示给表sc起的别名为a,同样“studentb”是给student表起的别名b。该查询实现了三个表之间的交叉查询。使用SQL语句操作数据库初步在ASP程序中,可以执行各种SQL语句。通常情况下分成两大类:执行SQL查询语句和执行SQL操作语句。其中SQL查询语句包括SELECT语句,SQL操作语句包括:INSERT语句、UPDATE语句和DELETE语句。执行SQL查询语句执行SQL查询语句如程序5-01.asp所示。可以在文本框内输入测试的Select语句。程序中利用语句“IfRequest(”SQL“)”“Then”判断是否有输入,然后连接到当前文件夹下的person.mdb数据库文件。函数“Functionrstotab(rs)”的功能是将数据以表格的形式输出到浏览器上。每条语句的具体意义,将在下面章节进一步讲解。案例5-1模糊查询系统本案例实现了网站的查询系统,当用户输入姓名的关键字的时候,系统就会从数据库中自动将所有的符合姓名中有这个字的人都显示出来如程序mh.asp所示。将变量加到SQL语句中程序中最关键的是如何将变量加到SQL语句中去。“SQL=”Select*fromgradewhere姓名like‘%“&Key&”%’“”语句中Key是变量,要得到正确的格式只要按照下面的两个步骤进行操作。(1)写出正确的SQL语句,SQL=Select*fromgradewhere姓名like'%敏%',因为姓名是文本型变量,所以必须加上单引号,在SQL语句中,用单引号表示字符型变量。(2)确定要替换的变量,这里是要将“敏”替换成变量Key。替换的规则是:删除“敏”字,在原字符串“敏”的位置,首先加上两个双引号,然后在两个双引号之间加上两个“&”号,最后将变量加到两个“&”号中间。测试SQL操作语句测试以上SQL操作语言,如程序5-02.asp所示。可以将SQL测试语句输入,执行完毕后,然后单击“查看”,可以查看执行后的情况。数据库版本留言簿首先设计留言簿所有的数据库,利用Access2000/XP新建一个名为lyb.mdb的数据库文件,新建lyb数据表时间字段默认值为“Now()”,该默认值自动取系统的时间。该留言簿含有三个