本科实验报告课程名称:数据库系统概论实验项目:交互式SQL、数据完整性实验地点:逸夫楼402专业班级:学号:学生姓名:指导教师:2013年5月22日学院名称软件学院专业班级学号学生姓名实验日期2013.5.8成绩课程名称数据库系统概论实验题目实验二交互式SQL一、实验目的和要求1,掌握SELECT语句基本语法,加深对查询语句基本概念要求。2,掌握简单表的查询。3,掌握连接查询。4,熟悉通过SQL对数据库进行操作。5,掌握视图的操作。6,熟悉sqlserver的使用。二、主要设备PC,Windows操作系统,MicrosoftSQLServer三、实验内容和原理1.在RDBMS中建立一个学生-课程数据库,进行实验所要求的各种操作,所有的SQL操作均在此建立的新库里进行。2.根据以下要求认真进行实验,记录所有的实验用例及执行结果。数据定义:基本表的创建、修改及删除;索引的创建和删除。数据操作:完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询);完成各类更新操作(插入数据,修改数据,删除数据)。视图的操作:视图的定义(创建和删除),查询,更新(注意更新的条件)。四、操作方法与实验步骤首先创建数据库student,在此数据库中完成所有操作。Createdatabasestudent;(一)数据定义:一.基本表的操作1.建立基本表1)创建学生表Student,由以下属性组成:学号Sno(char型,长度为9,主码),姓名Sname(char型,长度为20,唯一),性别Ssex(char型,长度为2),年龄(smallint),所在系(char型,长度为20)。createtableStudent(Snochar(9)primarykey,Snamechar(20)unique,Ssexchar(2),Sagesmallint,Sdeptchar(20));2)创建课程表Course,由以下属性组成:课程号Cno(char型,主码,长度为4),课程名Cname(char型,长度为40),先行课Cpno(char型,长度为4,外码),学分Ccredit(smallint)。createtableCourse(Cnochar(4)primarykey,Cnamechar(40),Cpnochar(4),Ccreditsmallint);3)创建学生选课表SC,由以下属性组成:学号Sno(char型,长度为9),课程号Cno(char型,长度为4),成绩Grade(smallint),其中Sno和Cno构成主码。createtablesc(Snochar(9),Cnochar(4),Gradesmallint,primarykey(Sno,Cno),foreignkey(Sno)referencesstudent(Sno),foreignkey(Cno)referencescourse(Cno));2.修改基本表:1)向Student表增加“入学时间列”,其数据类型为日期型。altertableStudentaddS_entrancedate;2)将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。altertableStudentaltercolumnSageint;3)增加课程名称必须取唯一值的约束条件。altertableCourseaddunique(Cname);3.删除基本表:1)在所有的操作结束后删除Student表。droptableStudent;2)在所有的操作结束后删除Course表。droptableCourse;3)在所有的操作结束后删除SC表。droptableSC;二.索引操作1.建立索引1)为学生—课程数据库中的Student,Course,SC3个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。createuniqueindexStusnoonStudent(Sno);createuniqueindexCoucnoonCourse(Cno);createuniqueindexSCnoonSC(SnoASC,CnoDESC);2.删除索引1)删除Student表的Stusname索引。dropindexStusname;(二)数据操作一.更新操作1,插入数据1)在Student表中插入下列数据:200215121,李勇,男,20,CS200215122,刘晨,女,19,CS200215123,王敏。女,18,MA200215125,张立,男,19,ISinsertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('200215121','李勇','男',20,'CS');insertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('200215122','刘晨','女',19,'CS');insertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('200215123','王敏','女',18,'MA');insertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('200215125','张立','男',19,'IS')2)在Course表中插入以下数据:1,数据库,5,42,数学,null,26,数据处理,null,24,操作系统,6,37,PASCAL语言,6,45,数据结构,7,41,数据库,5,43,信息系统,1,4insertintocourse(Cno,Cname,Cpno,Ccredit)values('1','数据库','5',4);insertintocourse(Cno,Cname,Ccredit)values('2','数学',2);insertintocourse(Cno,Cname,Ccredit)values('6','数据处理',2);insertintocourse(Cno,Cname,Cpno,Ccredit)values('4','操作系统','6',3);insertintocourse(Cno,Cname,Cpno,Ccredit)values('7','PASCAL语言','6',4);insertintocourse(Cno,Cname,Cpno,Ccredit)values('5','数据结构','7',4);insertintocourse(Cno,Cname,Cpno,Ccredit)values('1','数据库','5',4);insertintocourse(Cno,Cname,Cpno,Ccredit)values('3','信息系统','1',4);3)在SC表中插入以下数据:200215121,1,92200215121,2,85200215121,3,88200215122,2,90200215122,3,80insertintosc(Sno,Cno,Grade)values('200215121','1',92);insertintosc(Sno,Cno,Grade)values('200215121','2',85;insertintosc(Sno,Cno,Grade)values('200215121','3',88);insertintosc(Sno,Cno,Grade)values('200215122','2',90);insertintosc(Sno,Cno,Grade)values('200215122','3',80);4)将一个新学生元祖(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。insertintostudent(Sno,Sname,Ssex,Sdept,Sage)values('200215128','陈冬','男','IS',18);5)将学生张成民的信息插入到Student表中。insertintostudentvalues('200215126','张成民','男',18,'CS');6)插入一条选课记录:(‘200215128’,‘1’)。insertintosc(Sno,Cno)values('200215128','1');7)对每一个系,求学生的平均年龄,并把结果存入数据库。createtableDept_age(Sdeptchar(15),Avg_agesmallint);insertintoDept_age(Sdept,Avg_age)selectSdept,avg(Sage)fromstudentgroupbySdept;2.修改数据1)将学生200215121的年龄改为22岁。updatestudentsetSage=22whereSno='200215121';2)将所有学生的年龄增加一岁。updatestudentsetSage=Sage+1;3)将计算机科学系全体学生的成绩置零。updatescsetGrade=0where'CS'=(selectSdeptfromstudentwherestudent.Sno=sc.Sno);3.删除数据1)删除学号为200215128的学生记录。deletefromstudentwhereSno='200215128';2)删除所有学生的选课记录。deletefromsc;3)删除计算机科学系所有学生的选课记录。deletefromscwhere'CS'=(selectSdeptfromstudentwherestudent.Sno=SC.Sno);二.查询操作1.单表查询1)查询全体学生的学号与姓名。selectSno,Snamefromstudent;2)查询全体学生的姓名、学号、所在系。selectSname,Sno,Sdeptfromstudent;3)查询全体学生的详细记录。select*fromstudent;4)查询全体学生的姓名及其出生年份。selectSname,2011-Sagefromstudent;5)查询全体学生的姓名、出生年份和所在院系,要求用小写字母表示所有系名。selectSname,'YearofBirth:',2011-Sage,lower(Sdept)fromstudent;selectSnameNAME,'YearofBirth:'BIRTH,2011-SageBIRTHDAY,lower(Sdept)DEPARTMENTfromstudent;6)查询选修了课程的学生学号。selectdistinctSnofromsc;7)查询计算机科学系全体学生的名单。selectSnamefromstudentwhereSdept='CS';8)查询所有年龄在20岁以下的学生姓名及其年龄。selectSname,SagefromstudentwhereSage20;9)查询考试成绩有不及格的学生的学号。selectdistinctSnofromscwhereGrade60;10)查询年龄在20-23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。selectSname,Sdept,SagefromstudentwhereSagebetween20and23;11)查询年龄不在20-23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。selectSname,Sdept,SagefromstudentwhereSagenotbetween20and23;12)查询计算机科学系(CS)、数学系(MA)、和信息系(IS)学生的姓名和性别。selectSname,Sdept,SagefromstudentwhereSdeptin('CS','MA','IS');13)查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别。selectSname,Sdept,Sagefroms