东北大学数据库实验报告Word文件下载.docx
《东北大学数据库实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《东北大学数据库实验报告Word文件下载.docx(46页珍藏版)》请在冰豆网上搜索。
(Cnochar(4),
Cnamechar(40),
Ccreditint,
Ctimeint,
Cpnochar(4),
primarykey(cno),
Foreignkey(Cpno)referencesCourses(Cno))
createtableSC
(Snochar(10),
Cnochar(4),
Gradeint,
primarykey(Sno,Cno),
foreignkey(Sno)referencesStudents(Sno),
foreignkey(Cno)referencesCourses(Cno))
insertintoStudentsvalues('
20133901'
'
陈一'
21,'
计算机'
)
20133902'
陈二'
22,'
电子'
20133903'
陈三'
23,'
通信'
20133904'
陈四'
20,'
自动化'
20133905'
陈五'
软件'
20133906'
陈六'
数学'
20133907'
陈七'
物联网'
20133908'
陈八'
生物'
20133909'
陈九'
20133910'
陈十'
机械'
insertintoCoursesvalues('
0001'
C语言'
4,60,null)
0002'
C++语言'
0003'
JAVA'
0004'
数据结构'
0005'
高数'
0006'
离散数学'
0007'
计算原理'
4,60,'
0008'
算法设计'
0009'
文本'
0010'
信息安全'
insertintoSCvalues('
2)
3)
4)
1)
3.插入相应的数据,试着插入重复的元组,结果如何?
插入相同数据
不能插入重复数据
4.在已建立的关系模式之上(已插入一些数据)建立主键约束,参照约束和用户定义的约束(要求学生年龄不小于14岁,不大于35岁),如果约束不能建立,请分析原因,修改后建立上述约束。
altertableStudentsaddcheck(Sage>
=14andSage<
=35)
altertableStudentsaddprimarykey(Sno)不能建立
5.如果约束建立后,请试着插入重复元组,结果如何?
试着插入重复元组,无法插入:
实验
(二):
赵一'
95133902'
赵二'
18,'
赵三'
赵四'
24,'
95133905'
赵五'
25,'
赵六'
26,'
赵七'
27,'
95133908'
赵八'
28,'
老九'
19,'
95133910'
老十'
17,'
95133941'
老一'
95133943'
老二'
15,'
0000'
C1'
C++'
离散'
数据库'
文本智能处理'
0011'
C2'
null'
70)
20133941'
82)
90)
95133901'
95133903'
95133843'
用SQL完成下列查询
1.求选修了课程的学生的学号,要求:
(1)不使用distinct语句,消除重复元组,写出其SQL语句
SelectSnofromSC
(2)使用distinct语句,消除重复元组,写出其SQL语句
selectdistinctSnofromSC
(3)如果该查询写成:
selectStudents.SnofromStudents,SCwhereStudents.Sno=SC.Sno
请问该查询结果和上面哪个结果是相同的?
和1相同
2.求开设的课程号、课程名、学时和学分,要求对查询结果的列重新命名。
selectCnoMyCno,CnameMyCname,CtimeMyCtime,CCreditMyCredictfromCourses
3.求计算机系和数学系的学生学号、姓名和年龄。
selectSno,Sname,SagefromStudentswhereSdept='
orSdept='
4.求不是数学系、计算机系的学生的情况,要求select后写*代替列出所有的列名。
select*fromStudentswhereStudents.Sdept!
='
andStudents.Sdept!
5.求全体学生的信息,要求按年龄升序排列。
select*fromStudentsorderbySageasc
6.求计算机系年龄在18~20岁之间的学生姓名和年龄
selectSname,SagefromStudentswhereSage>
=18andSage<
=20andSdept='
7.求姓名是以老开头的计算机系学生。
select*fromStudentswhereSnamelike'
老%'
andSdept='
8.求选修了C1课程的学生的学号、姓名、成绩。
selectStudents.Sno,Students.Sname,SC.GradefromStudents,SC,CourseswhereSC.Sno=Students.SnoandSC.Cno=Courses.CnoandCourses.Cname='
9.求学号为95开头的学生的学号和所选修的课程的学分。
selectStudents.Sno,Courses.Cname,Courses.CCreditfromStudents,SC,CourseswhereStudents.Snolike'
95%'
andStudents.Sno=SC.SnoandSC.Cno=Courses.Cno
10.求选修C1课程且成绩为80分以上的学生的学号、姓名和成绩。
selectStudents.Sno,Students.Sname,SC.GradefromStudents,SC,CourseswhereStudents.Sno=SC.SnoandSC.Cno=Courses.CnoandCourses.Cname='
andSC.Grade>
80
11.求计算机系每个学生的姓名,选修的课程名和成绩。
selectStudents.Sname,Courses.Cname,SC.GradefromStudents,SC,CourseswhereStudents.Sdept='
12.求每个学生的学号及平均成绩。
selectSno,AVG(Grade)AvgGradefromSCgroupbySno
13.求男学生每一年龄组中超过1人的年龄组及人数。
selectSage,Count(Sno)countSnofromStudentsgroupbySagehavingCount(Sno)>
1
14.求每一门课程的间接先行课号。
selectC1.Cno,C2.CpnofromCoursesC1,CoursesC2whereC1.Cpno=C2.Cno
15.求选修了全部课程的学生的学号。
selectSnofromStudentswherenotexists(select*fromCourseswherenotexists(select*fromSCwhereSno=Students.SnoandCno=Courses.Cno));
实验(三):
数据库的安全性和完整性
了解和使用安全子系统;
进行完整性定义和检查。
一熟练掌握SQL(续)
1.修改表Students,在其中加入一个字段性别sexchar
(1)
altertableStudentsaddsexchar
(1);
2.创建索引:
在Students表的Sno上创建唯一聚簇索引,在SC表的(Sno,Cno)上创建唯一索引.查询Students表的内容,记录的顺序有变化吗?
查询SC表的内容,记录的顺序有变化吗?
CreateuniqueclusteredindexStudent_snoonStudents(Sno);
CreateuniqueindexSno_cnoonSC(Sno,Cno);
Students表的内容,记录的顺序有变化
SC表的内容,记录的顺序没有变化
3.创建视图
▪创建计算机系学生视图CS_Students,其中包括学号、年龄和性别。
带withcheckopition子句
不带withcheckopition子句
时各插入一计算机系学生记录,通过视图查询插入的记录,结果如何?
通过表Students查询插入的记录,查看所在系字段上的值?
createviewCS_students1asselectSno,Sage,sexfromStudentswhereSdept='
CS'
withcheckoption
INSERTINTOCS_students1
VALUES('
20133333'
m'
);
createviewCS_students2asselectSno,Sage,sexfromStudentswhereSdept='
INSERTINTOCS_students2
20138888'
▪创建一视图,表示学生的平均成绩,其中包括Sno,avgGrade。
通过该视图插入一学生姓名和平均成绩,结果如何?
通过该视图查找平均成绩在90分以上的学生的学号和平均成绩,结果又如何?
createviewStuavggrade(sno,avggrade)
asselectSno,avg(Grade)fromSCgroupbySC.sno
InsertintoStuavggrade
values('
88)
selectsno,avggrade
fromStuavggrade
whereavggrade>
=90
二了解和使用安全子系统
1、将sqlserver的一合法帐户(user60)加入到你的数据库当中来,并给其授权,
SP_grantdbaccess'
user63'
;
使之:
具有创建表的权限
grantCreatetabletouser63;
具有对Students表查询的权限
grantselectonStudentstouser63;
具有对Studetns表的年龄字段修改的权限
grantupdate(Sage)onStudentstouser63;
2、用user60/user60进入系统,完成权限验证:
在Students表上,实现select*fromStudents
select*fromdb63.user63.STUDENT
在course表上,实现select*fromcourse
select*fromdb63.user63.Course
updateStudetnssetSage=Sage+1
updatedb63.user63.STUDENTsetSage=Sage+1
updateStudentssetSdept=’CS’
updatedb63.user63.STUDENTsetSdept='
3、你是数据库的dbo,你来查看dept表,结果如何?
使用setuser命令使自己成为user60后,查看dept表,结果如何?
三完整性定义和检查
1、创建表Studetns,要求学生的年龄在16和25岁之间,并且所在系的缺省取值为‘CS’
CREATETABLEStudents
(SnoCHAR(9)notnull,
SnameCHAR(20),
Sdeptchar(20)default'
Sageintcheck(Sag