数据库理论与技术实验报告2012-2013第二学期实验二:SQL的数据定义和更新指导教师:虞勤国实验时间:2013年4月1日实验地点:计算中心二楼班级:组长:组员:成绩:实验二:SQL的数据定义和更新实验目的熟练掌握建立数据库和表,向数据库输入数据、修改数据和删除数据的操作。实验内容建立数据库并设计各表,输入多条实际数据,并实现数据的增、删、改操作。实验步骤:创建用于学生管理数据库,数据库名为XSGL,包含学生的基本信息,课程信息和选课信息。数据库XSGL包含下列3个表:(l)student:学生基本信息。(2)course:课程信息表。(3)sc:学生选课表。各表的结构分别如表1、表2和表3所示。表1学生信息表:student列名数据类型长度是否允许为空值sno字符型10否sname字符型10否ssex字符型2否sage整数型是sdept字符型4否表2课程信息表:course列名数据类型长度是否允许为空值cno字符型3否cname字符型30否credit整数型是pcno字符型3是表3学生选课表:sc列名数据类型长度是否允许为空值sno字符型10否cno字符型30否grade整数型是一.数据库的建立:1.用可视化界面建立:(a)在SQLSERVER中用企业管理器-新建数据库;2.命令方式建立:(a)在SQLSERVER中,在查询分析器中使用T-SQL语句:CREATEDATABASEXSGLON(NAME='XSGL_DATA',FILENAME='c:\XSGL.MDF',SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=5%)LOGON(NAME='XSGL_Log',FILENAME='c:\XSGL_Log.ldf',SIZE=2MB,MAXSIZE=5MB,FILEGROWTH=1MB)二.表的建立:1.用可视化界面建立:在SQLSERVER中用企业管理器—数据库—XSCJ—表—右键—新建表;实验结果,如下所示:2.命令方式建立:在SQLSERVER中查询分析器的编辑窗口中用下列SQL语句:useXSGLCreatetablestudent(snoCHAR(5),snameCHAR(10),ssexCHAR(2),sageint,sdeptCHAR(4))goCreatetablecourse(cnoCHAR(2),cnameCHAR(30),creditINT,pcnoCHAR(2)NULL)goCreatetablesc(snoCHAR(5),cnoCHAR(2),gradeINTNULL)Go三.表数据的添加:1.用可视化方法:I:在SQLSERVER中用企业管理器—数据库—XSCJ—表-表名—右键-打开表-返回所有行;输入下列数据:snosnamessexsagesdept95001李勇男20CS95002刘晨女19IS95003王敏女18MA95004张立男19IS95005刘云女18CScnocnamecreditpcno1数据库452数学63信息系统314操作系统46snocnograde9500119295001285950013889500229095002380950032859500415895004285要求:(1)给出输入数据后的数据库表的窗口截图实验结果,如下所示:1)建立学生信息表:student的结果:2)建立课程信息表:course的结果:3)建立学生选课表:sc的结果:5数据结构476数据处理37PASCAL语言46(2)因为下面要用命令行方式插入同样数据,请在清空SQLSERVER查询分析器的编辑窗口中使用deletefrom命令先清空以上三表。实验结果,以清空学生信息表:student为例,如下所示:清空学生信息表:student的结果:2.在SQLSERVER查询分析器的编辑窗口中使用下列SQL语句插入数据:insertintostudent(sno,sname,ssex,sage,sdept)values('95001','李勇','男',20,'CS')insertintostudent(sno,sname,ssex,sage,sdept)values('95002','刘晨','女',19,'IS')insertintostudent(sno,sname,ssex,sage,sdept)values('95003','王敏','女',18,'MA')insertintostudent(sno,sname,ssex,sage,sdept)values('95004','张立','男',19,'IS')insertintostudent(sno,sname,ssex,sage,sdept)values('95005','刘云','女',18,'CS')goinsertintocourse(cno,cname,credit,pcno)values('1','数据库',4,'5')insertintocourse(cno,cname,credit,pcno)values('2','数学',6,null)insertintocourse(cno,cname,credit,pcno)values('3','信息系统',3,'1')insertintocourse(cno,cname,credit,pcno)values('4','操作系统',4,'6')insertintocourse(cno,cname,credit,pcno)values('5','数据结构',4,'7')insertintocourse(cno,cname,credit,pcno)values('6','数据处理',3,null)insertintocourse(cno,cname,credit,pcno)values('7','PASCAL语言',4,'6')goinsertintosc(sno,cno,grade)values('95001','1',92)insertintosc(sno,cno,grade)values('95001','2',85)insertintosc(sno,cno,grade)values('95001','3',88)insertintosc(sno,cno,grade)values('95002','2',90)insertintosc(sno,cno,grade)values('95002','3',80)insertintosc(sno,cno,grade)values('95003','2',85)insertintosc(sno,cno,grade)values('95004','1',58)insertintosc(sno,cno,grade)values('95004','2',85)Go要求:给出上述命令执行结果实验结果,如下所示:1)建立学生信息表:student的结果:2)建立课程信息表:course的结果:3)建立学生选课表:sc的结果:四.表数据的修改:1.用可视化方法:在SQLSERVER中用企业管理器—数据库—XSCJ—表-表名—右键-打开表-返回所有行;在表格中将相应的数据修改即可。实验结果,如下所示:将学号为95001学生的年龄增加一岁,结果如下:2.命令方法:将所有学生的年龄增加一岁:updatestudentsetsage=sage+1将4号课程的学分改为4:updatecoursesetcredit=4wherecno=4设置7号课程没有先行课:updatecoursesetpcno=nullwherecno=7将95001号学生的1号课程的成绩增加3分:updatescsetgrade=grade+3wheresno=’95001’andcno=’1’要求:显示修改结果实验结果,如下所示:1)将所有学生的年龄增加一岁:updatestudentsetsage=sage+1的结果:2)将4号课程的学分改为4:updatecoursesetcredit=4wherecno=4的结果:3)设置7号课程没有先行课:updatecoursesetpcno=nullwherecno=7的结果:4)将95001号学生的1号课程的成绩增加3分:updatescsetgrade=grade+3wheresno=’95001’andcno=’1’的结果:五.表数据的删除:1.用可视化方法:在SQLSERVER中用企业管理器—数据库—XSCJ—表-表名—右键-打开表-返回所有行;单击左边的行标记,选定某一行,或单击后拖动选择相邻的多行,再右击鼠标选择弹出式菜单中的删除。实验结果,如下所示:在course表中,将课号为1、2所在行删除,结果如下:2.命令方法:1)请自己设计几条针对所见三表的select查询命令,显示结果。设计了多表查询的同学可以给我看,根据设计情况决定是否加分。a.选出student中的sname、ssex,并且将sname改为姓名、ssex改为性别selectsnameAs姓名,ssexAs性别fromstudentwheresdept='CS'b.选出成绩大于等于90的课程名称selectcnamefromsc,coursewheresc.cno=course.cnoAndgrade=90c.选出成绩及格而且课程名为数学的学生学号、学生姓名、成绩,并且按照分数从高到底的顺序排列出来selectstudent.sno,sname,cname,gradefromsc,course,studentwheresc.cno=course.cnoAndsc.sno=student.snoAndgrade=60Andcname='数学'orderbygradedesc2)删除学号为95005的学生的记录:deletefromstudentwheresno=’95005’3)删除所有的课程记录:deletefromcourse4)删除成绩为不及格(少于60分)的学生的选课记录:deletefromscwheregrade60说明:虽然是分组实验,以组为单位交一份报告。但实验中间我要抽查,请诸位人人行动,放手一做。实验结果,如下所示:1)几条针对所见三表的select查询命令,显示的结果a.选出student中的sname、ssex,并且将sname改为姓名、ssex改为性别b.选出成绩大于等于90的课程名称c.选出成绩及格而且课程名为数学的学生学号、学生姓名、成绩,并且按照分数从高到底的顺序排列出来2)删除学号为95005的学生的记录:deletefromstudentwheresno=’95005’的结果:3)删除所有的课程记录:deletefromcourse的结果:4)删除成绩为不及格(少于60分)的学生的选课记录:deletefromscwheregrade60的结果:实验过程中出现的现象及处理1.用可视化方法:输入表内信息的过程中,要把正在输入信息的所在行的信息输入完整,才能进入下一行的输入。2.用命令方法:若消息出现(5行影响),则在执行命令时,该表的5行进行了修改。3.用命令方法:执行updatescsetgrade=grade+3wheresno=’95001’andcno=’1’语句时,出现‘’’附近有语法错误,应将’95001’andcno=’1’用英文输入的方式重新输入。这是应为该系统只能识别英文输入的单引号。4.用命令方法:在执行命令时,要注意当前数据库是否为XSGL数据库。若不是,会出现错误。5.用命令方法:在插入course表格数据时,出现语法错误和’creadit’无效,则将creadit改为credit,pcno的char[3]改为char[2]。实验总结通过本次实验,学会了用可视化界面和命令方式建立数据库、表,还有处理各种对数据的增、删、改操作。