




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE23 中国地质大学计算机学院《数据库系统概论》实习指导书《数据库系统概论》实习一、实习目的与任务通过实习教学,使学生进一步加深理解数据库系统的基本理论,学会数据库设计方法、DBMS的使用,数据库系统的管理和维护,熟悉数据库技术的应用。二、实习室要求装有WIN2000及SQLSERVER2000的计算机。三、主要教材及参考书教材:《数据库系统概论》(第四版)王珊,萨师煊高等教育出版社参考书目:《SQLServer图解教程》北京希望电子出版社;《SQLServer2000简明教程》,清华大学出版社。四、考核形式1、平时实习完成情况(实习报告质量)20%2、每人独立开发一套数据库应用系统80%五、实习项目与要求序号实习项目名称时数目的及要求实习类型1SQLServer2000基本操作4了解SQLServer2000安装过程,掌握软件的组成,启动,运行。在图形界面下建立数据库及基本数据表,及其表的定义、删除与修改操作。认识2SQL语言综合实习4掌握使用SQL语言创建删除数据库,建立基本数据表,建立索引,更新数据;掌握SQL的数据各种查询;掌握连接、嵌套和集合查询综合3数据库应用系统4提高学生数据库系统的综合设计和开发应用能力,解决实际问题设计实习一实习名称:SQLServer2000基本操作实习主要内容及方法:数据表的定义、删除及修改实习要求:了解并掌握SQL企业管理器的使用;掌握在图形界面方式下的数据创建,基本表的定义、删除与修改。掌握SQLServer的基本功能和使用。实习目的:了解SQLServer2000安装过程,掌握软件的组成,启动,运行。在图形界面下建立数据库及基本数据表,及其表的定义、删除与修改操作。为后继学习作准备。实习设备:装有SQLSERVER2000的电脑实习步骤:(1)启动SQLServer企业管理器;(2)新建数据库StudyDB;新建数据表,修改,删除;数据录入:建议的数据表样式表3.3关系StudentsSno表3.3关系StudentsSnoSnameSsexSageSdeptS01S02S03S04S05S06王建平刘华范林军李伟黄河长江男女女男男男211918191820自动化自动化计算机数学数学数学表3.4关系CoursesCnoCnamePre_CnoCreditsC01C02C03C04C05C06C07英语数据结构数据库DB_设计C++网络原理操作系统C05C02C03C07C054223333表3.5关系ReportsSnoCnoGradeS01S01S02S02S02S03S03S04C01C03C01C02C03C01C02C039284909482729075操作参考资料:SQLServer2000看图教程(PDF)中SQL01,03SQLServer2000简明教程_03,04实习二实习名称:SQL综合应用实习主要内容及方法:SQL语言的综合应用首先验证性试验教材中所有SQL语句的实例,然后选择性试验本指导书中的示例。实习要求:了解并掌握SQL查询分析器及企业管理器的使用。掌握用SQL语言对基本表的定义、删除与修改。教材82页数据表的定义。掌握sql数据插入、修改和删除语句的一般格式及使用方法。教材82页数据表数据的插入。掌握建立索引的二种方法,即在基本表创建过程中建立和用命令方式建立。掌握SQL查询语句的一般格式;掌握无条件、有条件查询及查询结果排序与分组。掌握连接、嵌套和集合查询语句的一般格式及使用方法。掌握sql视图建立、修改和删除。边实习边写实习报告,将实习过程和实习中采用的语句,运行结果,出现的问题及解决办法都写到实习报告中。实习目的:熟练掌握SQL语句的使用方法,为后继学习作准备。实习设备:装有SQLSERVER2000的电脑实习步骤:启动SQL查询分析器;编写SQL语句完成实习要求的各项内容;编写实习报告。建议的基本表样式表3.3关系StudentsSno表3.3关系StudentsSnoSnameSsexSageSdeptS01S02S03S04S05S06王建平刘华范林军李伟黄河长江男女女男男男211918191820自动化自动化计算机数学数学数学表3.4关系CoursesCnoCnamePre_CnoCreditsC01C02C03C04C05C06C07英语数据结构数据库DB_设计C++网络原理操作系统C05C02C03C07C054223333表3.5关系ReportsSnoCnoGradeS01S01S02S02S02S03S03S04C01C03C01C02C03C01C02C039284909482729075用SQL语言对基本表的定义、删除与修改。1定义基本表例3.1建立表3.3所示的学生表Students,每个属性名的意义为Sno-学号、Sname-姓名、Ssex-性别、Sage-年龄、Sdept-所在系。这里要求Sno和Sname不能为空值,且取值唯一。CREATETABLEStudents/*列级完整性约束条件*/(SnoCHAR(5)NOTNULL,/*Sno不能为空值*/SnameCHAR(20)NOTNULL,/*Sname不能为空值*/SsexCHAR(2),SageINT,SdeptCHAR(15),CONSTRAINTun_SnoUNIQUE(Sno),/*Sno取值唯一的约束*/CONSTRAINTun_SnameUNIQUE(Sname));/*Sname取值唯一的约束*/说明:在MicrosoftSQLServer2000的查询分析器(QueryAnalyzer)中使用单条SQL语句,其末尾不需要分号“;”作为命令结尾标记。通常,SQLServer2000对大多数末尾带有分号的SQL命令都能顺利执行,但对少数的SQL命令,末尾若带分号,则SQLServer2000会给出错误信息提示。比如,若在例3.59的SQL命令末尾加上一个分号“;”,SQLServer2000就会出现“Incorrectsyntaxnear';'”的提示,虽然SQLServer2000实际上已经执行了该命令。例3.1-1建立表3.4所示的课程表Courses,其属性名意义分别为Cno-课程号,Cname-课程名,Pre_Cno-先修课程号,Credits-学分。CREATETABLECourses(CnoCHAR(5)NOTNULL,/*Cno不能为空值*/CnameCHAR(20)NOTNULL,/*Cname不能为空值*/Pre_CnoCHAR(5),CreditsINT,CONSTRAINTun_CnoUNIQUE(Cno));/*Cno取值唯一的约束*/例3.1-2建立表3.5所示的成绩表Reports。其中的属性名意义分别为Sno-学号,Cno-课程号和Grade-考试成绩。CREATETABLEReports(SnoCHAR(5)NOTNULL,/*Sno不能为空值*/CnoCHAR(5)NOTNULL,/*Cno不能为空值*/GradeINT,CONSTRAINTSno_CnoUNIQUE(Sno,Cno));/*Sno+Cno取值唯一的约束*/2修改基本表例3.2向基本表Students中增加“入学时间”属性列,其属性名为Sentrancedate,数据类型为DATETIME型。ALTERTABLEStudentsADDSentrancedateDATETIME;
例3.3将Sage(年龄)的数据类型改为SMALLINT型。ALTERTABLEStudentsALTERCOLUMNSageSMALLINT;例3.4删除Sname(姓名)必须取唯一值的约束。ALTERTABLEStudentsDROPCONSTRAINTun_Sname;注意:SQLServer2000增加了删除属性的命令。比如,删除属性列Sentrancedate的命令为:ALTERTABLEStudentsDROPCOLUMNSentrancedate;说明:=1\*GB2⑴为了保证后面例子能够顺利运行,请大家一定将属性列Sentrancedate从Students表中删除。=2\*GB2⑵为了调试SQL语句方便,这里没有在表Reports中增加参照完整性约束,甚至没有定义主键。等本章学完后,第7章的实习系统就是把这些约束全部加上了。3删除基本表例3.5删除Students表。DROPTABLEStudents;说明:此表删除后,请立即用例3.1将其建立起来,以便后面的例子使用。4向表中添加元组例3.6将一个学生元组(S01,王建平,男,21,计算机)添加到基本表Students中。INSERTINTOStudentsVALUES('S01','王建平','男',21,'自动化');说明:=1\*GB2⑴请读者用这个命令将其余5个学生的元组也添加到基本表Students中。=2\*GB2⑵向Courses表插入元组(‘C01’,’英语’,’’,4)的命令为:INSERTINTOCoursesVALUES('C01','英语','',4);请大家将其余6门课程的信息插入Courses表中。例3.7将学习成绩的元组(‘S01’,’C01’)添加到基本表Reports中。INSERTINTOReports(Sno,Cno)VALUES(‘S01’,’C01’);说明:请大家用这个命令将其余7个选课元组也添加到基本表Reports中.建立索引1建立索引例3.8为学生选课数据库中的Students,Courses,Reports三个表建立索引。其中Students表按Sno(学号)升序建唯一索引,Courses表按Cno(课程号)升序建唯一索引,Reports表按Sno(学号)升序和Cno(课程号)号降序建唯一索引。其语句为:CREATEUNIQUEINDEXStu_SnoONStudents(Sno);CREATEUNIQUEINDEXCou_CnoONCourses(Cno);CREATEUNIQUEINDEXRep_ScnoONReports(SnoASC,CnoDESC);例3.9在基本表Students的Sname(姓名)和Sno(学号)列上建立一个聚簇索引,而且Students中的物理记录将按照Sname值和Sno值的升序存放。其语句为:CREATECLUSTEREDINDEXStu_Sname_SnoONStudents(Sname,Sno);2删除索引例3.10删除基本表Reports上的Rep_SCno索引。DROPINDEXReports.Rep_Scno;SQL查询1无条件查询例3.11查询全体学生的详细记录。这是一个无条件的选择查询,其命令为:SELECT*/*这里的“*”等价于ALL*/FROMStudents;其结果为表3.3中的全部数据。例3.12查询全体学生的姓名(Sname)、学号(Sno)、所在系(Sdept)。这是一个无条件的投影查询,其命令为:SELECTSname,Sno,SdeptFROMStudents;例3.13查询全体学生的姓名(Sname)、出生年份及学号(Sno)。由于SELECT子句的<目标列表达式>不仅可以是表中的属性列,也可以是表达式,故可以查询经过计算的值。其命令为:SELECTSno,Sname,2001-SageFROMStudents;例3.14查询全体学生的姓名、出生年份和学号,要求用小写字母表示学号中的字母。其命令为:SELECTSname,’Birth:’Title,1996-SageBirthYear,LOWER(Sno)LsnoFROMStudents;例3.15查询选修了课程的学生学号。其命令为:SELECTDISTINCTSnoFROMReports;2条件查询例3.16查询数学系全体学生的学号(Sno)和姓名(Sname)。其命令为:SELECTSno,SnameFROMStudentsWHERESdept='数学';例3.17查询所有年龄在18~22岁(包括18岁和22岁)之间的学生姓名(Sname)及年龄(Sage)。其命令为:SELECTSname,SageFROMStudentsWHERESage=18ANDSage<=22;例3.18查询年龄在18~22岁(包括18岁和22岁)之间的学生姓名(Sname)及年龄(Sage)。其命令为:SELECTSname,SageFROMStudentsWHERESageBETWEEN18AND22;例3.19查询年龄不在18-22岁之间的学生姓名(Sname)及年龄(Sage)。其命令为:SELECTSname,SageFROMStudentsWHERESageNOTBETWEEN18AND22;例3.20查询自动化系、数学和计算机系学生的学号(Sno)、姓名(Sname)和性别(Ssex)。其命令为:SELECTSno,Sname,Ssex
FROMStudentsWHERESdeptIN('自动化','数学','计算机');等价于:SELECTSname,SsexFROMStudentsWHERESdept='自动化'ORSdept='数学'ORSdept='计算机';例3.21查询既不是信息系、数学系、也不是计算机系的学生的姓名(Sname)和性别(Ssex)。其命令为:SELECTSname,SsexFROMStudentsWHERESdeptNOTIN('自动化','数学','计算机');例3.22查询所有姓刘的学生的姓名(Sname)、学号(Sno)和性别(Ssex)。其命令为:SELECTSname,Sno,SsexFROMStudentsWHERESnameLIKE'刘%';例3.23查询姓“刘”且全名为4个汉字的学生的姓名(Sname)和所在系(Sdept)。其命令为:SELECTSname,Sdept
FROMStudents
WHERESnameLIKE'刘____';
例3.24查询所有不姓刘的学生姓名(Sname)和年龄(Sage)。SELECTSname,SageFROMStudentsWHERESnameNOTLIKE'刘%';例3.25查询课程名为“DB_设计”的课程号(Cno)和学分(Credits)。其命令为:SELECTCno,CreditsFROMCoursesWHERECnameLIKE'DB\_设计'ESCAPE'\';例3.26查询以"DB_"开头,且倒数第2个汉字字符为“设”的课程的详细情况。其命令为:SELECT*FROMCoursesWHERECnameLIKE'DB\_%设__'ESCAPE'\';例3.27假设某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。试查询缺少成绩的学生的学号(Sno)和相应的课程号(Cno)。其命令为:SELECTSno,CnoFROMReportsWHEREGradeISNULL;例3.28查询所有有成绩的学生学号(Sno)和课程号(Cno)。其命令为:SELECTSno,Cno
FROMReports
WHEREGradeISNOTNULL;3查询结果排序例3.29查询选修了C03号课程的学生的学号(Sno)和成绩(Grade),并按成绩降序排列。其命令为:SELECTSno,GradeFROMReportsWHERECno='C03'ORDERBYGradeDESC;例3.30查询全体学生情况,查询结果按所在系的系名(Sdpet)升序排列,同一系中的学生按年龄(Sage)降序排列。其命令为:SELECT*FROMStudentsORDERBYSdept,SageDESC;4集函数的使用例3.31查询学生总人数。其命令为:SELECTCOUNT(*)FROMStudents;例3.32查询选修了课程的学生人数。其命令为:SELECTCOUNT(DISTINCTSno)FROMReports;例3.33计算选修C01号课程的学生平均成绩。其命令为:SELECTAVG(Grade)FROMReportsWHERECno='C01';例3.34查询选修C01号课程的学生最高分数。其命令为:SELECTMAX(Grade)FROMReportsWHERECno='C01';5查询结果分组例3.35求各个课程号(Cno)及相应的选课人数。其命令为:SELECTCno,COUNT(Sno)CntSnoFROMReportsGROUPBYCno;例3.36查询选修了3门或3门以上课程的学生学号(Sno)。其命令为:SELECTSnoFROMReportsGROUPBYSnoHAVINGCOUNT(Cno)>连接、嵌套和集合查询一、连接查询1不同表之间的连接查询例3.37查询每个学生及其选修课程的情况。本查询实际上是涉及Students与Reports两个表的连接操作。这两个表之间的联系是通过公共属性Sno实现的,因此,其操作命令为:SELECTStudents.*,Reports.*FROMStudents,ReportsWHEREStudents.Sno=Reports.Sno;说明:若在以上等值连接中把目标列中重复的属性列去掉则为自然连接XE"自然连接",其命令为SELECTStudents.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudents,ReportsWHEREStudents.Sno=Reports.Sno;例3.38查询每个学生的学号(Sno)、姓名(Sname)、选修的课程名(Cname)及成绩(Grade)。本查询涉及到三个表的连接操作,完成该查询的SQL语句如下:SELECTStudents.Sno,Sname,Cname,GradeFROMStudents,Reports,CoursesWHEREStudents.Sno=Reports.SnoANDReports.Cno=Courses.Cno;2自身连接例3.39查`询每一门课的间接先修课(即先修课的先修课)。在Courses表关系中,只有每门课的直接先修课信息,而没有先修课的先修课。要得到这个信息,必须先对一门课找到其先修课,再按此先修课的课程号,查找它的先修课程。这就需要要将Courses表与其自身连接。为方便连接运算,这里为Courses表取两个别名分别为A,B。则完成该查询的SQL语句为:SELECTA.Cno,A.Cname,B.Pre_CnoFROMCoursesA,CoursesBWHEREA.Pre_Cno=B.Cno;3外连接例3.40把例3.37中的等值连接改为左连接。该左连接操作在SQLServer2000中的命令格式为:SELECTStudents.Sno,Sname,Ssex,Sdept,Cno,GradeFROMStudentsLEFTJOINReportsONStudents.Sno=Reports.Sno;说明:以上左连接操作也可以用如下的右连接操作代替,其结果完全一样。SELECTStudents.Sno,Sname,Ssex,Sdept,Cno,GradeFROMReportsRIGHTJOINStudentsONReports.Sno=Students.Sno;二、嵌套查询1带谓词IN的嵌套查询例3.41查询选修了编号为“C02”的课程的学生姓名(Sname)和所在系(Sdept)。SELECTSname,SdeptFROMStudentsWHERESnoIN(SELECTSnoFROMReportsWHERECno='C02');例3.42查询与“李伟”在同一个系学习的学生学号(Sno)、姓名(Sname)和系名(Sdept)。该查询可构造嵌套查询实现,其SQL语句如下:SELECTSno,Sname,SdeptFROMStudentsWHERESdeptIN(SELECTSdeptFROMStudentsWHERESname=’李伟’);说明:本例中的查询也可以用自身连接来完成,其SQL语句如下:SELECTA.Sno,A.Sname,A.SdeptFROMStudentsA,StudentsBWHEREA.Sdept=B.SdeptANDB.Sname=’李伟’;例3.43查询选修了课程名为“数据结构”的学生学号(Sno)和姓名(Sname)。本查询涉及学号、姓名和课程名(Cname)三个属性。学号和姓名存放在Students表中,课程名的存放在Courses表中,但Students与Courses两个表之间没有公共属性,必须通过Reports表建立它们之间的联系。所以本查询实际上涉及三个关系的连接操作。SELECTSno,Sname/*③最后在Studenst关系中*/FROMStudents/*取出Sno和Sname*/WHERESnoIN(SELECTSno/*②然后在SC关系中找出*/FROMReports/*选修了3号课程的学生学号*/WHERECnoIN(SELECTCno/*①首先在Courses关系中*/FROMCourses/*找出“数据结构”的课程号,*/WHERECname=‘数据结构’));/*结果为C02号*/说明:本查询同样可以用连接查询实现:SELECTS.Sno,SnameFROMStudentsS,ReportsR,CoursesCWHERES.Sno=R.SnoANDR.Cno=C.CnoANDC.Cname='数据结构';2带有比较运算符的嵌套查询例3.44将例3.42改为带有比较运算符的嵌套查询。由于一个学生只可能在一个系学习,因此子查询的结果是一个值,因此可以用=代替IN,其SQL语句如下:SELECTSno,Sname,SdeptFROMStudentsWHERESdept=(SELECTSdeptFROMStudentsWHERESname=’李伟’);3带谓词ANY或ALL的嵌套查询例3.45查询非自动化系的不超过自动化系所有学生的年龄的学生姓名(Sname)和年龄(Sage)。其查询命令为SELECTSname,SageFROMStudentsWHERESdept<>'自动化'ANDSage<=ALL(SELECTSageFROMStudentsWHERESdept='自动化');说明:本查询也可以用集函数来实现。其SQL语句如下:SELECTSname,SageFROMStudentsWHERESdept<>'自动化'ANDSage<=(SELECTMIN(Sage)FROMStudentsWHERESdept='自动化');4带谓词EXISTS的嵌套查询例3.46查询所有选修了编号为“C01”课程的学生姓名(Sname)和所在系(Sdept)。本查询的SQL语句是:SELECTSname,SdeptFROMStudentsWHEREEXISTS(SELECT*FROMReportsWHERESno=Students.SnoANDCno='C01');例3.47将例3.42改为带谓词EXISTS的查询,其SQL语句如下SELECTSno,Sname,SdeptFROMStudentsAWHEREEXISTS(SELECT*FROMStudentsBWHEREB.Sdept=A.SdeptANDB.Sname=’李伟’);例3.48查询选修了所有课程的学生姓名(Sname)和所在系。由于没有全称量词,可将题目的意思转换成等价的用存在量词的形式:查询这样的学生,没有一门课程是他不选修的。其SQL语句为:SELECTSname,SdeptFROMStudentsWHERENOTEXISTS(SELECT*FROMCoursesWHERENOTEXISTS(SELECT*FROMReportsWHERESno=Students.SnoANDCno=Courses.Cno));三、集合查询例3.49查询计算机科学系的学生或年龄不大于20岁的学生信息。SELECT*FROMStudentsWHERESdept='计算机'UNIONSELECT*FROMStudentsWHERESage<=20;例3.50查询数学系的学生且年龄不大于20岁的学生的交集,这实际上就是查询数学系中年龄不大于20岁的学生。SELECT*FROMStudentsWHERESdept='数学'ANDSage<=20;例3.51查询数学系的学生与年龄不大于20岁的学生的差集。本查询的等价说法是,查询数学系中年龄大于20岁的学生。SELECT*FROMStudentsWHERESdept='计算机'ANDSage>20;SQL的数据更新1插入数据例3.52设数据库中已有一个关系History_Student,其关系模式与Students完全一样,试将关系Students中的所有元组插入到关系History_Student中去,其SQL命令为:INSERTINTOHistory_StudentSELECT*FROMStudents;2修改数据例3.53将学号为“S03”的学生年龄改为22岁,即要修改满足条件的一个元组的属性值。UPDATEStudentsSETSage=22WHERESno=’S03’;例3.54将所有学生的年龄增加1岁。即要修改多个元组的值。UPDATEStudentsSETSage=1+Sage;例3.55将数学系所有学生的成绩置零。由于学生所在系的信息在Students表中,而学习成绩在Reports表中,因此,可以将SELECT子查询作为WHERE子句的条件表达式。故该更新要求的SQL命令为:UPDATEReportsSETGrade=0WHERE‘数学’=(SELECTSdeptFROMStudentsWHEREStudents.Sno=Reports.Sno);3删除数据例3.56删除学号为“S04”的学生选修的课号为“C02”的记录。DELETEFROMReportsWHERESno=’S04’ANDCno=’C02’;例3.57删除所有学生的选课记录。DELETEFROMReports;这条DELETE语句将删除Reports的所有元组,使Reports成为空表。例3.58删除数学系所有学生的选课记录。DELETEFROMReportsWHERE‘数学’=(SELECTSdeptFROMStudentsWHEREStudents.Sno=Reports.Sno);SQL视图一定义视图1建立视图例3.59建立数学系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有数学系的学生,视图的属性名为Sno,Sname,Sage,Sdept。CREATEVIEWC_StudentASSELECTSno,Sname,Sage,SdeptFROMStudentsWHERESdept=’数学’WITHCHECKOPTION例3.60建立学生的学号(Sno)、姓名(Sname)、选修课程名(Cname)及成绩(Grade)的视图。本视图由三个基本表的连接操作导出,其SQL语句如下:CREATEVIEWStudent_CRASSELECTStudents.Sno,Sname,Cname,GradeFROMStudents,Reports,CoursesWHEREStudents.Sno=Reports.SnoANDReports.Cno=Courses.Cno例3.61定义一个反映学生出生年份的视图。CREATEVIEWStudent_birth(Sno,Sname,Sbirth)ASSELECTSno,Sname,1996-SageFROMStudents2删除视图例3.62删除视图Student_CR。DROPVIEWStudent_CR;二查询视图例3.63在数学系的学生视图C_Student中找出年龄(Sage)小于20岁的学生姓名(Sname)和年龄(Sage)。SELECTSname,SageFROMC_StudentWHERESage<20;说明:本例转换后的查询语句为:SELECTSname,SageFROMStudentsWHERESdept=’数学’ANDSage<20;例3.64在Student_CR视图中查询成绩在85分以上的学生学号(Sno)、姓名(Sname)和课程名称(Cname)。SELECTSno,Sname,CnameFROMStudent_CRWHEREGrade>85;三更新视图例3.65将数学系学生视图C_Student中学号为S05的学生姓名改为“黄海”。UPDATEC_StudentSETSname='黄海'WHERESno='S05';说明:DBMS自动转换为对基本表的更新语句如下:UPDATEStudentsSETSname='黄海'WHERESno='S05'ANDSdept='数学';例3.66向数学系学生视图C_Student中插入一个新的学生记录,其中学号为“S09”,姓名为“王海”,年龄为20岁。INSERTINTOC_StudentVALUES('S09','王海',20,’数学’);例3.67删除数学系学生视图C_Student中学号为“S09”的记录。DELETEFROMC_StudentWHERESno=’S09参考实习在PowerBuilder中的嵌入式SQL语句说明:本节的例子必须在PowerBuilder环境中才能运行,不懂PowerBuilder的初学者没有必要对其做上机实习。以下这些材料对制作多媒体教案有用。1检索单行数据的SELECT语句例3.76查询学号为“S01”的学生选修课程号“C01”课程的考试成绩。StringXno,Kno//PowerBuilder声明两个字符串变量,分别存放学号和课程号IntCgrage//PowerBuilder声明一个整型变量,用于存放学习成绩SELECTSno,Cno,Grade//本行开始的4行为一条完整的嵌入式SQL语句INTO:Xno,:Kno,:Cgrage//SQL中引用PowerBuilder的主变量前要加冒号FROMReportsWHERESno=’S01’ANDCno=’C01’;//PowerBuilder使用SQL时以分号结束以上程序段将SELECT取得的一条记录赋值给主变量Xno,Kno和Cgrage。2INSERT语句例3.77向表Reports中添加一条记录(’S12’,’C05’,87)。INSERTINTOReports(Sno,Cno,Grade)VALUES(’S12’,’C05’,87);或者StringXno,Kno//PowerBuilder声明两个字符串变量,分别存放学号和课程号IntCgrage//PowerBuilder声明一个整型变量,用于存放学习成绩Xno=’S12’//将欲插入的值赋给主变量Xno,Kno和CgrageKno=’C05’Cgrage=87INSERTINTOReports(Sno,Cno,Grade)//将主变量Xno,Kno和Cgrage的值插入表中VALUES(:Xno,:Kno,:Cgrage);3UPDATE语句例3.78将表“Reports”中所有成绩低于90的学生加5分。UPDATEReportsSETGrade=Grade+5WHEREGrade<90;4DELETE语句例3.79删除“Reports”表中所有选“C03”课程的学生信息。DELETEFROMReportsWHERECno=’C03’;5游标的使用例3.80查询关系Reports中的Grade信息,如果Grade的值小于85,则将其在原来基础上增加5,否则将该记录删除。这个更新操作可以通过使用游标的以下程序实现。IntCgrade//声明一个整型变量,作为SQL的主变量DECLAREReport_CurCURSORFOR//声明游标Report_CurSELECTGrade//并将查询结果数据集相联系FROMReports;OPENReport_Cur;//打开游标Report_CurFETCHReport_CurINTO:Cgrade;//读取游标的第一条记录,并存入主变量DOWHILESQLCA.SQLCode=0//循环结构开始,若读取成功则进入循环IFCgrade<85THEN//若读出的该记录成绩(Cgrade)低于85分UPDATEReports//则该记录的成绩(Grade)增加85分SETGrade=Grade+5WHERECURRENTOFReport_Cur;//这是CURRENT型UPDATE语句ELSE//否则删除该记录DELETEFROMReportsWHERECURRENTOFReport_Cur;ENDIF FETCHReport_CurINTO:Cgrade;//读取游标的下一条记录LOOP//循环结构结束符CLOSEReport_Cur;//关闭游标Report_Cur二在Delphi中使用SQL语句说明:本节的例子必须在Delphi环境中才能运行,不懂Delphi的初学者没有必要对其做上机实习,第7章有一个完整的应用系统例子供上机实习之用。以下这些材料对制作多媒体教案有用。本节后面每个例子都需要的=1\*GB2⑴=2\*GB2⑵步语句定义如下,在后面的例子中不再给出。MyQuery:=TQuery.Create(Application);//声明并创建一个TQuery类的控件MyQueryMyQuery.DatabaseName:='student';//MyQuery控件要访问的数据库别名为student1检索单行数据的SELECT语句例3.81查询学号为“S01”的学生选修课程号“C01”课程的考试成绩,请与例3.76比较。VarXno:AnsiString;Kno:AnsiString;//Delphi声明两个字符串变量,分别存放学号和课程号Cgrage:Integer
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年视觉传播设计全攻略试题及答案
- 复习多媒体设计师必知知识试题及答案
- 食品安全员复习提纲即查即用试题及答案
- 记者证考试信息来源鉴别试题及答案
- 系统分析师考试技术趋势研究试题及答案
- 汉语言文学学术交流的重要性试题及答案
- 客户洞察分析能力试题及答案
- 应用案例分享:咖啡师试题与答案
- 定期评审与战略调整分析试题及答案
- 视觉传播设计对社会变革的影响试题及答案
- 2025-2030羊毛制品行业市场调研分析及发展趋势与投资前景研究报告
- 新零售背景下的电子商务尝试试题及答案
- 《商务沟通与谈判》课件 第二章 商务沟通原理
- 烫伤不良事件警示教育
- 2025年腾讯云从业者基础认证题库
- 面试官考试题及答案
- 高中主题班会 预防艾滋珍爱健康-中小学生防艾滋病知识宣传主题班会课-高中主题班会课件
- TSGD7002-2023-压力管道元件型式试验规则
- DZ∕T 0222-2006 地质灾害防治工程监理规范(正式版)
- 四川省中小流域暴雨洪水计算表格(尾矿库洪水计算)
- 管理制度隐蔽工程验收管理办法
评论
0/150
提交评论