《《数据库原理》课件上机实验点评及参考答案2017.docx》由会员分享,可在线阅读,更多相关《《数据库原理》课件上机实验点评及参考答案2017.docx(19页珍藏版)》请在优知文库上搜索。
1、上机实验三一基本表的建立和修改三、实习内容,1 .启动MSSQ1.SerVer服务,打开ErnerPriSeManagerQueryAna1.yzer-,2 .f.QueryArui1.yzer中用CREATETAB1.E命令在实验二创建的GrtidoManager数据摩中定义基本表:学生表(Student)课程表(Course),利用EnterpriseMiIndger的图形化功能建立班级表(C1.iISS)以及成绩表(GnIdO).酎心往下!哦,有点“清fcreatetab1.eStudent(Snochar(7)primarykey.SnameVarChar(20)notnu1.1.,S
2、sexchar(2)notnu1.1.,SageSma1.1.int,C1.nochar(5notnu1.1.);createtab1.eC1.ass(C1.noCharPrimarVkey.Specia1.ityvarchar(20)notnu1.1.,Inyearchar(4)notnu1.1.zNumberinteger,Monitorchar(7);createtab1.eCourse(Cnochar(1.)primarykey,CnameVarChar(20)notnu1.1.,CreditSma1.1.1.nt);createtab1.eGrade(Snochar7referenc
3、esStUdenUSno),Cnochar(1.)referencescourse(cno),Gmarknumeric,Primarykey(sno,cno);四、骨对以上四个表,用SQI语言完成以下各项操作,给学生表增加一属性NatiOn(民族),数据类型为Varehar(20:IM除学生表中新增的属性Nation:向成绩表中插入记录(-200W1.(F,-3*80);修改学号为“20011Hr的学生的成绩为70分;删除学号为00II1.(T的学生的成绩记录:为学生表创建一个名为IX-C1.aSS的索引.A1.TERTAB1.EStudentADDNationvarchar(20);2.A1
4、.TERTAB1.EStudentDROPCO1.UMNNation;3.Insertintogradesno,cno,gmark)va1.ues(,20011103r.80点评:该语句没仃语法格误.但好多同学在执行时出现了问虺.是对的,但同学们要知道为什么会出现这个问题?请仔细乔卜.前面的创建表的语句:UPDATEGradeSETGmark=70WHERESno=,2001110,;5.DE1.ETEFROMGradeWHERESno=,2001110,;6.CREATEINDEXIX_C1.assONStudent1.CInoA$c);7.DROPINDEXStudent.1.X_C1.a
5、ss;五、思考三s在定义基本表语句时,NOTW1.1.参数的使用有何作用?答:NotNUu参数,可以保证在插入数据时.该属性列的取值不为空,上机实验四一SE1.ECT语句的使用(一)三、实习内容;完成以下各项操作的SQ1.语句:找出所有被学生选修了的课程号:se1.ectdistinctcofromgrade;该语句实现的路径应该是Grade衣,COUrSe我中可能有某门课,个学生都没有选他的.所以不能是S询Course的Cno.找出01311班女学生的个人信息:se1.ect*fromstudentwhereSSeX=女andc1.no=01311,;找出01311班、01312班的学生姓名
6、、性别、出生年份:se1.ectSname,Ssex,2016-Sageasbirthfromstudentwherec1.no=01311orc1.no=O1312,;OR;se1.ectSname,Ssex,2016Sageasbirthfromstudentwherec1.noin(01311,01312);OR:(在T-SQ1.中,超大纲了)Se1.ectsnae,sex,year(ge1.dateO)-SageFromStUdenttherec1.noinC013H,01312,):找出所有姓李的学生的个人信息;se1.ectfromstudentv/hereSname1.ike李;
7、找出学生李勇所在班级的学生人数:Se1.ectcount()fromstudentWherec1.noin(Se1.ectc1.nofromstudentWhereSname=李勇);Or:Se1.ectnumberfromc1.assBhercc1.noin(Se1.ectc1.nofrostudentWhereSna1.nC=李勇);Or:Se1.ectnumberfronc1.ass,studentBhereSnatte二李勇andc1.ass,c1.nostudent.c1.no:找IH课程名为操作系统的平均成锁、果高分、最低分;Se1.ectavg(gmark),Max(gmark)
8、,Min(gmark)Fromgrade,courseWhereCninnO二操作系统o-couo;Or:Se1.ectavR(11ark),Max(mark),Min(gaark)FromgradeWherecno=(Se1.ectcnofroncoursewhereCname=操作系统;找出选修了课程的学生人数:se1.ectcount(distinctSno)fromgrade;找出选修了课程操作系统的学生人数.Se1.ectcount(sno)FromgradeWherecno=(Se1.ectcnofromcourseWhereCnaBe=操作系统);Or:Se1.ectcount(
9、sno)Fromgfade.courseWhereRo=oandCnamC=操作系统;9)找出2000级计免机软件班的成绩为空的学生姓名。se1.ectSnamefromStudentwhereC1.noinIrhCreSPeCiaIity=计算机软件andInyear=2000)andSnoin(se1.ectSnofronGradewheregmarkisnu1.1.):四、思考题:什么倘况卜需要使用关系的别名?别名的作用范围是什么?答:股几种两种怙况下使用别名:1.关系名太长,为了简化:2.为了喊自身连接杳询.3.在同一个SQ1.语句中,为了对某个表进行2次扫描.别名的作用范用是当前该S
10、Q1.语句国开当前SQ1.谙句,别名就不在存在.上机实验五一一SE1.ECT语句的使用(二)三、实习内容:完成以下各项振作的W1.诏句:找出与李勇在同一个班级的学生信息:找出所有与李勇有相同选修课的学生信息:找出年龄介丁学生李勇和25岁之间的学生信总:(已知李勇年龄小于25岁)找出选修了课程操作系统的学生学号和姓名找出没有选修1号课程的学生姓名找出选修了全部课程的学生姓名:找出与李勇在同一个班级的学生信息:Se1.ectfromstudentWherec1.no=(Se1.ectc1.nofro三stkntwhereSname=李勇);Or:本物还可以用(i身连接进行ft.找出所有与学生李勇有
11、相同选修课程的学生信息se1.ectfromStudentwhereSnoin(se1.ectSnofromGradehereCnoin(se1.ectCnofronGradewhereSnoin(se1.ectSnofromStudentwhereSna三e=李勇)andSname李勇;找HI年龄介于学生李勇和25岁之间的学生信息;Se1.ect*fromstudentWheresagebetween(Se1.ectsagefromstudentBhereSnamO=李安)And25;找出选修了课程操作系统的学生学号和姓名;Se1.ectsno,snamefro三studentWheresn
12、oin(Se1.ectsnofrongradeWherecno=Se1.ectcnofroncourseBherecn=1);找出选修了全部课程的学生姓名(提示:可找出这样的学生,没有一门课程是他不选修的。)卜面这个编程的思路有间踽,是错误的哦:SE1.ECTSnameFROMStudentWHERI:SnoIN(SE1.ECTSnoFROMGrade叫ERECnoI)ANDSnoINtSE1.ECTSnoEROMGrade!HERECno=2)ANDSnoIN(SE1.ECTSnoFROMGradeIiHERECnO=3)ANDSnoIN(SE1,RCTSnoFROMGradeHHERECn
13、o=I)NDSnoIN(SE1.ECTSnoFROMGradeWiERECno=5)ANDSnoINSE1.ECTSnoFROMGradeWHERECM=6)ANDSnoINfSE1.ECTSno1.ROMGradeBHERECno=7)解一:Se1.ectSnan1.efromstudentBherenotexists(Se1.ect*fromcoursewherenotexists(Se1.ect*fromgradeWheresno=student.snoandcno=o);解二:Se1.ectsnamefronstudentBheresnoin(Se1.ectsnofrongradeGroupbysnoHavingcount()=Se1.ectcount()fromcourse);OR:Se1.ectsnamefromstudentBhere(Se1.ectcount(cno)fro三gradeGroupbysno)=(Se1.cctcount()fromcourse);解法三:Se1.ectSnaaeFromStudentWHEREnotexists(Se1.ectCnoFronCourseexceptSe1.ectC