数据库技术实验六
数据库技术及VFP应用实验报告(六)

2.在“数据”选项卡中选择“查询”
中将学生登记表和学生成绩表添加到“查询设计器”中
3.在“字段”选项卡中将学号、姓名、性别3个字段添加到“选定字段”中
4.单击“函数与表达式”框的按钮,打开“表达式生成器”的对话框,在表达式框中输入:YEAR(DATE())-YEAR(学生登记表.出生日期)as年龄。
单击“确定”
5.仿照第4步的方法,生成新字段“平均分”和“总分”,在表达式框中输入:AVG(绩)as平均分,SUM(成绩)as总分。
6.在“排序依据”选项卡中将“选定字段”中的“ SUM(成绩)as总分”
序条件”列表框中,在“排序选项”中选择“降序”
7.在“分组依据”选项卡中,将“学生登记表.学号”字段添加到“分组字段”列表框中
8.单击“满足条件”按钮,打开满足条件对话框,输入条件
钮,
10.按CTRL+S键,保存查询,命名为“平均分总分”
实验总结及意见
通过本次实验我进一步掌握Visual Foxpro中用查询设计器建立查询的基本。
(完整版)数据库技术与应用实验报告

(完整版)数据库技术与应用实验报告《数据库技术与应用》实验报告班级学号:姓名:实验日期:指导老师:实验名称一、实验一表的建立与维护实验目的与要求 1.初步掌握根据一个应用目标把现实问题抽象为关系数据模型的方法,从而为解决实际问题奠定数据基础。
2.掌握表的建立与维护的一般方法。
3.理解表的记录指针与当前记录的意义。
4.掌握表的打开、关闭、浏览、显示等操作方法。
5.掌握表结构的修改。
6.掌握记录的增加与删除等操作。
7.掌握数据复制方法。
8.二、实验准备 1、复习关系数据库的有关概念,深刻理解Virsual FoxPro中所采用的关系模型的实质及Virsual FoxPro所支持的数据模型。
2、复习表的建立、现实与维护等操作。
三、实验内容下表是某校学生花名册,根据该表完成以下操作,写出操作步骤。
学习成绩性学号姓名别学 009901 张小强男 98 85 否 20XX年获全数外语出生年月否少数民族受奖情况国数学奥林匹克竞赛二等奖。
009902 009903 009904 009905 陈斌李哲男男 88 56 75 88 75 82 72 81 否是否是20XX年获全国中学生田径运动会100米第三名009906 009907 009908 009909 张青松男封小莉女周晓钱倩女女 65 82 65 83 81 73 78 85 否否20XX年获广东省三好学生称号 009910 009911 孙力军男肖彬彬女 64 55 68 95 是否赵大明男冯珊女否否1.设计一个表的结构,使其能描述上表的信息,同时又符合关系模型的基本要求。
2.建立表,输入表中的数据,并将保存在自己盘中。
3.给全部女生的数学成绩加5分。
4.将记录指针定位到第5号记录。
5.将记录指针指向孙力军同学。
6.显示所有姓“张”学生的情况。
7.把表的姓名字段宽度修改为8。
8.浏览记录数据,且表头用汉字。
9.把少数民族学生的记录复制到中。
实验6 数据库嵌套查询和组合查询

实验六数据库嵌套查询和组合查询实验目的:掌握查询中的嵌套查询和组合查询的操作方法,进一步加深对select语句的理解。
实验内容:(1)创建查询窗口,设置查询环境(2)分组查询(3)统计查询(4)嵌套查询实验步骤:新建查询窗口,选择studentcourse为当前数据库,输入如下select查询语句并执行,对数据库进行嵌套查询和组合查询操作。
(1)统计选修了【数据库原理】课程的学生人数。
代码:SELECT COUNT(SNO) AS 人数FROM SCWHERE CNO IN (SELECT CNO FROM COURSES WHERE CNAME='数据库原理')(2)查询没有选修【数据库原理】课程学生信息。
代码:SELECT *FROM STUDENTSWHERE SNO NOT IN (SELECT SNO FROM SCWHERE CNO IN(SELECT CNO FROM COURSESWHERE CNAME='数据库原理') )(3)查询其他系中比计算机系学生年龄都小的学生。
加入一行数据0602007 李四男1991-12-2 数学代码:SELECT *FROM STUDENTSWHERE SBIRTHDAY>ALL(SELECT SBIRTHDAY FROM STUDENTS WHERE SDEPT='计算机')(4)查询被0602001学生或0602002学生所选修的课程的课程号(用union组合查询与in 条件查询两种方法实现)代码:SELECT CNO FROM SC WHERE SNO='0602001'UNIONSELECT CNO FROM SC WHERE SNO='0602002'代码:SELECT DISTINCT(CNO)FROM SCWHERE SNO IN ('0602001','0602002')(5)查询0602001学生和0602002学生同时选修的课程号(用intersect组合查询与exists 嵌套子查询两种方法实现)代码:SELECT CNO FROM SC WHERE SNO='0602001'INTERSECTSELECT CNO FROM SC WHERE SNO='0602002'2000版本上运行:2008版本运行结果:代码:SELECT CNOFROM SC SC1WHERE EXISTS(SELECT CNOFROM SC SC2WHERE O=OAND SC2.SNO='0602002')AND SNO='0602001'(6)查询被0602001学生选修但没有被0602002同学选秀的课程的课程号(用excpt组合查询与not exists嵌套子查询两种方法实现)代码:SELECT CNO FROM SC WHERE SNO='0602001'EXCEPTSELECT CNO FROM SC WHERE SNO='0602002'2000版本:2008版本运行结果:。
数据库技术实验六

课程名称数据库技术实验成绩实验名称存储过程和触发器的使用学号XX 班级日期实验目的:1.掌握存储过程的使用方法;2.掌握触发器的实现方法;实验平台:利用RDBMS(SQL Server 2008)与其交互查询工具(查询分析器)来操作T-SQL语言;实验内容:1.存储过程(1)创建存储过程,要求当一个员工的工作年份大于6年时将其转到经理办公室工作。
alterprocedure yuangong_infolEmployeeID char(6),name nchar(20)asbegindeclare year intset year=(select WorkYearfrom Employeeswhere EmployeeID=EmployeeID)declare DepartmentID char(3)set DepartmentID=(select DepartmentIDfrom Departmentswhere DepartmentName=name)if (year>6)update Employeesset DepartmentID=DepartmentIDwhere EmployeeID=EmployeeIDEndexec dbo.yuangong_infol'000000','经理办公室'(2)创建存储过程,根据每个员工的学历将收入提高500元。
alterproc SA_INenu char(6)asbeginupdate Salaryset InCome=InCome+500from Salary,Employeeswhere Employees.EmployeeID=Salary.EmployeeID and Education=enuendselect InComefrom Salary,Employeeswhere Salary.EmployeeID=Employees.EmployeeID and Education='本科'goexec dbo.sa_in'本科'goselect InComefrom Salary,Employeeswhere Salary.EmployeeID=Employees.EmployeeID and Education='本科'select InComefrom Salary,Employeeswhere Salary.EmployeeID=Employees.EmployeeID and Education='本科'(3)创建存储过程,使用游标计算本科与以上学历的员工在总员工数中的比例。
数据库原理综合实验报告

实验六数据库原理综合实验1实验目的(1)运用所学的数据库设计技术,针对一个具体的应用系统,完成系统数据库的概念模型、逻辑模型和物理模型的设计。
以巩固理论课程上所学的知识,更好地掌握数据库设计技术方法。
(2)对前面章节所学的知识加以综合应用。
2实验内容给定一个应用环境,如学生选课系统、超市管理系统、某企业库存管理系统、学校图书管理系统、学校综合积分管理系统等等。
(同学们课从上述选定一个题目,也可以选取一个自己较熟悉的应用环境)。
完成下面的工作2.1 数据库概念模型设计(1)进行需求分析。
-对系统的语义进行描述(包括功能、所需的数据及他们之间的关系和处理方法)(2)识别系统中的实体及实体的属性,分析实体之间的联系。
(3)设计数据库概念模型,画出E-R图。
2.2 数据库逻辑模型设计(1)根据数据库概念模型设计数据库的逻辑模型。
-将E-R模型转化到逻辑模型(2)根据应用需要和规范化理论对逻辑模型进行优化。
2.3 数据库物理模型设计(1)针对某种DBMS,设计数据库物理模型,包括表空间、表和索引等于物理存储有关的设计。
(2)优化物理模型(3)生成某种DBMS的SQL语句,创建数据库及其表。
2.4 装载数据(1)收集真实数据或者生成模拟数据。
(2)批量加载数据到数据库中。
(3)设计一系列SQL语句,尤其是连接查询、嵌套查询等SQL语句,以测试数据库性能。
3实验要求(1)可以借助POWERDESIGNER等系统分析与设计辅助工具进行数据库设计,也可以使用WORD文件直接生成各种设计文档。
(2)选择的数据库应用系统应该规模适中,不宜太大太复杂,可能做不完;也不宜太小太简单,甚至仅有三两个表组成。
(3)要设计良好的数据库完整性约束。
(4)思考题:数据库设计通常由哪些辅助工具?各有哪些优缺点?4实验步骤4.1 数据库概念模型设计(1)进行需求分析。
学生需要有学号、姓名、性别、年龄、专业等信息。
选课需要有学号、课号、成绩等信息课程需要有课程号、课程名、先修课、学分等信息(2)设计数据库概念模型,画出E-R图。
实验六答案数据库综合查询[精品文档]
![实验六答案数据库综合查询[精品文档]](https://img.taocdn.com/s3/m/1101711e0722192e4536f655.png)
1、查询以‘DB_’开头,且倒数第三个字符为‘s’的课程的详细情况select*from coursewhere cname like'DB\_%s__'2、查询名字中第二个字为“阳”的学生姓名和学号及选修的课程号、课程名select student.sno,student.sname,o,cnamefrom student,course,scwhere sname like'_阳%'and student.sno=sc.sno and o=o 3、列出选修了‘数学’或‘大学英语’的学生学号、姓名、select student.sno,sname,sdept,o,cname,gradefrom student,sc,coursewhere student.sno=sc.sno and o=o andsc.sno in(select sc.sno from sc,course where (cname='大学英语'or cname='数学')and o=ogroup by sc.sno)select student.sno,sname,sdept,cno,gradefrom student,scwhere Cno in(select Cno from coursewhere cname='数学'or cname='大学英语')and sc.sno=student.sno4、查询缺少成绩的所有学生的详细情况;select*from student,scwhere Grade is null and student.sno=sc.sno5、查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息;select*from studentwhere sage<>(select sagefrom studentwhere sname='张力')6、查询所选课程的平均成绩大于张力的平均成绩的学生学号、姓名及平均成绩select student.sno,sname,平均成绩=AVG(grade)from student,scwhere student.sno=sc.snogroup by student.sno,snamehaving AVG(Grade)>(select AVG(Grade)from sc,student where sname='张力'and student.sno=sc.sno)7、按照“学号,姓名,所在院系,已修学分”的顺序列出学生学分的获得情况。
数据库原理实验六 ODBC和JDBC数据库编程
《数据库原理》实验报告题目:实验六ODBC/JDBC数据库编程学号姓名班级日期2016.10.27一、实验内容、步骤以及结果1.ODBC配置以及程序调试:(50分)(1)配置一个ODBC数据源,要求数据源名称:student,其中包含s(学生信息)表。
打开运行-〉输入odbcad32.exe,确定-〉在ODBC数据源管理器,点击“添加”(2)阅读并运行实验给出的例子程序,理解ODBC编程,要求简单写出自己对这段程序的理解或者流程图,并且请给出程序运行结果示例图。
因为该MFC项目是一个窗口项目,窗口加载时调用的是ODBC_TESTDlg.cpp中的OnInitDialog给窗口中各个输入框赋初值。
在在点击执行按钮时运行函数OnButtonExcute。
在这个函数中完成数据库连接,执行SQL语句的一系列过程。
1.新建变量并初始化。
分配语句句柄。
2.连接数据库3.执行SQL语句4.结果集处理:循环显示select的结果。
5.断开数据源,释放相关的句柄。
2.参考给出的ODBC编程示例,使用ODBC技术,编写一个简单的程序,包含对数据库SPJ的连接,查询,插入,修改和删除。
(50分)打开运行-〉输入odbcad32.exe,确定-〉在ODBC数据源管理器,点击“添加”修改程序,使其支持对SPJ表的查询:将语句文本框改为可写的,以支持其他语句。
查询:插入:修改:删除:3.用JDBC实现对数据库student的连接,查询,插入,修改和删除。
(选做实验) 添加sqljdbc的库:依次插入,修改,删除数据,并查询修改的结果:二、实验中出现的问题以及解决方案(对于未解决问题请将问题列出来)除了标题内容以外,该部分内容中还可以写对于实验的一些感受,建议,意见等。
问题:MFC项目是从哪里启动的?解答:开始时一直想在项目里找main函数,一直没有找到,然后才知道这个窗口项目的代码应该从窗口构造函数处开始看,与数据库有关的的代码都在点击BUTTON后执行的那个函数里。
实验六 数据库的完整性定义与检查 (2)
实验六数据库的完整性定义与检查实验目的:1.充分理解关系数据库中关于数据库完整性的概念。
2.掌握实体完整性的定义和检查方法。
3.掌握参照完整性的定义和检查方法。
4.掌握用户自定义完整性的定义和检查方法。
实验内容:一、在企业管理器中定义以下数据表中各字段的完整性约束(包括实体完整性、参照完整性和用户定义完整性)。
1.Student表。
记录学生基本信息。
表1-1 Student 表结构[Sno] [char](9)PRIMARY KEY,[Sname] [char](8)NOT NULL,[Ssex] [char](2)CHECK(Ssex IN('女','男')),[Sage] SMALLINT CHECK(Sage>=15 AND Sage<=45),[Sdept] [char](20)default('计算机'))2.Course表。
记录课程信息。
表1-2 Course 表结构[Cno] [char](10)PRIMARY KEY,[Cname] [char](20)NOT NULL,[Ccredit] SMALLINT CHECK(Ccredit>0),[Semester] SMALLINT CHECK(Semester>0),[Period] SMALLINT CHECK(Period>0),)3.Sc表。
记录学生选修课程的信息。
表1-3 Sc 表结构[Sno] [char](9)NOT NULL,[Cno] [char](10)NOT NULL,[Grade]SMALLINT CHECK(Grade>=0 and Grade<=100),PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCES Student(Sno),FOREIGN KEY(Cno)REFERENCES Course(Cno))二、在查询编辑器中,写出创建表的语句同时写出设置实体完整性、参照完整性和用户自定义完整性的语句。
实验6 PL_SQL复合数据类型
《数据库开发技术》课程之实验六PL/SQL复合数据类型:记录、表和可变数组一、实验目的1.掌握如何创建PL/SQL 记录。
2.会用%ROWTYPE 属性创建一个记录。
3.掌握如何创建PL/SQL表和记录表。
4.掌握那些能获得复合数据信息的内置方法的使用。
5.掌握可变数组的使用。
二、实验内容和要求1.根据表emp的全部字段定义记录变量emp_record。
用SELECT语句将编号为7788的雇员的全部字段对应地存入该记录变量,最后输出记录变量的雇员名称字段emp_record.ename和雇员工资字段的内容。
执行结果如下:SCOTT的工资为:3000PL/SQL 过程已成功完成。
2.声明一张Index_By表,用来接收并存储DEPT表的信息,把部门号作为键,不要忘记部门号是10的倍数。
使用循环从DEPT表中将所有部门信息检索到PL/SQL记录表中,然后用另一个循环来显示表中的这些信息。
执行结果为:10, ACCOUNTING, NEW YORK20, RESEARCH, DALLAS30, SALES, CHICAGO40, OPERATIONS, BOSTONPL/SQL 过程已成功完成。
3. 阅读以下程序,找出出错之处,说明出错原因,预测运行输出结果是什么。
请删改错误,加上适当注释后,运行该程序,验证自己的预测是否正确。
(注:实验报告中只要指出出错的语句和出错的原因即可,不需要抄录程序清单!还要求写出程序正确运行后的输出结果。
)SET SERVEROUTPUT ONDECLARETYPE dept_list IS TABLE OF dept.dname%TYPE; --定义嵌套表TYPE top5_list IS VARRAY(5) OF dept.loc%TYPE; --定义可变数组dis_dept dept_list; --嵌套表的声明num_5 top5_list; --可变数组的声明BEGINdis_dept(1):='AMGN';IF dis_dept IS NULL THENdis_dept :=dept_list('AMGN','BGEN');DBMS_OUTPUT.PUT_LINE('dis_dept表当前元素个数为:'||to_char(dis_dept.count));END IF;num_5:=top5_list('ORCL','CSCO',NULL,NULL);IF num_5(3) IS NULL THENnum_5(3):='CPQ';END IF;num_5(4):='DELL';FOR COUNTER IN 1..4 LOOPDBMS_OUTPUT.PUT_LINE(NUM_5(COUNTER));END LOOP;END;/执行结果为:4.*将上题改为使用INDEX BY BINARY_INTEGER的索引表,则实现同一执行结果,程序要做哪些相应的改变。
数据库实用技术-实验六
实验报告单院(系)计算机学院专业计算机科学与技术班级姓名学号同组人实验室S4305 组号日期课程数据库实用技术指导教师成绩实验项目编号8103203006 实验项目名称索引和数据的完整性一、实验目的(1)掌握索引的使用方法;(2)掌握数据完整性的实现方法;二、实验环境WIN7操作系统SQL Server2008三、实验原理(或要求)(1)了解索引的作用与分类;(2)掌握索引的创建方法;(3)理解数据的完整性的概念与分类;(4)掌握各种数据完整性的实现方法。
四、实验步骤(1)建立索引①使用CREATE INDEX语句创建索引。
●对YGGL数据库的Employees表中的DepartmentID列建立索引。
在查询分析器中输入如下程序并执行:USE YGGLGOCREATE INDEX depart_indON Employees(DepartmentID)GO●在Employees表的Name列和Address列上建立复合索引。
CREATE INDEX Ad_indON Employees(Name,Address)●对Departments表上的DepartmentName列建立唯一非聚集索引。
CREATE UNIQUE INDEX Dep_indON Departments(DepartName)②使用界面方式创建索引。
使用界面方式在Employees表的PhoneNumber列上创建索引。
启动SQL Server Management Studio,在对象资源管理器中展开数据库YGGL,展开表Employees,右击“索引,选择“新建索引”选项。
在新建索引的窗口中填写索引的名称和类型,单击“添加”按钮,在列表框中选择要创建的索引的列,选择完单击“确定”按钮即完成创建工作。
(2)重建索引。
重建表Employees中的所有索引。
USE YGGLGOALTER INDEX ALLON Employees REBUILD(3)删除索引。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称数据库技术实验成绩实验名称存储过程和触发器的使用学号姓名班级日期14.11.25 实验目的:1.掌握存储过程的使用方法;2.掌握触发器的实现方法;实验平台:利用RDBMS(SQL Server 2008)及其交互查询工具(查询分析器)来操作T-SQL语言;实验内容:1.存储过程(1)创建存储过程,要求当一个员工的工作年份大于6年时将其转到经理办公室工作。
alter procedure yuangong_infol@EmployeeID char(6),@name nchar(20)asbegindeclare@year intset@year=(select WorkYearfrom Employeeswhere EmployeeID=@EmployeeID)declare@DepartmentID char(3)set@DepartmentID=(select DepartmentIDfrom Departmentswhere DepartmentName=@name)if (@year>6)update Employeesset DepartmentID=@DepartmentIDwhere EmployeeID=@EmployeeIDEndexec dbo.yuangong_infol'000000','经理办公室'(2)创建存储过程,根据每个员工的学历将收入提高500元。
alter proc SA_IN@enu char(6)asbeginupdate Salaryset InCome=InCome+500from Salary,Employeeswhere Employees.EmployeeID=Salary.EmployeeID and Education=@enuendselect InComefrom Salary,Employeeswhere Salary.EmployeeID=Employees.EmployeeID and Education='本科'goexec dbo.sa_in'本科'goselect InComefrom Salary,Employeeswhere Salary.EmployeeID=Employees.EmployeeID and Education='本科'select InComefrom Salary,Employeeswhere Salary.EmployeeID=Employees.EmployeeID and Education='本科'(3)创建存储过程,使用游标计算本科及以上学历的员工在总员工数中的比例。
declare@edu varchar(10),@part_count int,@all_count int;declare mycursor cursor forselect distinct education,COUNT(education)over(partitionby education)as part_count,COUNT(education)over()as all_countfrom Employeesopen mycursorfetch next frommycursor into@edu,@part_count,@all_countwhile@@FETCH_STATUS=0beginprint@edu+'占总人数比例:'+convert(varchar(100),convert(numeric(38,2),@part_count/1.0/@all_count *100))+'%'fetch next from mycursorinto@edu,@part_count,@all_countendclose mycusordeallocate mycursor(4)使用命令方式修改及删除一个存储过程。
if exists(select workyear from Employees where workyear=3)drop procedure workyear2. 触发器(1)对于YGGL数据库,表Employees的Employeeid列与表Salary的Employeeid列应满足参照完整性规则,请用触发器实现两个表间的参照完整性。
create trigger Salaryins0on Salaryfor insert,updateasbeginif(select employeeid from inserted)not in(select EmployeeID from Employees)rollbackendcreate trigger Employeesupdate0on dbo.Employeesfor updateasbeginupdate Salaryset employeeid=(select employeeid from inserted)where employeeid=(select employeeid from deleted)endcreate trigger Employeesdelete0on Employeesfor deleteasbegindelete from Salarywhere employeeid=(select employeeid from deleted)end(2)当修改表Employees时,若将Employees表中员工的工作时间增加1年,则将收入增加500,若增加2年则增加1000,依次增加。
若工作时间减少则无变化。
create trigger em_workyear on Employeesafter updateasbegindeclare@a int,@b intset@a=(select workyear from inserted)set@b=(select workyear from deleted)if(@a>@b)update Salaryset income=income+(@a-@b)*500where enployeeid in(select EmployeesID from inserted)endupdate Employeesset workyear=12where EmployeesID='000001'(3)创建UPDATE触发器,当Salary表中InCome值增加500时,outCome值则增加50。
create trigger sa_income on Salaryfor update as beginif((select income from inserted)-(select income from deleted)=500) update Salary set outcome=outcome+50where enployeeid=(select enployeeid from inserted)end select income,outcomefrom Salary where enployeeid='000001'(5)创建INSTEAD OF触发器,实现向不可更新视图插入数据。
create view a_viewasselect Employees.EmployeesID,name,workyear,income,outcomefrom Employees,Salarywhere Employees.EmployeesID=Salary.enployeeidgocreate trigger gxston a_viewinstead of insertasbegindeclare@Ei char(6),@name char(10),@wy tinyint,@ic float,@oc float select@Ei=EmployeesID,@name=name,@wy=workyear,@ic=income,@oc=outcome from insertedinsert into Employees(EmployeesID,name,workyear)values(@Ei,@name,@wy) insert into Salary values(@Ei,@ic,@oc)endinsert into a_viewvalues('000011','小芳',3,2000,1500)select*from a_viewwhere EmployeesID='000011'(5)创建DDL触发器,当删除数据库时,提示“无法删除”并回滚删除操作。
create trigger table_delete on database after drop_tableas print'不能删除表'rollback transaction go drop table YGGL实验总结(结论或问题分析):在本次实验中,感觉很难,对触发器和存储过程不是很了解,最后老师讲了,自己通过讲的虽然说做出来了,但是还是有不明白的地方,需要自己在下面复习巩固。