《2022年数据库实验内容--答案 2.pdf》由会员分享,可在线阅读,更多相关《2022年数据库实验内容--答案 2.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验内容:实验一:数据库的操作使用 Management Studio 和 sql 语句分别完成以下操作:1.创建一个名为“SM”的数据库,数据文件初始大小为3MB,最大为 50MB,数据库自动增长,增长方式按10%;日志文件初始大小为2MB,数据大小不受限制,按1MB 增长。create database sm on ( name=smdata, filename=e:smdata.mdf, size=3, maxsize=50, filegrowth=10%) log on (name=smlog, filename=e:smlog.ldf, size=2, maxsize=unlimit
2、ed, filegrowth=1) 2.修改数据库“ SM” ,将数据文件名改成“sm_data”,初始大小改成5MB alter database sm modify file ( name=smdata, newname=sm_data, size=5) 3.分别查看数据库“SM” ,该数据库中的文件和文件组。execsp_helpfilesm execsp_helpfilegroupsm 4.删除数据库“ SM” 。drop database sm 实验二:创建表1. 在数据库 SM 中创建学生表student,课程表 course,选课表 sc student(sid,sno,clno
3、,sname,ssex,sage,sbir) 说明: sidint identity(1,1) 序号sno 为主关系键,为字符类型学号clno 字符类型,班级号sname 字符类型,并不为空ssex字符类型, check 的值的范围为男女sbir 日期类型出生日期名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - sage int;usesm create table student ( sidint identity(1,1),
4、sno char(10) constraint pk_st primary key, clno char(10), sname varchar(20) not null, ssex char(2) constraint ck_ssex check(ssex in(男 ,女 ), sbirdatetime, sageint ) course(cno,cname,ccredits,ctno,cpno,ctime) 说明: cno 字符类型,主关系键cname 字符类型,唯一键ccredits 学分,精确数值型,精确长度为2,小数位为1 ctno, cpno 字符类型ctime 整型create t
5、able course (cno char(4) constraint pk_c primary key, cname varchar(20) constaintuk_cname unique, ccredit decimal(2,1), ctno char(2), cpno char(4), ctimetinyint ) sc(sno,cno,score) 说明: sno+cno 为主键,并且sno 是 student 的外部键, cno 是 course 的外部键。score 精确数值型,精确长度为4,小数位为1 create table sc ( sno char(10) constra
6、int fk_sno foreign key references student(sno), cno char(4) constriantfk_cno foreign key references course(cno), score decimal(4,1), constraintpk_sc primary key(sno,cno) ) 2.使用 Management Studio 对数据库 SM 中的表插入数据实验三:表的维护名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2
7、页,共 9 页 - - - - - - - - - 1.用 sql 语句修改表course 的列属性 ,将 cname 的长度改为40,且不允许空alter table course drop constraint uk_cname alter table course alter column cname char(40) not null 2.用 sql 语句向表student 中增加列email,且要求输入的电子邮件地址必须包括 alter table student add email varchar(20) constraint ck_email check(email like %
8、) 3.用 sql 语句删除表student 中的列 sbir alter table student drop column sbir 4.删除 sname 列上的约束。alter table student alter column sname varchar(20) null 5.删除表 student drop table student 实验四:简单数据查询在实验二的基础上,再在sm 数据库中新建表teacher,包括如下数据项teacher(tno,tname,age,sal,dno) tno 为教职工编号,tname 姓名, age 年龄, sal 为月薪, dno 为部门号在
9、student,course,sc,teacher 四张表中进行下列查询1,查询所有0002 部门职工的信息;select * from teacher where dno=0002 2,查询 1984 年和 1985 年出生的女生的信息;select * from student where year(sbir) in(1984,1985) and ssex=女 3,查询 0001 部门、 0002 部门或 0003 部门的职工信息;select * from teacher where dno in(0001,0002,0003) 4,查询学号为03004 的同学正在学习的课程;selec
10、tcno from sc where sno=03004 5,查询不姓王或李的同学的信息。select * from student where sname like 王李 % 6,查询有多少名学生的物理课成绩不及格;select count(sno) fromsc,course where o=o and cname= 物理 and score60 and o=o group by sno 实验五复杂查询(自连接和外连接不考)1. 查询体育课成绩不及格的男生名单selectsname fromstudent,course,sc wherestudent.sno=sc.sno and o=o
11、and cname=体育 and ssex=男 and score60 2. 将 04001 班全体学生的成绩置0 sc(sno,cno,score) student(sno,clno.) updatesc set score=0 wheresno in( select sno from student where clno=04001) 3. 删除 04002 班全体学生的选课记录delete from sc where sno in( select sno from student where clno=04002) 4. 查询所有选修了001 号课程的学生的姓名selectsname f
12、romstudent,sc wherestudent.sno=sc.sno and cno=001 5. 查询其他班中比04001 班所有学生年龄都小的学生,并按年龄的降序输出select * from student whereclno04001 and sage0 execsp_bindrule rule1,teacher.sal 实验九存储过程1.在学生表中,根据姓名查询并显示该同学的信息,否则显示“查无此人”(使用 if,else语句)create proc p2(sname varchar(20) -创建存储过程as if exists( select * from student
13、where sname=sname) select * from student where sname=sname else print 查无此人 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - exec p2 刘燕 -执行存储过程2. 查看并显示选修指定课程的人数。create proc p3(cno char(4) as declare n int select n=count(sno) from sc where cno
14、=cno print 有+convert(varchar(10),n)+ 个人选修这门课 exec p3 1001 3. 1+2+.+100(使用 while 语句)declare iint,s int set i=1 set s=0 while (i=90 then 一等 when avg=80 then 二等 when avg=70 then 三等 else 补考 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - end ex
15、ec p4 201320180305 实验十触发器s(sno,sname,ssex,sbirthday) c(cno,cname,credit,ctime,cnum) sc(sno,cno,score) 1.不允许向数据表s 添加数据create trigger tr1 on s for insert as print 任何人不得添加数据 rollback create trigger tr1 on s instead of insert as select * from s 2.不允许修改数据表s 中李四的数据inserted 表格中保存了即将被添加的记录行,结构与原表相同deleted 表
16、格中保存即将被删除的记录行,结构与原表相同修改数据相当于删除旧记录添加新记录create trigger tr2 on s for update as if exists(select * from deleted where sname=李四 ) rollback 3.删除学生信息的同时删除该生的选课信息create trigger tr3 on s for delete as delete from sc wheresno in (select sno from deleted) 4.每添加一条选课记录,课程表中相应课程的选修人数加1 * create trigger tr4 onsc 名
17、师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - for insert as update c set cnum=cnum+1 o = (select cno from inserted) 5. 每当添加、删除、修改s 表中数据 ,相应班级人数进行更新* s(sno,sname,ssex,sbirthday,clno) class(clno,cnum)- 班级表(班级号,班级人数) create trigger tr5 on s f
18、orinsert,delete,update as update class set cnum=cnum+1 whereclass.clno=(select clno from inserted) update class set cnum=cnum-1 whereclass.clno=(select clno from deleted) 备注:查找的具体数据可以根据你所创建的具体表做相应调整名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -