数据库应用实验五
- 格式:doc
- 大小:146.50 KB
- 文档页数:7
数据库基础与实践实验报告实验五存储过程和触发器班级:惠普测试142学号:**********姓名:***日期:2016-11-141 实验目的:1)掌握SQL进行存储过程创建和调用的方法;2)掌握SQL进行触发器定义的方法,理解触发器的工作原理;3)掌握触发器禁用和重新启用的方法。
2 实验平台:操作系统:Windows xp。
实验环境:SQL Server 2000以上版本。
3 实验内容与步骤利用实验一创建的sch_id数据库完成下列实验内容。
1.创建存储过程JSXX_PROC,调用该存储过程时可显示各任课教师姓名及其所教课程名称。
存储过程定义代码:CREATE PROCEDURE JSXX_PROCASSELECT tn 教师姓名,cn 所教课程FROM T,TC,C WHERE T.tno=TC.tno AND o=o存储过程执行语句与执行结果截图:EXECUTE JSXX_PROC2.创建存储过程XM_PROC,该存储过程可根据输入参数(学生姓名)查询并显示该学生的学号、所学课程名称和成绩;如果没有该姓名学生,则提示“无该姓名的同学”。
存储过程定义代码:CREATE PROCEDURE XM_PROC @sname VARCHAR(100)ASBEGINIF EXISTS(SELECT NULL FROM S WHERE sn=@sname)SELECT S.sno 学号,cn 课程,score 成绩FROM S,SC,C WHERE o=o AND SC.sno=S.sno ANDS.sn=@snameELSEPRINT'无该姓名的同学。
'END运行截图:3.创建存储过程XBNL_PROC,该存储过程可根据输入参数(专业名词,默认值为计算机专业),统计并显示该专业各年龄段男、女生人数。
如果没有该专业,则显示“无此专业”。
存储过程定义代码:CREATE PROCEDURE XBNL_PROC@departName VARCHAR(30)='计算机',@begin INT,@end INTASDECLARE @numOfBoys INTDECLARE @numOfGirls INTDECLARE @d# VARCHAR(3)DECLARE @result VARCHAR(50)BEGINSELECT @d# = dno FROM D WHERE dn=@departNameIF @d# IS NOT NULLBEGINSELECT @numOfBoys =COUNT(sno)FROM S WHERE age BETWEEN @begin AND @end AND dno=@d# AND sex='男'SELECT@numOfGirls =COUNT(sno)FROM S WHERE age BETWEEN@begin AND@end AND dno=@d# AND sex='女'SET @result = @departName+'专业年龄在'+CAST(@begin AS VARCHAR(3))+'-'+CAST(@end AS VARCHAR(3))+'之间的男生有'+CAST(@numOfBoys AS VARCHAR(3))+'人,'+'女生有'+CAST(@numOfGirls AS VARCHAR(3))+'人'ENDELSESET @result='无此专业。
实验五:多表查询及视图一、实验目的1.掌握SELECT语句的基本语法和查询条件表示方法;2.掌握数据表的连接查询、嵌套查询、集合查询的使用方法。
3.掌握创建及管理视图的方法;二、实验学时2学时三、实验要求1.了解SELECT语句的基本语法格式和执行方法;2.掌握连接查询、嵌套查询和集合查询的语法规则;3.掌握使用界面方式和命令方式创建及管理视图;4.完成实验报告;四、实验内容1.以实验3数据库为基础,请使用T-SQL 语句实现进行以下操作:1)查询选修了‘数学’或者‘大学英语’的学生学号、姓名、所在院系、选修课程号及成绩;2)查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息;3)按照“学号,姓名,所在院系,已修学分”的顺序列出学生学分的获得情况。
其中已修学分为考试已经及格的课程学分之和;4)查找选修了至少一门和张力选修课程一样的学生的学号、姓名及课程号;5)查询只被一名学生选修的课程的课程号、课程名;6)使用嵌套查询出选修了“数据结构”课程的学生学号和姓名;7)使用嵌套查询查询其它系中年龄小于CS系的某个学生的学生姓名、年龄和院系;8)使用ANY、ALL 查询,列出其他院系中比WM系所有学生年龄小的学生的姓名;9)使用集合查询查询选修1号课程同时选修2号课程的同学的学号与姓名;2.以实验数据库为基础数据,利用对象资源管理器创建以下视图:1)创建所有学生学号、姓名及年龄的信息视图v_stu_info2)创建CS系学生基本信息视图v_stu_cs3)创建选修课成绩在80分以上的学生的信息视图v_stu_80,包括学生基本情况及成绩。
3. 以实验数据库为基础数据,请使用T-SQL语句完成以下内容,并将SQL语句写在实验报告册中:1) 创建v_CS视图,包括CS系各学生的学号、姓名及年龄,要求进行修改和插入操作时仍需保证该视图只有CS系的学生;2) 创建v_CS_age20视图,包括CS系学生年龄在20岁以上的基本信息;并保证对视图文本的修改都要符合年龄大于20这个条件。
实验五实验5.1 数据查询1)要求以School数据库为例,在该数据库中存在四张表格,分别为:●表STUDENTS(sid, sname, email, grade);●表TEACHERS(tid, tname, email, salary);●表COURSES(cid, cname, hour);●表CHOICES(no, sid, tid, cid, score)在数据库中,存在这样的关系:学生可以选择课程,一个课程对应一个教师。
在表CHOICES中保存学生的选课记录。
按以下要求对数据库进行查询操作:(1)查询年级为2001的所有学生的名称并按编号升序排列。
程序:Select snamefrom studentswhere grade='2001'order by sid asc;(2)查询学生的选课成绩合格的课程成绩。
程序:Select scorefrom choiceswhere score>'59';(3)查询课时是48或60的课程的名称。
程序:select cnamefrom courseswhere hour='48'or hour='60';(4)查询所有课程名称中含有data的课程编号。
程序:select cidfrom courseswhere cname like'%data%';(5)查询所有选课记录的课程号(不重复显示)。
程序:select distinct cidfrom choices;(6)统计所有教师的平均工资。
程序:select avg(salary)from teachers;(7)查询所有教师的编号及选修其课程的学生的平均成绩,按平均成绩降序排列。
程序:select tid,avg(score)from choicesGROUP BY tidorder by avg(score)desc;(8)统计各个课程的选课人数和平均成绩。
实验五视图、索引及数据更新一、实验目的:熟练掌握索引的建立与删除的方法,熟练掌握SQL的应用,熟练掌握数据插入、修改和删除的使用,为后继学习作准备。
二、实验属性(验证性)1.了解并掌握SQL查询分析器及企业管理器的使用;2.掌握基本表的定义、删除与修改。
三、实验原理SQL语言应用。
四、实验步骤:(1) 启动Oracle的SQL Developer或者SQL Plus,或者SQL Server 查询分析器;(2) 对于Oracle11g的SQL Plus需要进行登录,对于Oracle11g的SQL Developer需要进行建立连接。
1 建立索引建立唯一索引:例3.1 为学生选课数据库中的Students,Courses,SC三个表建立索引。
其中Students表按Sname升序建唯一索引,Courses表按Cname升序建唯一索引,SC表按Sno(学号)升序和Cno(课程号)号降序建唯一索引。
查看自己建立的索引:2 删除索引例3.2 删除基本表SC上的Rep_SCno索引。
然后查询看索引是否还存在。
理解索引的意义。
例3.3 删除基本表student上的Rep_Sno索引。
3 建立视图例3.4 建立数学系学生的视图C_Student,并要求进行修改和插入操作时仍需保证该视图只有数学系的学生,视图的属性名为Sno,Sname,Sage,Sdept。
例3.5 建立学生的学号(Sno)、姓名(Sname)、选修课程名(Cname)及成绩(Grade)的视图Student_CR。
例 3.6定义一个反映学生出生年份的视图student_birth(sno,sname,s_birth,ssex,sdept)。
视图建立后,使用命令查询自己创建的视图:4 查询视图例3.7 在数学系的学生视图C_Student中找出年龄(Sage)小于20岁的学生姓名(Sname)和年龄(Sage)。
例3.8 在Student_CR视图中查询成绩在85分以上的学生学号(Sno)、姓名(Sname)和课程名称(Cname)。
实验五编程实施学生、选课、成绩简易管理系统一.目的与要求1.通过编程扩展“学生选课系统”的功能。
2.进一步掌握调试程序的基本步骤和方法。
二.实验内容1.使学生、教师和课程表具有增加、修改、删除和查询数据的功能。
2.学生根据开设的课程进行选课.3.教师根据学生所选课程进行成绩登录。
4.各类统计分析,比如平均成绩。
系统说明:学生:可以进行选课、退课、查分、查看学生自己的信息、修改自己的密码。
教师:可以查询已选学生、登分、查看教师自己的信息、修改自己的密码。
管理员:可以增加和删除课程、学生、教师等信息,可以查看和修改学生、教师密码,可以注册和注消学生、教师,有所有学生的功能,能够查询教师信息。
部分窗口如下:部分代码如下:如查分代码如下:通过datawindow中通过学号可以查看自己成绩。
dw_1.reset()dw_1.settransobject(SQLCA)dw_1.retrieve(user)dw_1.object.datawindow.readonly="yes"三.上机体会。
进一步掌握了开发管理系统的基本方法;掌握了使用PowerBuilder开发环境提供的工具建立应用程序的步骤和方法;掌握应用PowerBuilder提供的调试程序进行应用程序的调试。
实验六SQL Server 2000高级技术的使用一.目的与要求1.练习存储过程的建立和使用。
2.学会触发器的使用。
二.实验内容1.存储过程的建立和使用。
(1)创建存储过程,使其具有如下功能:根据所提供的学号参数,返回该学生的学习情况信息。
(2)查看和修改存储过程;(3)使用存储过程;(4)删除存储过程。
2.触发器的建立和使用(1)创建两个触发器,分别具有如下功能:a.将删除的学生选课信息转移到存档学生选课表中;b.在修改学生成绩时,要求修改后的成绩一定要比原来的成绩高;(2)查看和修改触发器;(3)使用触发器;(4)删除触发器;3.为实验五设计存储过程和触发器,通过调试验证其正确性。
实验五:数据库综合查询一、实验目的1.掌握SELECT语句的基本语法和查询条件表示方法;2.掌握查询条件种类和表示方法;3.掌握连接查询的表示及使用;4.掌握嵌套查询的表示及使用;5.了解集合查询的表示及使用。
二、实验环境已安装SQL Server企业版的计算机(120台);具有局域网环境,有固定IP;三、实验学时2学时四、实验要求1.了解SELECT语句的基本语法格式和执行方法;2.了解连接查询的表示及使用;3.了解嵌套查询的表示及使用;4.了解集合查询的表示及使用;5.完成实验报告;五、实验内容及步骤1.利用Transact-SQL嵌套语句实现下列数据查询操作。
1) 查询选修了计算机体系结构的学生的基本信息。
select*from studentwhere Sno in(select Sno from coursewhere Cno in(select Cno from sc where Cname='计算机体系结构'))2) 查询年龄比李勇小的学生的学号和成绩。
select a.sno,grade from student a,coursewhere a.sno=course.sno and sage<(select sage from student where sname='李勇')3) 查询其他系中比系编号为‘D1’的学生中年龄最小者要大的学生的信息。
select*from student where dnum<>'D1'AND SAGE>(select min(sage)from student where dnum='D1')4) 查询其他系中比系编号为‘D3’的学生年龄都大的学生的姓名。
select*from student where dnum<>'D3'AND SAGE>all(selectsage from student where dnum='D3')5) 查询‘C1’课程的成绩高于70的学生姓名。
实验五数据库的安全性控制一、实验目的:1. 通过实验加深对数据安全性的理解,并掌握SQL Server中有关用户登录的认证以及管理办法;2. 通过实验加深对数据库存储控制机制的理解,通过自主存取控制进行权限管理,熟悉SQL Server中角色管理;3.通过实验加深对数据安全性的理解,熟悉视图机制在自主存取控制上的应用。
二、实验内容1.设置SQL Server的混合安全认证模式。
在SQL Server中的对象资源管理器中设置安全认证模式。
2.在SQL Server中,利用“对象资源管理器”创建一个名为“U1”的登录用户和数据库用户,密码为111,并允许其登录S-T数据库。
3.在SQL Server中,利用代码创建一个名为“U2”的登录用户,密码为111;其相应的数据库用户名为lucky,并允许其登录S-T数据库。
4.用“u1”用户名登录后,执行对students表的查询操作,说明执行结果,并分析原因(建议:在启动一个SQL Server 2008窗口)。
分析:没有对u1进行其他操作的授权,只能登录而不能进行插入,修改等操作5.将students表的操作权限select和insert赋予数据库用户u1,并允许其向其它用户授权。
6.以“u1”用户名登录,执行对students和teacher表的查询操作,将该运行结果进行分析。
分析:对比第4题,对U1进行授权后可以进行相应的操作7.执行下列代码后,分析用户u2能否对s_t数据库的student表进行select 和update操作,为什么?并用相应的语句验证。
分析:首先grant给public组赋予了查询,插入,更新权限,然后给lucky用户赋予了对S表的所有权限,然后又revoke收回了lucky的权限,但并没有收回public组的权限,而deny却收回了lucky的更新权限,故查询可实现,而更新不可实现8.以sa登录数据库,在s_t数据库的stc表上创建选修了课程B001的视图st_view。
数据库实验五在学习数据库的过程中,实验是巩固理论知识、提高实践能力的重要环节。
本次实验五主要围绕数据库的某些关键操作和应用展开,通过实际动手操作,让我们对数据库的理解更加深入和全面。
本次实验的环境是常见的数据库管理系统,如 MySQL 或 SQL Server 等。
实验的目的是让我们熟练掌握数据库的查询、更新、插入和删除等基本操作,同时能够运用这些操作解决一些实际的问题。
实验的第一个任务是进行数据的查询操作。
查询是从数据库中获取所需信息的重要手段。
我们需要根据给定的条件,从数据表中筛选出符合要求的数据。
这就涉及到了使用 WHERE 子句来设定条件,以及各种运算符如等于(=)、大于(>)、小于(<)、不等于(<>)等的运用。
同时,还需要掌握连接(JOIN)操作,将多个相关的数据表连接起来,以获取更全面和准确的信息。
例如,在一个学生成绩管理系统中,要查询某个班级中数学成绩大于 80 分的学生名单,就需要先从学生表中获取班级信息,再从成绩表中筛选出数学成绩符合条件的记录,最后通过学生学号将两个表连接起来,得到最终的结果。
接下来是数据的更新操作。
这包括对已有数据的修改和删除。
在进行更新操作时,必须格外小心,因为一旦操作失误,可能会导致数据的丢失或错误。
在修改数据时,同样要使用 WHERE 子句来指定要修改的记录。
例如,要将某个学生的数学成绩从 80 分修改为 90 分,就需要明确指定该学生的学号或其他唯一标识。
而删除数据则需要更加谨慎,通常建议先进行查询,确认要删除的记录准确无误后,再执行删除操作。
数据的插入操作也是实验的重要部分。
插入新的数据可以增加数据库的信息量。
在插入数据时,需要注意数据的类型和格式要与数据表的定义相匹配。
比如,一个学生信息表中,学号是整数类型,姓名是字符串类型,出生日期是日期类型,如果插入的数据类型不正确,就会导致插入失败。
在实验过程中,我也遇到了一些问题和挑战。
比如,在进行复杂的查询操作时,由于条件设置不当,导致查询结果不准确。
实验五数据库完整性与安全性实验1、实验目的1.通过对完整性规则的定义实现,熟悉了解kingbase中完整性保证的规则和实现方法,加深对数据完整性的理解。
2.通过对安全性相关内容的定义,熟悉了解kingbase中安全性的内容和实现方法,加深对数据库安全性的理解2、实验环境操作系统:Microsoft Windows 7旗舰版(32位)。
数据库版本:MySQL 6.23、实验内容3.1完整性实验:(1)分别定义学生数据库中各基表的主键、外键,实现实体完整性约束和参照完整性约束;在create table 时已经定义了各个基表的主键。
因此,首先对每个基表删除主键,再添加主键。
实现实体完整性约束。
如下图。
删除主键:添加主键:sc表中的cno和sno分别是course表和student表的外关键字。
下图为给sc表添加student和course的外键,实现参照完整性约束。
alter table sc add constraint fk_student foreign key(sno) references student(sno);alter table sc add constraint fk_course foreign key(cno) references course(cno);主键和外键均添加成功,输入show create table 命令来查看各基表信息。
(2)分别向学生表、课程表插入具有相同学号和相同课程编号的学生数据和课程数据,验证其实体完整性约束;向课程表中插入课程号为C01的课程。
向学生表中插入学号为30201的学生。
由上面两个实验来看,分别对student和course表插入具有相同学号和相同课程号的学生信息和课程信息,都显示sql语句错误信息为:Duplicate entry *** for key ‘PRIMARY’。
验证了实体完整性约束。
(3)向学生选课表中插入一条数据,课程编号是课程表中没有的,验证参照完整性约束;插入成绩信息是学号为31428(student中存在),课程号为C07(course中不存在)的学生成绩信息。
实验四简单查询和连接查询2. 简单查询实验用Transact-SQL语句表示下列操作,在“学生选课“数据库中实现其数据查询操作:(1) 查询数学系学生的学号和姓名。
select sno,snamefrom Swhere Sdept='MA'(2) 查询选修了课程的学生学号。
select distinct(sno)from sc;(3) 查询选修课程号为‘C2’的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
select distinct(sno),gradefrom scwhere cno='C2'order by grade desc,sno asc;(4) 查询选修课程号为‘C2’的成绩在80-90 分之间的学生学号和成绩,并将成绩乘以系数0.8 输出。
select distinct(sno),grade*0.8 as'sore'from scwhere cno='C2'and grade between 80 and 90;(5) 查询数学系(MA)或计算机科学系(CS)姓张的学生的信息。
select*from Swhere dept in('MA','CS')and sname like'张%';(6) 查询缺少了成绩的学生的学号和课程号。
select sno,cnofrom scwhere grade is null;3. 连接查询实验用Transact-SQL语句表示,并在“学生选课”数据库中实现下列数据连接查询操作:(1) 查询每个学生的情况以及他(她)所选修的课程。
select S.*,amefrom S JION sc ON s.sno=sc.sno JION c ON o=o(2) 查询学生的学号、姓名、选修的课程名及成绩。
select s.sno,sname,cname,gradefrom S JION sc ON s.sno=sc.sno JION c ON o=o(3) 查询选修‘离散数学’课程且成绩为90 分以上的学生学号、姓名及成绩。