数据库实验报告Word下载.docx
- 文档编号:4971487
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:18
- 大小:278.76KB
数据库实验报告Word下载.docx
《数据库实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《数据库实验报告Word下载.docx(18页珍藏版)》请在冰点文库上搜索。
SageSMALLINT,
SdeptCHAR(20)
);
CREATETABLECourse
(CnoCHAR(4)PRIMARYKEY,
CnameCHAR(40),
CpnoCHAR(4),
CcreditSMALLINT,
FOREIGNKEY(Cpno)REFERENCESCourse(Cno)
CREATETABLESC
(SnoCHAR(9),
CnoCHAR(4),
GradeSMALLINT,
PRIMARYKEY(Sno,Cno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
FOREIGNKEY(Cno)REFERENCESCourse(Cno)
);
4在已建立的关系模式之上(已插入一些数据)建立主键约束,参照约束和用户定义的约束(要求学生年龄不小于14岁,不大于35岁),如果约束不能建立,请分析原因,修改后建立上述约束。
不能建立主键约束,主键唯一,Student已经存在主键;
ALTERTABLEStudent
ADDCHECK(Sage>
=14ANDSage<
=35);
5、如果约束建立后,请试着插入重复元组,结果如何?
(SnoCHAR(9)PRIMARYKEY,
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
FOREIGNKEY(Cno)REFERENCESCourse(Cno)
DROPconstraintPRIMARYKEY(Sno);
ADDPRIMARYKEY(Sname);
三、用SQL完成下列查询
求选修了课程的学生的学号,要求:
(1)不用distinct消除重复元组,写出其SQL语句
selectStudent.SnofromStudent,SCwhereStudent.Sno!
=SC.Sno
(2)用distinct消除重复元组,写出其SQL语句
SELECTSno
FROMSC;
(3)如果该查询写成:
selectStudents.SnofromStudents,SCwhereStudents.Sno=SC.Sno
请问该查询结果和上面哪个结果是相同的?
2、求开设的课程号、课程名、学时和学分,要求对查询结果的列重新命名
selectCourse.Cno,Cname,Cpno,CcreditfromCourse
3、求计算机系和数学系的学生学号、姓名和年龄
SelectSno,Sname,SagefromStudentwhereSdeptin('
CS'
'
MA'
4、求不是数学系、计算机系的学生的情况,要求select后写*代替列出所有的列名
select*fromStudentwhereStudent.Sdept!
='
andStudent.Sdept!
5、求全体学生的信息,要求按年龄升序排列
select*fromStudentselect*fromStudentwhereSdept='
IS'
andSnamelike'
马%'
;
orderbySage;
6、求计算机系年龄在20~23岁之间的学生姓名和年龄
selectSname,SagefromStudentwhereSage>
=20andSage<
=23andSdept='
7、求姓名时以马开头的IS系学生
select*fromStudentwhereSdept='
8、求选修了2课程的学生的学号、姓名、成绩
selectstudent.Sno,student.Sname,SC.GradefromStudent,SC
wherestudent.Sno=SC.SnoandSC.Cno=2
9、求学号为200827开头的学生的学号和所选修的课程的学分
selectstudent.Sno,SC.GradefromStudent,SC
wherestudent.Sno=SC.SnoandSC.Snolike'
200827%'
10、求选修数学课程且成绩为80分以上的学生的学号、姓名和成绩
selectStudent.Sno,Sname,SC.GradefromStudent,SC,Course
whereStudent.Sno=SC.SnoandSC.Cno=Course.CnoandCourse.Cname='
数学'
andSC.Grade>
80
11、求计算机系每个学生的姓名,选修的课程名和成绩
Selectstudent.Sname,SC.Grade,Course.Cname
FROMSC,Course,student
WhereStudent.Sdept='
andStudent.Sno=SC.SnoandSC.Cno=Course.Cno
12、求每个学生的学号及平均成绩
SelectSno,AVG(Grade)
FromSC
GroupbySno
13、求男学生每一年龄组中超过50人的年龄组及人数
selectSage,count(*)fromstudentwhereStudent.Ssex='
男'
groupbySagehavingcount(*)>
=1;
14、求每一门课程的间接先行课号
15、求选修了全部课程的学生的学号
SelectSname
FromStudent
Wherenot
实验
(二):
数据库的安全性和完整性
了解和使用安全子系统;
进行完整性定义和检查。
一熟练掌握SQL(续)
1.修改表St`udents,在其中加入一个字段性别sexchar
(1)
2.创建索引:
在Students表的Sno上创建唯一聚簇索引,在SC表的(Sno,Cno)上创建唯一索引.查询Students表的内容,记录的顺序有变化吗?
查询SC表的内容,记录的顺序有变化吗?
createuniqueclusteredindexStusnoonstudent(sno);
createuniqueindexSCsnocnoonSC(sno,cno);
3.创建视图
▪创建计算机系学生视图CS_Students,其中包括学号、年龄和性别。
带withcheckopition子句
不带withcheckopition子句
时各插入一计算机系学生记录,通过视图查询插入的记录,结果如何?
通过表Students查询插入的记录,查看所在系字段上的值?
createviewCS_Students1
as
selectsno,sage,ssex
fromstudent
wheresdept=’CS’
withcheckoption
insert
intoCS_Students
values('
20082909'
25,'
f'
)
结果:
插入失败。
不带withcheckopition子句:
createviewCS_Students
通过视图查询插入的记录:
插入成功。
通过表Students查询插入的记录,查看所在系字段上的值为NULL。
▪创建一视图,表示学生的平均成绩,其中包括Sno,avgGrade。
通过该视图插入一学生姓名和平均成绩,结果如何?
通过该视图查找平均成绩在90分以上的学生的学号和平均成绩,结果又如何?
▪createviewStuavggrade(sno,avggrade)
▪as
▪selectsno,avg(Grade)
▪fromSC
▪groupbySC.sno
插入
intoStuavggrade
values('
20082708'
87)
视图或函数'
Stuavggrade'
不可更新,因为它包含聚合。
查找
selectsno,avggrade
fromStuavggrade
whereavggrade>
=90
二了解和使用安全子系统
1、将sqlserver的一合法帐户(user60)加入到你的数据库当中来,并给其授权,使之:
具有创建表的权限
具有对Students表查询的权限
具有对Studetns表的年龄字段修改的权限
授权:
Sp_grantdbaccess'
user60’
具有创建表的权限:
grantcreatetabletouser60
具有对Students表查询的权限:
grantselectonStudentstouser60
具有对Studetns表的年龄字段修改的权限:
grantupdate(sage)onstudenttouser60
2、用user60/user60进入系统,完成权限验证:
创建表dept(sd,mn,addr)
创建视图s_view(Sno,Sage)
在Students表上,实现select*fromStudents
select*fromdb60.er60.Student
在course表上,实现select*fromcourse
select*fromdb60.er60.course
updateStudetnssetSage=Sage+1
updatedb60.user60.student.setSage=Sage+1
updateStudentssetSdept=’CS’
updatedb59.user59.StudentssetSdept=’CS’
3、你是数据库的dbo,你来查看dept表,结果如何?
使用setuser命令使自己成为user60后,查看dept表,结果如何?
前者可以查看;
后者不可以查看,没有user60的查看权限。
三完整性定义和检查
1、创建表Studetns,要求学生的年龄在16和25岁之间,并且所在系的缺省取值为‘CS’
在Studetns表上插入一学生记录(‘9921’,‘cccc’,’MA’,23,’f’)
在Studetns表上插入一学生记录(‘9922’,‘ddd’,’MA’,27,’m’)
在Studetns表上插入一学生记录(‘9923’,‘eeeee’,21,’m’)
在Studetns表上插入一学生记录(‘9922’,‘ddd’,’MA’,23,’m’)
createtableStudent
(SnoCHAR(9)PRIMARYKEY,
SageSMALLINTcheck(Sage>
=16andSage<
=25),
SdeptCHAR(20)default'
intoStudent(Sno,Sname,Ssex,Sage,Sdept)
values('
9921'
cccc'
23'
9922'
ddd'
m'
27'
9923'
eeee'
21'
9924'
ddf'
2、创建表course,要求课号作为主键
在course表上插入一课程记录(’c9’,40,’cname1’,1)
在course表上插入一课程记录(’c9’,40,’cname2’,1)
在course表上插入一课程记录(null,25,’canme3’,2)
结果如何?
createtablecourse
(cnochar(10)primarykey,
ctimechar(10),
cnamechar(20),
cscorechar(10)
insertintocourse(cno,ctime,cname,cscore)
c9'
40,'
cname1'
1)
cname2'
null'
25,'
cname3'
2)
3、修改表Studetns,指定学号为主键,然后
插入一记录(’9908’,’shang’,’CI’,20)
插入一记录(’’,’liang’,’CS’,18)
插入一记录(’’,’an’,’CS’,19)
4、创建sc表,要求表sc中的学号参照表Studetns中的学号,sc中的课号参照course中的课号。
参照约束创建完成后,向这三个表插入数据。
先在sc表插入一个选课记录,看看有什么情况发生?
先删除sc中的某个记录,看看有什么情况发生?
将Studetns表中的学号9906改为9907,看看有什么情况发生?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 报告