数据库实验内容答案Word格式文档下载.docx
《数据库实验内容答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据库实验内容答案Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
4.删除数据库“SM”。
dropdatabasesm
实验二:
创建表
1.在数据库SM中创建学生表student,课程表course,选课表sc
student(sid,sno,clno,sname,ssex,sage,sbir)
说明:
sidintidentity(1,1)序号
sno为主关系键,为字符类型学号
clno字符类型,班级号
sname字符类型,并不为空
ssex字符类型,check的值的范围为男女
sbir日期类型出生日期
sageint;
usesm
createtablestudent
(sidintidentity(1,1),
snochar(10)constraintpk_stprimarykey,
clnochar(10),
snamevarchar(20)notnull,
ssexchar
(2)constraintck_ssexcheck(ssexin('
男'
'
女'
)),
sbirdatetime,
sageint
)
course(cno,cname,ccredits,ctno,cpno,ctime)
cno字符类型,主关系键
cname字符类型,唯一键
ccredits学分,精确数值型,精确长度为2,小数位为1
ctno,cpno字符类型
ctime整型
createtablecourse
(cnochar(4)constraintpk_cprimarykey,
cnamevarchar(20)constaintuk_cnameunique,
ccreditdecimal(2,1),
ctnochar
(2),
cpnochar(4),
ctimetinyint
sc(sno,cno,score)
sno+cno为主键,并且sno是student的外部键,cno是course的外部键。
score精确数值型,精确长度为4,小数位为1
createtablesc
(snochar(10)constraintfk_snoforeignkeyreferencesstudent(sno),
cnochar(4)constriantfk_cnoforeignkeyreferencescourse(cno),
scoredecimal(4,1),
constraintpk_scprimarykey(sno,cno)
2.使用ManagementStudio对数据库SM中的表插入数据
实验三:
表的维护
1.用sql语句修改表course的列属性,将cname的长度改为40,且不允许空
altertablecourse
dropconstraintuk_cname
altercolumncnamechar(40)notnull
2.用sql语句向表student中增加列email,且要求输入的电子邮件地址必须包括"
@"
altertablestudent
addemailvarchar(20)constraintck_emailcheck(emaillike'
%@%'
)
3.用sql语句删除表student中的列sbir
dropcolumnsbir
4.删除sname列上的约束。
altertablestudent
altercolumnsnamevarchar(20)null
5.删除表student
droptablestudent
实验四:
简单数据查询
在实验二的基础上,再在sm数据库中新建表teacher,包括如下数据项
teacher(tno,tname,age,sal,dno)
tno为教职工编号,tname姓名,age年龄,sal为月薪,dno为部门号
在student,course,sc,teacher四张表中进行下列查询
1,查询所有0002部门职工的信息;
select*fromteacherwheredno='
0002'
2,查询1984年和1985年出生的女生的信息;
select*fromstudentwhereyear(sbir)in(1984,1985)
andssex='
3,查询0001部门、0002部门或0003部门的职工信息;
select*fromteacherwherednoin('
0001'
0003'
)
4,查询学号为03004的同学正在学习的课程;
selectcnofromscwheresno='
03004'
5,查询不姓王或李的同学的信息。
select*fromstudentwheresnamelike'
[^王李]%'
6,查询有多少名学生的物理课成绩不及格;
selectcount(sno)
fromsc,course
whereo=oandcname='
物理'
andscore<
60
7,求女学生的学生总数;
fromstudent
wheressex='
8,求职工的最高工资、最低工资和平均工资;
selectmax(sal),min(sal),avg(sal)
fromteacher
9,查询职工的年薪,并按年薪的升序排列;
selecttname,sal*12年薪
fromteacherorderbysalasc
10,求每个班的学生数
student(sid,sno,clno,sname,ssex,sage,sbir)
groupbyclno
11,查询每个学生已获得的学分(成绩及格即得相应课程的学分)。
selectsno,sum(ccredit)
wherescore>
60ando=o
groupbysno
实验五复杂查询(自连接和外连接不考)
1.查询体育课成绩不及格的男生名单
selectsname
fromstudent,course,sc
wherestudent.sno=sc.snoando=o
andcname='
体育'
2.将04001班全体学生的成绩置0
sc(sno,cno,score)
student(sno,clno...)
updatescsetscore=0
wheresnoin(selectsnofromstudentwhereclno='
04001'
3.删除04002班全体学生的选课记录
deletefromscwheresnoin(selectsnofromstudentwhereclno='
04002'
4.查询所有选修了001号课程的学生的姓名
fromstudent,sc
wherestudent.sno=sc.snoandcno='
001'
5.查询其他班中比04001班所有学生年龄都小的学生,并按年龄的降序输出
select*fromstudent
whereclno<
>
'
andsage<
all(selectsagefromstudentwhere
clno='
6.查询没有选修数据库课程的学生的信息
select*fromstudent
wheresnonotin(selectsno
fromsc,course
数据库'
实验六创建视图和数据操纵
1.建立04002班学生的视图
createviewv_clno
as
whereclno='
2.建立04001班学生的视图,输出其学号、姓名、和年龄,并且更换列名
createviewv1(学号,姓名,年龄)
as
selectsno,sname,sagefromstudent
3.将学生的学号和平均成绩建立一个视图
createviewv2(学号,平均成绩)
selectsno,avg(score)
fromsc
4.建立04003班学生选修了0001号课程的学生的视图.
createviewv3(学号,姓名)
selectsno,sname
fromstudent,sc
04003'
andstudent.sno=sc.snoandcno='
5.向数据表S添加一个学生信息
201320180309刘可女1998-2-15经管
insertintos(sno,sname,ssex,sbirthday,sdept)
values('
201320180309'
刘可'
1998-2-15'
null)
6.将张三的C语言课程成绩改为100分
updatescsetscore=100
wheresno=(selectsnofromswheresname='
张三'
andcno=(selectcnofromcwherecname='
c语言'
7.删除1001号课程的选修信息
deletefromscwherecno='
1001'
实验七数据安全(角色部分不考)
1.在服务器中创建test数据库的用户yy和登陆账号。
sp_addlogin'
login1'
pass1'
usetest
sp_adduser'
yy'
2.把对表sc的插入权授予给用户yy,并允许将此权限再授予其他用户
grantinsertonsctoyywithoption
3.把在test数据库建表权限授予给用户yy。
grantcreatetabletoyy
4.把查询表s和修改学生编号sno的权限授予给户yy。
grantselect,update(sno)onstoyy
5.收回用户yy在test数据库中的建表权。
revokecreatetablefromyy
6.yy用户拒绝对C表的查看权限
denyselectonctoyy
实验八索引的创建与使用,默认与规则的创建
1.使用sql语句在表course的cname字段上创建一个唯一性的聚集索引,索引排列顺序为降序。
createuniqueclusteredindexindex1oncourse(cnamedesc)
2.使用sql语句在表course的credit字段上创建一个非唯一性的非聚集索引。
createnonclusteredindexindex2oncourse(credit)
3.在sm数据库中创建一个学生性别的默认值,并将默认值捆绑到sm数据库表student的sex列上。
createdefaultdf1as'
execsp_bindefault'
df1'
student.sex'
4.在sm数据库中定义规则,使用该规则的列的值被限制为必须大于0,并将规则捆绑到sm数据库表teacher的sal列上。
最后对表teacher执行插入语句,查看执行结果。
createrulerule1as@x>
execsp_bindrule'
rule1'
teacher.sal'
实验九存储过程
1.在学生表中,根据姓名查询并显示该同学的信息,否则显示“查无此人”(使用if……else语句)
createprocp2(@snamevarchar(20))--创建存储过程
ifexists(select*fromstudentwheresname=@sname)
select*fromstudentwheresname=@sname
else
print'
查无此人'
execp2'
刘燕'
--执行存储过程
2.查看并显示选修指定课程的人数。
createprocp3(@cnochar(4))
declare@nint
select@n=count(sno)fromscwherecno=@cno
有'
+convert(varchar(10),@n)+'
个人选修这门课'
execp3'
3.1+2+...+100(使用while语句)
declare@iint,@sint
set@i=1
set@s=0
while(@i<
=100)
begin
set@s=@s+@i
set@i=@i+1
end
print@s
4.使用case表达式,判断课程表中ctno列的值,如果为“00”,则显示“专业基础课”;
如果为“01”,则显示“公共基础课”;
如果为“02”,则显示“专业课”;
否则显示“待定”。
selectcno课程号,cname课程名,课程类型=
casectno
when'
00'
then'
专业基础课'
01'
公共基础课'
02'
专业课'
else'
待定'
fromcourse
5.给定学号,根据该学生的平均分,评定等级,90以上‘一等'
80以上‘二等'
70分以上'
三等'
其他'
补考'
createprocp4(@snochar(12))
declare@avgdecimal
select@avg=AVG(score)fromsc
wheresno=@sno
print(@sno+
case
when@avg>
=90then'
一等'
=80then'
二等'
=70then'
execp4'
201320180305'
实验十触发器
s(sno,sname,ssex,sbirthday)
c(cno,cname,credit,ctime,cnum)
1.不允许向数据表s添加数据
createtriggertr1
ons
forinsert
任何人不得添加数据'
rollback
insteadofinsert
select*froms
2.不允许修改数据表s中李四的数据
inserted表格中保存了即将被添加的记录行,结构与原表相同
deleted表格中保存即将被删除的记录行,结构与原表相同
修改数据相当于删除旧记录添加新记录
createtriggertr2
forupdate
ifexists(select*fromdeletedwheresname='
李四'
3.删除学生信息的同时删除该生的选课信息
createtriggertr3
fordelete
deletefromsc
wheresno
in(selectsnofromdeleted)
4.每添加一条选课记录,课程表中相应课程的选修人数加1*
createtriggertr4
onsc
updatecsetcnum=cnum+1
whereo=(selectcnofrominserted)
5.每当添加、删除、修改s表中数据,相应班级人数进行更新*
s(sno,sname,ssex,sbirthday,clno)
class(clno,cnum)--班级表(班级号,班级人数)
createtriggertr5
forinsert,delete,update
updateclasssetcnum=cnum+1
whereclass.clno=(selectclnofrominserted)
updateclasssetcnum=cnum-1
whereclass.clno=(selectclnofromdeleted)
备注:
查找的具体数据可以根据你所创建的具体表做相应调整
欢迎您的下载,
资料仅供参考!
致力为企业和个人提供合同协议,策划案计划书,学习资料等等
打造全网一站式需求