数据库系统原理实验指导书范文Word文件下载.docx
《数据库系统原理实验指导书范文Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据库系统原理实验指导书范文Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
![数据库系统原理实验指导书范文Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-11/28/27d4e958-d2f6-48cc-9021-8e1d9e801001/27d4e958-d2f6-48cc-9021-8e1d9e8010011.gif)
4.了解RDBMS的管理和使用。
例如SQLSERVERManagementStudio是SQLSERVER2005种最重要的管理工具,它融合了SQLSERVER2000的查询分析器和企业管理器、OLAP分析器等多种工具的功能,为管理人员提供了一个简单的实用工具,使用这个工具既可以用图形化的方法,也可以通过编写SQL语句来实现数据库的操作。
5.初步了解RDBMS的安全性,这里主要是服务器用户的登录和服务器预定义角色。
可以尝试建立一个新的登录名,赋予其数据库管理员的角色,今后的实验可以用该登录名来创建数据库用户。
实验二交互式SQL(4小时)
熟悉通过SQL对数据库进行操作。
二、实验工具
利用实验一中安装的RDBMS及其交互查询工具来操作SQL语言。
1.在RDBMS中建立一个学生-课程数据库,进行实验所要求的各种操作,所有的SQL操作均在此建立的新库里进行。
2.根据以下要求认真进行实验,记录所有的实验用例及执行结果。
数据定义:
基本表的创建、修改及删除;
索引的创建和删除。
数据操作:
完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询);
完成各类更新操作(插入数据,修改数据,删除数据)。
视图的操作:
视图的定义(创建和删除),查询,更新(注意更新的条件)。
特别说明:
实验中注意特定数据库系统(如SQLSERVER)的SQL语句格式与SQL-3标准的区别。
参考实验用例:
(一)数据定义:
一.基本表的操作
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表中插入下列数据:
,李勇,男,20,CS
,刘晨,女,19,CS
,王敏。
女,18,MA
,张立,男,19,IS
insertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('
'
'
李勇'
男'
20,'
CS'
);
刘晨'
女'
19,'
王敏'
18,'
MA'
张立'
IS'
)
2)在Course表中插入以下数据:
1,数据库,5,4
2,数学,null,2
6,数据处理,null,2
4,操作系统,6,3
7,PASCAL语言,6,4
5,数据结构,7,4
3,信息系统,1,4
insertintocourse(Cno,Cname,Cpno,Ccredit)values('
1'
数据库'
5'
4);
insertintocourse(Cno,Cname,Ccredit)values('
2'
数学'
2);
6'
数据处理'
4'
操作系统'
3);
7'
PASCAL语言'
数据结构'
3'
信息系统'
3)在SC表中插入以下数据:
1,92
2,85
3,88
2,90
3,80
insertintosc(Sno,Cno,Grade)values('
92);
85;
88);
90);
80);
4)将一个新学生元祖(学号:
;
姓名:
陈冬;
性别:
男;
所在系:
IS;
年龄:
18岁)插入到Student表中。
insertintostudent(Sno,Sname,Ssex,Sdept,Sage)values('
陈冬'
18);
5)将学生张成民的信息插入到Student表中。
insertintostudentvalues('
张成民'
6)插入一条选课记录:
(‘’,‘1’)。
insertintosc(Sno,Cno)values('
7)对每一个系,求学生的平均年龄,并把结果存入数据库。
createtableDept_age(Sdeptchar(15),
Avg_agesmallint);
insertintoDept_age(Sdept,Avg_age)selectSdept,avg(Sage)fromstudentgroupbySdept;
2.修改数据
1)将学生的年龄改为22岁。
updatestudentsetSage=22whereSno='
;
2)将所有学生的年龄增加一岁。
updatestudentsetSage=Sage+1;
3)将计算机科学系全体学生的成绩置零。
updatescsetGrade=0where'
=(selectSdeptfromstudentwherestudent.Sno=sc.Sno);
3.删除数据
1)删除学号为的学生记录。
deletefromstudentwhereSno='
2)删除所有学生的选课记录。
deletefromsc;
3)删除计算机科学系所有学生的选课记录。
deletefromscwhere'
=(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,'
BIRTH,2011-SageBIRTHDAY,lower(Sdept)DEPARTMENTfromstudent;
6)查询选修了课程的学生学号。
selectdistinctSnofromsc;
7)查询计算机科学系全体学生的名单。
selectSnamefromstudentwhereSdept='
8)查询所有年龄在20岁以下的学生姓名及其年龄。
selectSname,SagefromstudentwhereSage<
20;
9)查询考试成绩有不及格的学生的学号。
selectdistinctSnofromscwhereGrade<
60;
10)查询年龄在20-23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。
selectSname,Sdept,SagefromstudentwhereSagebetween20and23;
11)查询年龄不在20-23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。
selectSname,Sdept,SagefromstudentwhereSagenotbetween20and23;
12)查询计算机科学系(CS)、数学系(MA)、和信息系(IS)学生的姓名和性别。
selectSname,Sdept,SagefromstudentwhereSdeptin('
13)查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别。
selectSname,Sdept,SagefromstudentwhereSdeptnotin('
14)查询学号为的学生的详细情况。
select*fromstudentwhereSnolike'
15)查询所有姓刘的学生的姓名、学号和性别。
selectSname,Sno,SsexfromstudentwhereSnamelike'
刘%'
16)查询姓“欧阳”且全名为3个汉字的学生的姓名。
selectSnamefromstudentwhereSnamelike'
欧阳__'
17)查询名字中第2个字为“阳”字的学生的姓名和学号。
selectSname,SnofromstudentwhereSnamelike'
__阳%'
18)查询所有不姓刘的学生姓名。
selectSname,Sno,SsexfromstudentwhereSnamenotlike'
19)查询DB_Design课程的课程号和学分。
selectCno,CcreditfromcoursewhereCnamelike'
DB\_Design'
escape'
\'
20)查询以“DB_”开头,且倒数第3个字符为i的课程的详细情况。
select*fromcoursewhereCnamelike'
DB\_%i__'
21)某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
查询缺少成绩的学生的学号和相应的课程号。
selectSno,CnofromscwhereGradeisnull;
22)查询所有有成绩的学生学号和课程号。
selectSno,CnofromscwhereGradeisnotnull;
23)查询计算机科学系年龄在20岁以下的学生姓名。
andSage<
selectSname,SsexfromstudentwhereSdept='
orSdept='
24)查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列。
selectSno,GradefromscwhereCno='
orderbyGradedesc;
25)查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
select*fromstudentorderbySdept,Sagedesc;
26)查询学生总人数。
selectcount(*)fromstudent;
27)查询选修了课程的学生人数。
selectcount(distinctSno)fromsc;
28)计算1号课程的学生平均成绩。
selectavg(Grade)fromscwhereCno='
29)查询选修1号课程的学生最高分数。
selectmax(Grade)fromscwhereCno='
30)查询学生选修课程的总学分数。
selectsum(Ccredit)fromsc,coursewheresc.Cno=course.CnoandSno='
31)求各个课程号及相应的选课人数。
selectCno,count(Sno)fromscgroupbyCno;
32)查询选修了3门以上课程的学生学号。
selectSnofromscgroupbySnohavingcount(*)>
3;
2.连接查询
1)查询每个学生及其选修课程的情况。
selectstudent.*,sc.*fromstudent,scwherestudent.Sno=sc.Sno;
2)对上个题用自然连接完成。
selectstudent.Sno,Sname,Ssex,Sage,Sdept,Cno,Gradefromstudent,scwherestudent.Sno=sc.Sno;
3)查询每一门课的间接先修课(即先修课的先修课)。
selectfirst.Cno,second.Cpnofromcoursefirst,coursesecondwherefirst.Cpno=second.Cno;
4)查询每个学生及其选修课程的情况,用外连接来完成。
selectstudent.Sno,Sname,Ssex,Sage,Sdept,Cno,Gradefromstudentleftouterjoinscon(student.Sno=sc.Sno);
5)查询选修2号课程且成绩在90分以上的所有学生。
selectstudent.Sno,Snamefromstudent,scwherestudent.Sno=sc.Snoandsc.Cno='
andsc.Grade>
90;
6)查询每个学生的学号、姓名、选修的课程名及成绩。
selectstudent.Sno,Sname,Cname,Gradefromstudent,sc,coursewherestudent.Sno=sc.Snoandsc.Cno=course.Cno;
v
3.嵌套查询
1)查询与“刘晨”在同一个系学习的学生。
selectSno,Sname,SdeptfromstudentwhereSdeptin(selectSdeptfromstudentwhereSname='
selects1.Sno,s1.Sname,s1.Sdeptfromstudents1,students2wheres1.Sdept=s2.Sdeptands2.Sname='
2)查询选修了课程名为“信息系统”的学生学号和姓名。
selectSno,SnamefromstudentwhereSnoin(selectSnofromscwhereCnoin(selectCnofromcoursewhereCname='
));
3)找出每个学生超过他选修课程平均成绩的课程号。
selectSno,CnofromscxwhereGrade>
=(selectavg(Grade)fromscywherey.Sno=x.Sno);
4)查询其他系中比计算机科学系某一学生年龄小的学生姓名和年龄。
any(selectSagefromstudentwhereSdept='
)andSdept<
>
5)查询其他系中比计算机科学系所有学生年龄小的学生姓名和年龄。
all(selectSagefromstudentwhereSdept='
6)查询选修了1号课程的学生姓名。
selectSnamefromstudentwhereexists(select*fromscwhereSno=student.SnoandCno='
7)查询没有选修1号课程的学生姓名。
selectSnamefromstudentwherenotexists(select*fromscwhereSno=student.SnoandCno='
8)查询选修了全部课程的学生姓名。
selectSnamefromstudentwherenotexists(select*fromCoursewherenotexists(select*fromsc