数据库实验上机答案解析整编中国石油大学龚安
中国石油大学数据结构上机实验3
《数据结构》实验报告学号2015011512 姓名胡明禹专业数学与应用数学时间2018.4.3一、实验题目实验3 顺序栈基本操作二、实验目的1.熟练掌握顺序栈的实现和基本操作2.理解栈后进先出的特点3.熟练应用顺序栈解决实际问题三、算法设计分析(一)数据结构的定义数据结构是计算机存储、组织数据的方式。
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
(二)总体设计此处给出主要函数功能、及函数间调用关系的的描述。
例如:①初始化并建立一个新栈表函数②栈清空函数③栈判断是否为空函数④进栈函数⑤出栈函数⑥取栈顶元素函数⑦输出栈元素函数⑧计算栈中元素个数函数⑨销毁栈函数(1)主函数:统筹调用各个函数以实现相应功能void main()(2)①初始化并建立一个新栈表SqStack *InitStack(SqStack *s){int i;s=(SqStack*)malloc(sizeof(SqStack));s->top=-1;printf("输入顺序栈元素(以0结束):\n");scanf("%d",&i);do{s->top++;//栈顶指针增加一s->data[s->top]=i; //将新插入元素赋值给栈顶空间scanf("%d",&i);while(i!=0);printf("成功\n");return s;}②栈清空函数void SetNULL(SqStack *s){//清空栈s->top=-1;//当栈存在一个元素时,top等于0,因此通常把空栈的条件定位top等于-1 }③栈判断是否为空函数int EMPTY(SqStack *s){//判断栈空if(s->top>=0)return 0;else return 1;}④进栈函数SqStack *Push(SqStack *s){//进栈int a;printf("插入数字:");scanf("%d",&a);if(s->top==maxsize-1)//判断是否栈满{printf("overflow");//溢出return NULL;}else{s->top++;//栈顶指针增加1s->data[s->top]=a;//将新插入元素赋值给栈顶空间}return s;}⑤出栈函数SqStack *Pop(SqStack *s){//出栈if(s->top==-1)//当栈存在一个元素时,top等于0,因此通常把空栈的条件定位top等于-1 {printf("underlow");return s;}else{s->top--;//栈顶指针减一printf("删除的栈顶元素:");printf("%d\n",(s->data[s->top+1]));//若栈不为空,则删除s的栈顶元素}return s;}⑥取栈顶元素函数void GetTop(SqStack *s){//取栈顶if(s->top==-1){printf("SqStack is empty");//当栈存在一个元素时,top等于0,因此通常把空栈的条件定位top 等于-1}else{printf("当前栈顶元素是:");printf("%d\n",(s->data[s->top]));//取栈顶元素地址}}⑦输出栈元素函数void print(SqStack *s){//输出栈int i=0;if(s->top==-1){printf("成功!");}while(i<=s->top){//遍历栈中所有元素printf("%d ",s->data[i]);i++;}}⑧计算栈中元素个数函数void Count(SqStack *s){//计算栈中元素int i=0;while(i<=s->top){i++;}printf("个数为%d",i);}⑨销毁栈函数int DestroyStack_Sq(SqStack *s){ //销毁一个顺序栈Sfree(s);s=NULL;return 1;}四、实验测试结果及结果分析(一)测试结果(此处给出程序运行截图)(二)结果分析成功完成了题目所要求的插入,删除,查找等基本操作。
数据库张上机实验点评及参考答案
上机实验三——基本表的建立和修改三、实习内容:1.启动 MSSQL Server 服务,打开 Enterprise Manager和 Query Analyzer 。
2.在 Query Analyzer 中用 CREATE TABLE命令在实验二创建的 GradeManager 数据库中定义基本表:学生表(Student )、课程表(Course ),利用 EnterpriseManager 的图形化功能建立班级表(Class )以及成绩表( Grade)。
create table Student( Sno char(7) primary key ,Sname varchar(20) not null ,Ssex char(2) not null,Sage Smallint ,Clno char(5)not null);create table Class( Clno char(5) primary key,Speciality varchar(20) not null,Inyear char(4) not null,Number integer ,Monitor char(7) );create table Course(Cno char(1) primary key,Cname varchar(20) not null,Credit Smallint );create table Grade(Sno char(7) references student(sno),Cno char(1) references course(cno),Gmark numeric,Primary key(sno,cno));四、针对以上四个表,用SQL语言完成以下各项操作。
①给学生表增加一属性Nation (民族),数据类型为Varchar(20);②删除学生表中新增的属性Nation ;③向成绩表中插入记录(”2001110”,”3,”80);④修改学号为”2001110”的学生的成绩为70 分;⑤删除学号为”2001110”的学生的成绩记录;⑥为学生表创建一个名为IX_Class的索引。
数据库原理及应用书后上机实验答案
数据库原理及应用——崔巍_书后上机实验程序源代码:--1CREATE DATABASE test1ON(NAME=test1_dat,FILENAME='f:\DB\data\test1dat.mdf',SIZE= 10,MAXSIZE= 50,FILEGROWTH= 5 )LOG ON(NAME=order_log,FILENAME='f:\DB\data\test1log.ldf',SIZE= 5MB,MAXSIZE= 25MB,FILEGROWTH= 5MB)--2create database test2onprimary(name=test2_dat1,filename='f:\DB\data\test2dat1.mdf'),(name=test2_dat2,filename='f:\DB\data\test2dat2.ndf'),(name=test2_dat3,filename='f:\DB\data\test2dat3.ndf')log on(name=test2_log1,filename='f:\DB\data\test2log1.ldf'),(name=test2_log2,filename='f:\DB\data\test2log2.ldf')--3create database test3onprimary(name=test3_dat1,filename='f:\DB\data\test3dat1.mdf'),(name=test3_dat2,filename='f:\DB\data\test3dat2.mdf'),filegroupg2(name=test3_dat3,filename='d:\DB\data\test3dat3.ndf'),(name=test3_dat4,filename='d:\DB\data\test3dat4.ndf'),filegroupg3(name=test3_dat5,filename='e:\DB\data\test3dat5.ndf'),(name=test3_dat6,filename='e:\DB\data\test3dat6.ndf')log on(name=test3_log,filename='f:\DB\data\test3log.ldf')--4alter database test1add file(name=test1new_dat,filename='f:\DB\data\test1newdat.ndf',size=5MB)--5alter database test1modify file(name=test1_dat,size=15MB)--6dropdatabasetest3四、实验数据、结果分析:若没有指定size,则默认为1MB,没有指定Maxsize,文件可以增长到磁盘满为止,没有指定Filegrowth,则默认为10%。
数据库实验答案分析总结.doc
数据库实验答案分析总结实验实验一熟悉SQLSERVER龄Sage所在系Sdept95001李勇男份。
selectsname,龄降序排列。
select*fromstudentorderbysdept,sagedesc8.计算2号课程的平均成绩。
selectA VG(grade)fromSCwherecno=2;9.查询选修了2号课程的学生的最高成绩。
selectMAX(grade)fromSCwherecno=2;10.求各个课程号及相应的选课人数。
selectcno,COUNT(distinctsno)fromSCgroupbycno11.查询至少选修了3门课程以上的学生序号。
selectsnofromSCgroupbysnohavingCOUNT(*)>=3;12.查询“数据库”的间接先行课。
selectsecond.cpnofromCourseasfirst,Courseassecondwherefirst.cpno=sec ame=数据库;13.查询其他系中比信息系某一学生年龄小的学生的姓名和年龄。
selectdistinctfirst.sname,first.sagefromStudentasfirst,Studentassecondwhe refirst.SageA VG(second.Grade);16.查询至少选修了1号课程和3号课程的学生学号。
(selectsnofromSCwhereCno=1)intersect(selectsnofromSCwhereCno=3);1 7.查询只选修了1号课程和3号课程的学生学号。
selectsnofromSCwhereCno=1andSnoin(selectSnofromSCwhereCno=2an dSnoin(selectSnofromSCgroupbySnohavingCOUNT(sno)=2));18.查询没有选修1号课程的学生姓名。
中国石油大学考试题参考答案
一、单项选择题答题要求:每题只有一个正确的选项。
1分) 2.0以下字符型常量表达不正确的是()A)'ABC''B)[ABC]C)’ABC’D)(ABC)参考答案:D2分) 2.0在数据库中存储的是()A)数据B)数据模型C)数据以及数据之间的联系D)信息参考答案:C3分) 2.0在Visual FoxPro环境下,用LIST STRU命令显示表中每个记录的长度总计为60,用户实际可用字段的总宽度为()A)60B)61C)59D)58参考答案:C4分) 2.0同一个数组中的所有数组元素的数据类型()A)必须相同B)必须不同C)可相同也可不同D)不可改变参考答案:C5分) 2.0在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。
在这几个阶段中,数据独立性最高的是()阶段。
A)数据库系统B)文件系统C)人工管理D)数据项管理参考答案:A6分) 2.0假设一个表包含职工号(C,4)和工资(N,4)两个字段。
要求按工资升序、工资相同者按职工号升序排列,建立索引文件使用的命令是()A)INDEX ON 工资/A,职工号/D TO CNB)SET INDEX ON 工资,职工号TO CNC)INDEX ON STR(工资,4)+职工号TO CND)INDEX ON 工资/A 职工号/A TO CN参考答案:C7分) 2.0设A=”123”,则2*&A的值为()A)'' 2*&A''B)''2&123''C)246D)''2*123''参考答案:C8分) 2.0要判断数值型变量Y是否能够被2整除,错误的条件表达式为()A)MOD(Y,2)=0B)INT(Y/2)=Y/2C)Y%2=0D)INT(Y/2)=MOD(Y,2)参考答案:D9分) 2.0函数运算YEAR(date( ))返回值的类型是()A)逻辑型B)字符型C)备注型D)数值型参考答案:D10分) 2.0由计算机、操作系统、数据库管理系统、数据库、应用程序及用户组成的一个整体叫()A)软件系统B)数据库系统C)管理系统D)文件系统参考答案:B11分) 2.0一个表的全部备注字段的内容存储在()A)同一表备注文件B)不同表备注文件C)同一文本文件D)同一数据库文件参考答案:A12分) 2.0COPY TO命令的功能是()A)复制表结构和表中数据B)只复制表结构C)只复制表中数据D)以上都不对参考答案:A13分) 2.0按照传统的数据模型分类,数据库可分为三种类型()A)大型、中形和小型B)西文、中文和兼容C)层次、网状和关系D)数据、图形和多媒体参考答案:C14分) 2.0Visual FoxPro表文件有100条记录,当前记录号是11,执行命令LIST后,记录指针将指向()A)第1条记录B)第100条记录C)第101条记录D)文件结束标识位置参考答案:D15分) 0将打开的表中全部记录删除的命令为ZAP,与之等价的命令是()A)DELETE ALLB)DELETE ALL PACKC)DELETE PACKD)RECALL ALL参考答案:B16分) 2.0若要在表中真正删除记录,先用DELETE命令,再用()A)RECALLB)PACKC)按ESC键D)不用其他命令参考答案:B17分) 2.0在Visual FoxPro中,用INDEX命令建立索引文件时,<关键字表达式>应该是()A)只能由一个数值型字段组成B)可以由多个字段组成,但表达式的值必须是数值型、字符型、日期型、逻辑型C)只能是由数值型和字符型字段组成的合法表达式D)任意字段组成的合法表达式参考答案:B18分) 2.0函数SUBSTR(“”,3,2)的结果是()A)23B)34C)12D)6参考答案:B19分) 2.0在SQL中,从数据库中删除表可以用()A)DROP SCHEMA命令B)DROP TABLE命令C)DROP VIEW命令D)DROP INDEX命令参考答案:B20分) 2.0职工表及姓名索引文件都打开后,用FIND命令把指针指向姓“王”的记录,使指针指向下一个同姓记录的命令是()A)GOTO NEXTB)CONTINUEC)SKIPD)FIND 王参考答案:C二、判断题答题要求:判断下列说法是否正确。
中国石油大学数据结构上机实验
《数据结构》实验报告学号2015011512 姓名胡明禹专业数学与应用数学时间2018.4.24一、实验题目实验5 稀疏矩阵的转置二、实验目的1. 稀疏矩阵的压缩存储方法2. 掌握稀疏矩阵的转置算法三、算法设计分析(一)实验内容1.从键盘输入数据,建立稀疏矩阵的三元组顺序存储2.实现稀疏矩阵的转置算法3.输出原矩阵及转置后的矩阵4.实现矩阵的快速转置算法(二)总体设计此处给出主要函数功能、及函数间调用关系的的描述。
例如:①创建稀疏矩阵函数②转置矩阵T函数③快速转置函数④输出函数⑤输出原矩阵和转置函数其功能描述如下:(1)主函数:统筹调用各个函数以实现相应功能Status main()(2)①创建稀疏矩阵函数Status CreateSMatrix(TSMatrix &M){printf("请输入原矩阵:\n");printf("行数、列数:");scanf("%d%d", &M.mu, &M.nu);printf("元素总数:");scanf("%d", &M.tu);printf("输入各个对应压缩值:\n");for (int i = 1; i <= M.tu; ++i)scanf("%d%d%d", &M.data[i].i, &M.data[i].j, &M.data[i].e); return OK;}②转置矩阵T函数Status TransposeSMatrix(TSMatrix M, TSMatrix &T){ int p, q, col;T.mu = M.nu; T.nu = M.mu; T.tu = M.tu;if (T.tu){q = 1;for (col = 1; col <= M.nu; ++col)for (p = 1; p <= M.tu; ++p)if (M.data[p].j == col){T.data[q].i = M.data[p].j;T.data[q].j = M.data[p].i;T.data[q].e = M.data[p].e;++q;}}printf("\n\n稀疏矩阵M转置成功。
中国石油大学华东数据库实验八龚安
实验八数据库应用编程1.查阅资料,了解并理解数据库的数据访问接口技术,如:ODBC、JDBC、OLE DB、ADO、等,并形成一个简要的数据访问接口技术总结;所谓访问接口是指分布式环境中保证操作系统、通信协议、数据库等之间进行对话、互操作的软件系统。
访问接口的作用是保证网络中各部件(软件和硬件)之间透明地连接,即隐藏网络部件的异构性,尤其保证不同网络、不同DBMS和某些访问语言的透明性,即下面三个透明性。
⑴网络透明性:能支持所有类型的网络。
⑵服务器透明性:不管服务器上的DBMS是何种型号(ORACLE、SYBASE、DB2等),一个好的访问接口都能通过标准的SQL语言与不同DBMS上的SQL语言连接起来。
⑶语言透明性:客户机可用任何开发语言进行发送请求和接受回答,被调用的功能应该像语言那样也是独立的。
ODBC:Mcrosoft推出的ODBC(Open Database Connectivity)技术为异质数据库的访问提供了统一的接口。
ODBC基于SQL(Structured Query Language),并把它作为访问数据库的标准。
这个接口提供了最大限度的相互可操作性:一个应用程序可以通过一组通用的代码访问不同的数据库管理系统。
一个软件开发者开发的客户/服务器应用程序不会被束定于某个特定的数据库之上。
ODBC可以为不同的数据库提供相应的驱动程序。
ODBC的灵活性表现在以下几个方面:应用程序不会受制于某种专用的APISQL语句以源代码的方式直接嵌入在应用程序中应用程序可以以自己的格式接收和发送数据ODBC的设计完全和ISO Call-Level Interface兼容一些与ODBC有关的名词:ODBC驱动程序:是一个动态链接库(DLL),用以将特定的开放式数据库连接的数据源和另一个应用程序(客户端)相连接。
ODBC数据源:作为数据源使用的数据库或数据库服务器。
ODBC数据源通过它们的数据源名称来引用,或者通过具体引用ODBC驱动程序和服务器名称来引用。
数据库系统原理实验报告册(带答案)
河南工程学院计算机科学与工程系数据库系统原理实验报告册学期:课程:专业:班级:学号:姓名:指导教师:目录实验一 SQL Server 2000安装、数据库创建及管理 (1)一、实验学时 (1)二、实验目的 (1)三、实验内容 (1)四、实验要求 (13)五、代码清单 (13)六、实验中出现的问题及解决的方法 (15)七、思考讨论题或体会或对改进实验的建议 (16)实验二表和表数据的操作 (17)一、实验学时 (17)二、实验目的 (17)三、实验内容 (17)四、实验要求 (22)五、代码清单 (22)六、实验中出现的问题及解决的方法 (24)七、思考讨论题或体会或对改进实验的建议 (25)实验三索引和视图 (26)一、实验学时 (26)二、实验目的 (26)三、实验内容 (26)四、实验要求 (31)五、代码清单 (31)六、实验中出现的问题及解决的方法 (33)七、思考讨论题或体会或对改进实验的建议 (34)实验四 T-SQL程序设计 (35)一、实验学时 (35)二、实验目的 (35)三、实验内容 (35)四、实验要求 (39)五、代码清单 (39)六、实验中出现的问题及解决的方法 (41)七、思考讨论题或体会或对改进实验的建议 (42)实验五数据库安全性 (43)一、实验学时 (43)二、实验目的 (43)三、实验内容 (43)四、实验要求 (46)五、代码清单 (47)六、实验中出现的问题及解决的方法 (49)七、思考讨论题或体会或对改进实验的建议 (49)实验六数据库完整性 (51)一、实验学时 (51)二、实验目的 (51)三、实验内容 (51)四、实验要求 (54)五、代码清单 (54)六、实验中出现的问题及解决的方法 (56)七、思考讨论题或体会或对改进实验的建议 (57)实验一 SQL Server 2000安装、数据库创建及管理一、实验学时:2学时二、实验目的(1)了解安装SQL Server2000的硬件和软件环境。
数据库课后习题参考答案与解析.doc
第1章数据概述一.选择题1.下列关于数据库管理系统的说法,错误的是CA.数据库管理系统与操作系统有关,操作系统的类型决定了能够运行的数据库管理系统的类型B.数据库管理系统对数据库文件的访问必须经过操作系统实现才能实现C.数据库应用程序可以不经过数据库管理系统而直接读取数据库文件D.数据库管理系统对用户隐藏了数据库文件的存放位置和文件名2.下列关于用文件管理数据的说法,错误的是DA.用文件管理数据,难以提供应用程序对数据的独立性B.当存储数据的文件名发生变化时,必须修改访问数据文件的应用程序C.用文件存储数据的方式难以实现数据访问的安全控制D.将相关的数据存储在一个文件中,有利于用户对数据进行分类,因此也可以加快用户操作数据的效率3.下列说法中,不属于数据库管理系统特征的是CA.提供了应用程序和数据的独立性B.所有的数据作为一个整体考虑,因此是相互关联的数据的集合C.用户访问数据时,需要知道存储数据的文件的物理信息D.能够保证数据库数据的可靠性,即使在存储数据的硬盘出现故障时,也能防止数据丢失5.在数据库系统中,数据库管理系统和操作系统之间的关系是DA.相互调用B.数据库管理系统调用操作系统C.操作系统调用数据库管理系统D.并发运行6.数据库系统的物理独立性是指DA.不会因为数据的变化而影响应用程序B.不会因为数据存储结构的变化而影响应用程序C.不会因为数据存储策略的变化而影响数据的存储结构D.不会因为数据逻辑结构的变化而影响应用程序7.数据库管理系统是数据库系统的核心,它负责有效地组织、存储和管理数据,它位于用户和操作系统之间,属于AA.系统软件B.工具软件C.应用软件D.数据软件8.数据库系统是由若干部分组成的。
下列不属于数据库系统组成部分的是B A.数据库B.操作系统C.应用程序D.数据库管理系统9.下列关于客户/服务器结构和文件服务器结构的描述,错误的是DA.客户/服务器结构将数据库存储在服务器端,文件服务器结构将数据存储在客户端B.客户/服务器结构返回给客户端的是处理后的结果数据,文件服务器结构返回给客户端的是包含客户所需数据的文件C.客户/服务器结构比文件服务器结构的网络开销小D.客户/服务器结构可以提供数据共享功能,而用文件服务器结构存储的数据不能共享数据库是相互关联的数据的集合,它用综合的方法组织数据,具有较小的数据冗余,可供多个用户共享,具有较高的数据独立性,具有安全控制机制,能够保证数据的安全、可靠,允许并发地使用数据库,能有效、及时地处理数据,并能保证数据的一致性和完整性。
中国石油大学华东数据库实验七龚安
实验七安全机制1.理解登录、用户、架构、角色、权限的概念,在Enterprise Manager 里浏览SQL Server 2005中存在的登录名、用户、架构、角色和权限,形成一个总结。
2.利用Query Analyzer完成以下操作:⑴建立采油一矿的作业项目的视图,把该视图的查询权限授予给采油一矿的用户user11,以user11的身份查询该视图,观察执行情况;再以其他用户的身份查询该视图,观察执行情况。
create view caiyouyikuangshituasselect zuoyexiangmuhao,yusuandnawei,jinghao,yusuanjine,yusuanren,yusuanriqi,kaigongriqi,wangongriqi,shigongdanweimingcheng,shigongneirong,cailiaofei,rengongfei,shebeifei ,qitafei,jiesuanjine,jiesuanren,jiesuanriqi,jingbie,danweimingchengfrom xiangmubiao,youshuijingbiao,danweidaimabiaowhere yusuandanwei=youshuijingbiao.danweidaima and yusuandanwei=danweidaimabiao.danweidaima;CREATE LOGIN user01 WITH PASSWORD='12345';CREATE USER user11 FOR LOGIN user01;grant selecton caiyouyikuangshituto user11;⑵创建一个用户user12,以user12的身份执行实验六中所定义的存储过程,观察记录是否成功执行;然后把该存储过程的执行权限授予给user12,再次以user12的身份执行该存储过程,观察记录是否成功执行。
《数据库原理与应用》实验题目及答案
《数据库原理与应用》实验题目及答案《数据库原理与应用》实验作业布置实验1 数据库的建立修改与删除完成以下实验报告:《数据库原理与应用》实验报告实验1 数据库的建立修改与删除二、实验环境操作系统:Windows XP。
数据库管理系统:MS SQL Server 2000 或MS SQL Server 2008。
三、实验目的1.熟悉SQL Server 2000上机环境,学会SQL Server 2000“企业管理器”以及“查询分析器”的启动与退出;或熟悉MS SQL Server 2008上机环境,学会SQL Server Management Studio的启动与退出。
2.掌握建立数据库的两种方法。
3.掌握查看和修改数据库的两种方法。
4.掌握删除数据库的两种方法。
四、实验内容(一) 规定内容1. 在用户方便的存储空间上建立存放用户数据库的文件夹。
本实验在D盘根目录下建立文件夹:D:\SQL2000DB,再建立存放T_SQL 源代码的文件夹:D:\SQL2000DB\T_SQL 2.利用企业管理器创建学生课程数据库ST,参数如表1.1所示。
3.利用企业管理器查看ST数据库的属性。
4.使用T-SQL语句建立学生-课程数据库ST,参数如表1.1所示。
5.使用T-SQL语句建立数据库JXDB,参数如表1.2所示。
6.使用T-SQL语句为数据库JXDB添加文件组JX_Group2,并为此文件组添加1个数据文件JXDB_Data4;添加1个日志文件JXDB_log1。
参数由用户自己设定。
7.使用T-SQL语句修改数据库JXDB中次数据文件JXDB_Data4的属性:文件初始大小改为5M,增长方式改为每次按20%增长。
删除日志文件JXDB_log1。
8.使用T-SQL语句删除数据库JXDB。
(二) 自定内容五、出现的问题及解决方法实验2 表结构的建立修改删除及完整性约束条件定义完成以下实验报告:《数据库原理与应用》实验报告一、实验题目实验2 表结构的建立修改删除及完整性约束条件定义二、实验环境操作系统:Windows XP。
中国石油大学《数据库课程设计》
中国石油大学(北京)网络与继续教育学院期末考试《数据库课程设计》学习中心:_________ 姓名:_______ 学号:_______关于课程考试违规作弊的说明1、提交文件中涉嫌抄袭内容(包括抄袭网上、书籍、报刊杂志及其他已有论文),带有明显外校标记,不符合学院要求或学生本人情况,或存在查明出处的内容或其他可疑字样者,判为抄袭,成绩为“0”。
2、两人或两人以上答题内容或用语有50%以上相同者判为雷同,成绩为“0”。
3、所提交试卷或材料没有对老师题目进行作答或提交内容与该课程要求完全不相干者,认定为“白卷”或“错卷”,成绩为“0”。
一、提交一份数据库应用系统的设计报告,内容要求如下:1.从应用系统选题中选择一个管理系统;(选题从以下35题中任选一题)2.概念模型设计(要求用E-R图画出概念模型)⑴确定实体及其主码、属性;⑵确定类型的类型及其属性;3.逻辑结构设计⑴定义数据库中表的所有属性及其类型、宽度;⑵定义关系模式及其主码、外部码;⑶定义视图,说明每个视图的作用;4.行为设计⑴标明查询文件的内容;⑵标明表单文件的作用;⑶标明报表文件的输出内容;二、题目14、房屋中介公司售房信息系统数据库主要包括如下内容:现有房源情况、买卖房屋者的基本情况、交易情况等。
该系统需实现三个主要功能:各种信息的维护、各种信息的查询、各种信息的统计。
数据库主要包括如下内容:现有房源情况、买卖房屋者的基本情况、交易情况等。
该系统需实现三个主要功能:各种信息的维护、各种信息的查询、各种信息的统计。
一、概念模型设计(1)合并各分E-R图,消除属性冲突、命名冲突、结构冲突等三类冲突,得到初步 E-R 图,再消除不必要冗余,得到的基本 E-R 图如下所示:(2)各 E-R 图各实体的属性如下所示:房源:房源( 编号,城区,环境,付款,来源,委托,产权,状态 )客源:客源( 客户编号,客户姓名,客户电话,电子邮箱,客户地址,具体位置,产权性质,最低购价,最高购价,最小面积,最大面积,委托日期,截止日期,录入人员,当前状态 )职员:职员( 职员编号, 姓名,性别,身份证号,学历,职务,所在部门,出生日期,联系电话,联系电话,家庭住址,电子邮箱,备注,简历 )各E-R 图中联系的属性如下所示:销售信息:销售信息 ( 售房编号,编号,具体位置,配套环境,房,厅,土地性质,产权性质,价格,产权名称,产权编号,业主姓名,业主电话,联系人,联系电话,委托日期,截止日期,录入人员,当前状态,备注 )二、逻辑结构设计关系模式房源信息,客源信息不存在非主属性对主属性的部分函数依赖,也不存在传递函数依赖,已经达到了 3NF,但是购房信息,租房信息中存在着一些数据冗余。
中国石油大学(华东)《数据库原理》期末考试拓展学习
2、数据库系统的三级模式及二级映象体系结构
3、E-R图的三要素
三、思考与练习
1、数据管理技术发展的三个阶段及特点
2、数据库系统的特点
3、数据库系统与文件系统的根本区别
4、数据模型的三要素及作用
5、数据的物理对立性和逻辑独立性
6、数据库系统的三级模式
备 注
第二章 关系数据库
5、能够使用关系代数运算完成个种操作
【重点掌握】
1、关系模型的三个组成部分及作用
2、牢固关系数据结构及形式化定义
3、关系的三类完整性约束
4、关系代数的选择,投影,连接运算
四、思考与练习
1、举例说明什么是关系的参照完整性
2、关系及其性质
备 注
第三章 关系数据库标准语言SQL
学时要求
6学时
主要内容
本章详细介绍了关系数据库语言SQL,SQL是关系数据库的标准语言,是学习关系数据库概念和技术的重要组成部分
2、DBMS完整性控制的三个方面
3、事物的基本概念和ACID特性
4、并发操作带来的数据不一致性
5、死、活锁
6、封锁协议
【重点掌握】
1、并发操作带来的3类数据不一致性
2、实现数据库安全性常用的方法和技术
3、事物的基本概念和ACID特性
三、思考与练习
1、为什么要进行并发控制
1、牢记基本概念
2、熟悉典型系统(如ACCESS,SQL SERVE ORACLE等)
3、掌握设计方法
4、熟悉典型例题
5、解决挑战问题
各章节主要学习内容及要求
第一章绪论
学时要求
4学时
主要内容
本章阐述了数据库的基本概念、介绍了数据管理技术的进展、数据库系统的组成以及数据库技术的主要领域
数据库实验上机答案解析整编中国石油大学龚安
数据库实验上机答案解析整编中国石油大学龚安实验四SQL练习2一、实验目的1.掌握索引的建立、删除及使用;2.掌握单表查询、连接查询、嵌套查询和集合查询;3.掌握插入数据、修改数据和删除数据语句的非常用形式。
二、实验学时2学时三、实验内容1.利用Query Analyzer完成以下操作:⑴在预算日期、结算日期和入账日期上分别建立索引,并在查询操作中体会索引的作用。
⑵在完成第2题的查询操作后,删除预算日期、结算日期和入账日期上的索引。
2.利用Query Analyzer完成以下操作:⑴采油一矿二队2016-5-1到2016-5-28有哪些项目完成了预算,列出相应明细。
⑵采油一矿二队2016-5-1到2016-5-28有哪些项目完成了结算,列出相应明细。
⑶采油一矿二队2016-5-1到2016-5-28有哪些项目完成了结算,列出相应的材料费消耗明细。
⑷采油一矿二队2016-5-1到2016-5-28有哪些项目完成了入账,列出相应明细。
⑸列出采油一矿二队2016-5-1到2016-5-28总的预算金额。
⑹列出采油一矿二队2016-5-1到2016-5-28总的结算金额。
⑺列出采油一矿二队2016-5-1到2016-5-28总的入账金额。
⑻列出采油一矿2016-5-1到2016-5-28总的入账金额。
⑼有哪些人员参与了入账操作。
⑽列出2016-5-1到2016-5-28进行了结算但未入账的项目。
⑾列出采油一矿二队的所有项目,按入账金额从高到低排列。
⑿列出有哪些施工单位实施了项目,并计算各单位所有项目结算金额总和。
⒀找出消耗了材料三且消耗超过了2000元的项目,列出相应消耗明细(利用子查询)。
⒁作业公司二队参与了哪些项目。
⒂作业公司一队和二队参与了哪些项目(利用union)。
⒃采油一矿的油井是哪些作业队参与施工的。
3.利用Query Analyzer完成以下操作:⑴建立数据表(包含3个属性列:★施工单位、★年月、◆结算金额)保存各个施工单位每月的结算金额总和。
数据库原理及应用最全上机实验及实验答案
实验一 SQL Server 2005 的安装和环境介绍一.实验目的与要求:1.掌握SQL Server 2005 服务器的安装方法2.了解SQL Server 2005 的环境3.了解数据库及其对象二.实验准备1.了解SQL Server 2005的版本2.了解SQL Server 2005各版本对硬件和软件的需求三.实验要求1.写出SQL SERVER 2005的功能与特点, 使用方法, 应用状况的报告2.完成SQL SERVER 2005的安装、启动、登录。
四.实验内容1.安装SQL Server 2005实验一 SQL Server 2005 的安装和环境介绍●实验指导——安装SQL Server 20051.根据安装机器软硬件的要求,选择一个合适的版本,以下以开发版为例2.将 SQL Server 2005 DVD 插入 DVD 驱动器。
如果DVD驱动器的自动运行功能无法启动安装程序无法启动安装程序,请导航到 DVD 的根目录然后启动splash.hta。
3.在自动运行的对话框中,单击“运行 SQL Server 安装向导”。
4.在“最终用户许可协议”页上,阅读许可协议,再选中相应的复选框以接受许可条款和条件。
接受许可协议后即可激活“下一步”按钮。
若要继续,请单击“下一步”若要结束安装程序,请单击“取消”。
如下图:5.在“SQL Server 组件更新”页上,安装程序将安装 SQL Server 2005 的必需软件。
有关组件要求的详细信息,请单击该页底部的“帮助”按钮。
若要开始执行组件更新,请单击“安装”。
更新完成之后若要继续,请单击“完成”。
6.在 SQL Server 安装向导的“欢迎”页上,单击“下一步”以继续安装。
7.在“系统配置检查 (SCC)”页上,将扫描安装计算机,以检查是否存在可能妨碍安装程序的条件。
8.在“注册信息”页上的“姓名”和“公司”文本框中,输入相应的信息。
数据库系统原理实验一参考答案
)
GO
(4)分别对4个表插入表数据(INSERT)
INSERT
INTOdepts
VALUES('D01','自动化')
INSERT
INTOdepts
VALUES('D02','计算机')
INSERT
INTOdepts
VALUES('D03','数学')
INSERT
INTOdepts
VALUES('D04','通信')
INSERT
INTOdepts
VALUES('D05','电子')
INSERT
INTOdepts
VALUES('D06','化学')
SELECT*
FROMDepts
INSERT
INTOStudents
(A)若先建立学生(Students)表,后建立系(Depts)表,行吗?为什么?
答:不行,对Students的Dno作外键约束,必须引用到Depts表的主键Dno。必须先建立系(Depts)表,后才能建立学生(Students)表。
(B)若先建立选课(Reports)表,后建立课程(Courses)表,行吗?为什么?
(
NAME='Students_Log',
FILENAME='E:\ SQL_DATEBASE \Students_Mis_log.ldf',
中国石油大学(北京)《数据库原理及应用》123次作业
第一次在线作业单选题 (共40道题)1.(2.5分)数据库的概念模式独立于()•A、具体的机器和DBMS•B、E-R图•C、信息世界•D、现实世界我的答案:A 此题得分:2.5分2.(2.5分)数据库是在计算机系统中按照一定的数据模型组织、存储和应用的()•A、文件的集合•B、数据的集合•C、命令的集合•D、程序的集合我的答案:B 此题得分:2.5分3.(2.5分)支持数据库各种操作的软件系统称为()•A、命令系统•B、数据库管理系统•C、数据库系统•D、操作系统我的答案:B 此题得分:2.5分4.(2.5分)由DBMS、数据库、数据库管理员、应用程序及用户等组成的一个整体称为()•A、文件系统•B、数据库系统•C、软件系统•D、数据库管理系统我的答案:B 此题得分:2.5分5.(2.5分)数据库系统与文件系统的主要区别是()•A、数据库系统复杂,而文件系统简单•B、文件系统不能解决数据冗余和数据独立性问题,而数据库系统可以解决•C、文件系统只能管理程序文件,而数据库系统能够管理各种类型的文件•D、文件系统管理的数据量较少,而数据库系统可以管理庞大的数据量我的答案:B 此题得分:2.5分6.(2.5分)数据库的基本特点是()•A、(1)数据可以共享(或数据结构化)(2)数据独立性(3)数据冗余大,易移植(4)统一管理和控制•B、(1)数据可以共享(或数据结构化)(2)数据独立性(3)数据冗余小,易扩充(4)统一管理和控制•C、(1)数据可以共享(或数据结构化)(2)数据互换性(3)数据冗余小,易扩充(4)统一管理和控制•D、(1)数据非结构化(2)数据独立性(3)数据冗余小,易扩充(4)统一管理和控制我的答案:B 此题得分:2.5分7.(2.5分)在数据库中,下列说法()是不正确的。
•A、数据库避免了一切数据的重复•B、若系统是完全可以控制的,则系统可确保更新时的一致性•C、数据库中的数据可以共享•D、数据库减少了数据冗余我的答案:A 此题得分:2.5分8.(2.5分)()是存储在计算机内有结构的数据的集合。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四SQL练习2一、实验目的1.掌握索引的建立、删除及使用;2.掌握单表查询、连接查询、嵌套查询和集合查询;3.掌握插入数据、修改数据和删除数据语句的非常用形式。
二、实验学时2学时三、实验内容1.利用Query Analyzer完成以下操作:⑴在预算日期、结算日期和入账日期上分别建立索引,并在查询操作中体会索引的作用。
⑵在完成第2题的查询操作后,删除预算日期、结算日期和入账日期上的索引。
2.利用Query Analyzer完成以下操作:⑴采油一矿二队2016-5-1到2016-5-28有哪些项目完成了预算,列出相应明细。
⑵采油一矿二队2016-5-1到2016-5-28有哪些项目完成了结算,列出相应明细。
⑶采油一矿二队2016-5-1到2016-5-28有哪些项目完成了结算,列出相应的材料费消耗明细。
⑷采油一矿二队2016-5-1到2016-5-28有哪些项目完成了入账,列出相应明细。
⑸列出采油一矿二队2016-5-1到2016-5-28总的预算金额。
⑹列出采油一矿二队2016-5-1到2016-5-28总的结算金额。
⑺列出采油一矿二队2016-5-1到2016-5-28总的入账金额。
⑻列出采油一矿2016-5-1到2016-5-28总的入账金额。
⑼有哪些人员参与了入账操作。
⑽列出2016-5-1到2016-5-28进行了结算但未入账的项目。
⑾列出采油一矿二队的所有项目,按入账金额从高到低排列。
⑿列出有哪些施工单位实施了项目,并计算各单位所有项目结算金额总和。
⒀找出消耗了材料三且消耗超过了2000元的项目,列出相应消耗明细(利用子查询)。
⒁作业公司二队参与了哪些项目。
⒂作业公司一队和二队参与了哪些项目(利用union)。
⒃采油一矿的油井是哪些作业队参与施工的。
3.利用Query Analyzer完成以下操作:⑴建立数据表(包含3个属性列:★施工单位、★年月、◆结算金额)保存各个施工单位每月的结算金额总和。
⑵用子查询将各个施工单位每月的结算金额总和插入到所建立的数据表中。
⑶用带子查询的修改语句将采油一矿油井作业项目的结算人改为“李兵”。
⑷用带子查询的删除语句删除采油一矿油井作业项目。
⑸撤消上述两个操作。
四、实验报告提交实验内容中用SQL语句完成的题目的SQL语句文档及相应的执行结果。
实验五SQL练习3一、实验目的1.掌握基本表的删除与修改;2.掌握实体完整性、参照完整性和用户定义的完整性的定义、检查和违约处理;3.掌握视图的定义、查询和更新,了解视图的作用。
二、实验学时2学时三、实验内容1.利用Query Analyzer完成以下操作:⑴向在实验四中所定义的数据表增加“备注”列,其数据类型为字符型,并查看新增列的值。
⑵对上述数据表增加主码约束条件,并观察在数据表中存在数据的情况下主码约束是否创建成功,然后再次执行实验四中实验内容3.2的操作,并观察记录执行结果。
⑶删除上述数据表中的数据,然后再删除该数据表,对这两个操作进行比较。
2.利用Query Analyzer完成以下任务:⑴对实验三中所定义的6个数据表增加主码约束条件,并观察在数据表中存在数据的情况下主码约束是否创建成功,然后执行以下2个操作,观察并记录实体完整性的检查和违约处理。
①insert into 材料费表values('zy2016001','wm004',100,10)②insert into 材料费表values('zy2016002',NULL,200,10)注:“材料费表”根据自己所命名的表名进行相应的替换。
⑵对实验三中所定义的6个数据表增加相应的参照完整性约束,并观察在数据表中存在数据的情况下参照完整性约束是否创建成功,然后执行以下操作,观察并记录参照完整性的检查和违约处理。
①将(y007 油井112203002)插入到油水井表。
②insert into 材料费表values('zy2016007','wm006',100,10)③将作业项目编号zy2016001的施工单位修改为“作业公司作业五队”。
④将单位代码表中的(112202002 采油二矿二队)删除,查看油水井表和作业项目表中的数据有何变化。
⑤将物码表中的(wm004 材料四袋)修改为(wm04 材料四袋)。
⑥撤销上述成功的更新操作。
注:“材料费表”根据自己所命名的表名进行相应的替换。
⑶对实验三中所定义的6个数据表按以下要求增加相应的完整性约束条件,并观察在数据表中存在数据的情况下完整性约束是否创建成功。
①单位代码表的单位名称不能取空值、且取值唯一。
②油水井表的井别只允许取“油井”或“水井”,单位代码不能取空值。
③物码表的名称规格不能取空值、且取值唯一,计量单位不能取空值。
④材料费表的消耗数量不能取空值,单价不能取空值。
⑤对作业项目表根据实际应用的要求定义适当的用户定义的完整性约束条件。
3.利用Query Analyzer完成以下操作:⑴定义一个视图,用于保存作业项目表和材料费表的全部列。
⑵查询上面定义的视图,可任意组合查询条件,构造出2个查询。
⑶定义一个反映作业项目预算状态的视图,并向该视图插入('zy2016008','112202002','y005',10000,'张三', '2016-07-02'),查看作业项目表的数据有何变化。
⑷撤销上述成功的更新操作。
四、实验报告提交实验内容中用SQL语句完成的题目的SQL语句文档及相应的执行结果。
实验六其它数据库对象的管理一、实验目的1.掌握事务的概念、性质、定义及使用;2.掌握游标的概念、组成、创建及使用;3.掌握存储过程的概念、类型、特点、创建、执行及管理。
4.掌握触发器的概念、创建、管理及使用。
二、实验学时2学时三、实验内容1.利用Query Analyzer进行如下事务处理练习(把下列五条语句作为一个事务处理,只有五条语句全部成功执行才做提交,并给出成功的提示信息;否则就做回退处理,并给出具体的错误提示信息):insert into 作业项目表values('zy2016006','112202002','y005',10000,'张三', '07-01-2016' ,'07-04-2016','07-25-2016','作业公司作业一队','堵漏',7000,2500,1000,1400,11900,'李四','07-26-2016',11900,'王五','07-28-2016')insert into 材料费表values('zy2016006','wm001',200,10)insert into 材料费表values('zy2016006','wm002',200,10)insert into 材料费表values('zy2016006','wm003',200,10)insert into 材料费表values('zy2016006','wm004',100,10)注:“作业项目表”、“材料费表”根据自己所命名的表名进行相应的替换。
2.利用Query Analyzer进行如下游标练习:定义一个游标,用于存放作业项目表的全部行数据,并打印以下表头和各行数据。
表头:单据号预算单位井号预算金额预算人预算日期开工日期完工日期施工单位施工内容材料费人工费设备费其它费用结算金额结算人结算日期入账金额入账人入账日期执行以上所定义的游标,查看是否能正确输出结果。
3.利用Query Analyzer定义一个存储过程,要求完成以下功能:生成某单位(单位可以是采油厂或采油矿或采油队)某段时间内的成本运行情况(输入参数:单位代码起始日期结束日期)。
输出格式***单位**时间---**时间成本运行情况预算金额结算金额入账金额未结算金额未入账金额****.** ****.** ****.** ****.** ****.**其中:未结算金额=预算金额-结算金额未入账金额=结算金额-入账金额分三种情况(单位分别为:采油厂、采油矿、采油队)执行以上定义的存储过程,查看执行输出结果。
4.利用Query Analyzer针对作业项目表定义三个触发器,分别完成以下功能:⑴对作业项目表插入一行数据时,自动计算并插入结算金额字段(结算金额=材料费+人工费+设备费+其它费用)。
⑵当修改作业表的某行数据时自动修改结算金额字段。
⑶当删除作业表中一行数据时,自动删除材料费表中相应明细数据。
⑷对上述3个触发器用适当的更新语句进行验证,并查看结果是否达到预期结果。
四、实验报告提交实验内容中用SQL语句完成的题目的SQL语句文档及相应的执行结果。
实验七安全机制2.利用Query Analyzer完成以下操作:⑴建立采油一矿的作业项目的视图,把该视图的查询权限授予给采油一矿的用户user11,以user11的身份查询该视图,观察执行情况;再以其他用户的身份查询该视图,观察执行情况。
⑵创建一个用户user12,以user12的身份执行实验六中所定义的存储过程,观察记录是否成功执行;然后把该存储过程的执行权限授予给user12,再次以user12的身份执行该存储过程,观察记录是否成功执行。
⑶定义触发器,实现只能在工作时间内更新“作业项目表”的数据,然后通过选择不同的时间进行适当的更新操作来验证。
--实验3-----------------------------------------------------------------CREATE TABLE单位代码表(单位代码CHAR(20),单位名称CHAR (20));CREATE TABLE油水井表(井号CHAR(20),井别CHAR(20),单位代码CHAR(20));CREATE TABLE施工单位表(施工单位名称CHAR(20));CREATE TABLE物码表(物码CHAR(20),名称规格CHAR(20),计量单位CHAR(20));create table材料费表(单据号CHAR(20),物码CHAR(20),消耗数量INT,单价MONEY,);CREATE TABLE作业项目表(单据号CHAR(20),预算单位CHAR(20),井号CHAR(20),预算金额MONEY,预算人CHAR(20),预算日期DATETIME,开工日期DATETIME,完工日期DATETIME,施工单位CHAR(20),施工内容CHAR(20),材料费money,人工费MONEY,设备费MONEY,其他费用money,结算金额MONEY,结算人CHAR(20),结算日期DATETIME,入账金额MONEY,入账人CHAR(10),入账日期DATETIME)-------------------------------------------------------------------------------insert into单位代码表values ('1122','采油厂');insert into单位代码表values ('112201','采油一矿');insert into单位代码表values ('112202','采油二矿');insert into单位代码表values ('112201001','采油一矿一队');insert into单位代码表values ('112201002','采油一矿二队');insert into单位代码表values ('112201003','采油一矿三队');insert into单位代码表values ('112202001','采油二矿一队');insert into油水井表values ('y001','油井','112201001');insert into油水井表values ('y002','油井','112201001');insert into油水井表values ('y003','油井','112201002');insert into油水井表values ('s001','水井','112201002');insert into油水井表values ('y004','油井','112201003');insert into油水井表values ('s002','水井','112202001');insert into油水井表values ('s003','水井','112202001');insert into油水井表values ('y005','油井','112202002');insert into施工单位表values ('作业公司作业一队');insert into施工单位表values ('作业公司作业二队');insert into施工单位表values ('作业公司作业三队');insert into物码表values ('wm001','材料一','吨');insert into物码表values ('wm002','材料二','米');insert into物码表values ('wm003','材料三','桶');insert into物码表values ('wm004','材料四','袋');insert into材料费表(单据号,物码,消耗数量,单价) values ('zy2016001','wm001',200,¥10);insert into材料费表(单据号,物码,消耗数量,单价)values ('zy2016001','wm002',200,¥10);insert into材料费表(单据号,物码,消耗数量,单价)values ('zy2016001','wm003',200,¥10);----------------------------------------------------------------insert into材料费表(单据号,物码,消耗数量,单价)values ('zy2016003','wm001',200,¥10);insert into材料费表(单据号,物码,消耗数量,单价)values ('zy2016003','wm002',200,¥10);insert into材料费表(单据号,物码,消耗数量,单价)values ('zy2016003','wm003',250,¥10);--------------------------------------------------------------------insert into材料费表(单据号,物码,消耗数量,单价)values ('zy2016004','wm001',200,¥10);insert into材料费表(单据号,物码,消耗数量,单价)values ('zy2016004','wm002',200,¥10);insert into材料费表(单据号,物码,消耗数量,单价)values ('zy2016004','wm004',200,¥10);------------------------------------------------------insert into材料费表(单据号,物码,消耗数量,单价)values ('zy2016005','wm001',200,¥10);insert into材料费表(单据号,物码,消耗数量,单价)values ('zy2016005','wm002',200,¥10);insert into材料费表(单据号,物码,消耗数量,单价)values ('zy2016005','wm004',300,¥10);--------------------------------------------------------------------insert into作业项目表values('zy2016001','112201001','y001',¥10000,'张三','2016/5/1','2016/5/4','2016/5/23','作业公司作业一队','堵漏',¥7000,¥2500,¥1000,¥1400,¥10900,'王五','2016/5/26',¥10900,'王五','2016/5/28');----------------------------------------------------------insert into作业项目表values ('zy2016003','112201002','s001',¥10500,'张三','2016/5/1','2016/5/6','2016/5/23','作业公司作业二队','调剖',¥6500,¥2000,¥500,¥1400,¥10400,'李四','2016/5/26',¥10400,'王五','2016/5/28');---------------------------------------------insert into作业项目表values ('zy2016004','112202001','s002',¥12000,'张三','2016/5/1','2016/5/4','2016/5/24','作业公司作业三队','解堵',¥6000,¥2000,¥1000,¥1600,¥10600,'李四','2016/5/26',¥10600,'赵六','2016/5/28');--------------------------------------------insert into作业项目表values('zy2016005','112202002','y005',¥12000,'张三','2016/5/1','2016/5/4','2016/5/28','作业公司作业三队','防砂',¥7000,¥1000,¥2000,¥1300,¥11300,'李四','2016/6/1',NULL,NULL,NULL);---------------------------------------begin tranupdate作业项目表set人工费=人工费+200where单据号='zy2016005';update作业项目表set结算金额=结算金额+200where单据号='zy2016005';deletefrom作业项目表where入账金额is NULL;rollback tran--实验四-------------------------------------------------1create index预算日期索引on作业项目表(预算日期);create index结算日期索引on作业项目表(结算日期);create index入账日期索引on作业项目表(入账日期);--(1)select*from作业项目表where预算日期between'2016/5/1'and'2016/5/28'and预算单位= (select单位代码from单位代码表where单位名称='采油一矿二队');--another solutionselect*from作业项目表,单位代码表where单位代码=预算单位and单位名称='采油一矿二队'and预算日期between'2016/5/1'and'2016/5/28';--(2)select*from作业项目表where结算日期between'2016/5/1'and'2016/5/28'and预算单位=(select单位代码from单位代码表where单位名称='采油一矿二队');--another solution--select *--from 作业项目表,单位代码表--where 单位名称='采油一矿二队' and 预算单位=单位代码and 结算日期>='2016-5-1'and 结算日期<='2016-5-28';--(3)-----------------------------------------------select*from材料费表where单据号=(select单据号from作业项目表where预算日期between'2016/5/1'and'2016/5/28'and预算单位= (select单位代码from单位代码表where单位名称='采油一矿二队'));--(4)------------------------------------------select*from作业项目表where入账日期between'2016/5/1'and'2016/5/28'and预算单位= (select单位代码from单位代码表where单位名称='采油一矿二队');--(5)-----------------------------------------select,sum(预算金额)预算金额总和from作业项目表where预算日期between'2016/5/1'and'2016/5/28'and预算单位= (select单位代码from单位代码表where单位名称='采油一矿二队');--(6)--------------------------------select,sum(结算金额)结算金额总和from作业项目表where结算日期between'2016/5/1'and'2016/5/28'and预算单位=(select单位代码from单位代码表where单位名称='采油一矿二队');--(7)-------------------------------select sum(入账金额)入账金额总和from作业项目表where入账日期between'2016/5/1'and'2016/5/28'and预算单位=(select单位代码from单位代码表where单位名称='采油一矿二队');--(8)-------------------------------select sum(入账金额)采油一矿入账金额总和from作业项目表,单位代码表where入账日期between'2016/5/1'and'2016/5/28'and预算单位=单位代码and单位名称like'采油一矿%';--another solutionselect sum(入账金额)入账金额总和from作业项目表where入账日期between'2016/5/1'and'2016/5/28'and预算单位in(select单位代码from单位代码表where单位名称like'采油一矿%');--(9)-------------------------------select distinct入账人from作业项目表where入账人is not null;--(10)--------------------------------select单据号from作业项目表where结算日期between'2016/5/1'and'2016/5/28'and结算金额is not null and入账金额is null;--(11)----------------------------------select单据号from作业项目表where预算单位=(select单位代码from单位代码表where单位名称='采油一矿二队')order by入账金额desc;--(12)--------------------select施工单位表.施工单位名称,count(结算金额)项目个数,sum(结算金额)结算金额总和from施工单位表left join作业项目表on (施工单位表.施工单位名称=作业项目表.施工单位)group by施工单位表.施工单位名称;--(13)--------------------------------------------select*from材料费表where单据号=(select单据号from材料费表where物码=(select物码from物码表where名称规格='材料三')and消耗数量*单价>2000);--(14)-------------------------------------select distinct单据号from作业项目表where施工单位='作业公司作业二队';--(15)--------------------------------select distinct单据号from作业项目表where施工单位='作业公司作业一队'unionselect distinct单据号from作业项目表where施工单位='作业公司作业二队';--(16)---------------------------select distinct施工单位from作业项目表,油水井表,单位代码表where预算单位=单位代码表.单位代码and单位代码表.单位代码=油水井表.单位代码and 单位名称like'采油一矿%';--another solutionselect distinct施工单位from作业项目表where井号in(select井号from油水井表where单位代码in(select单位代码from单位代码表where单位名称like'采油一矿%'));-----------------------------------------------------------------------------------drop index预算日期索引on作业项目表;drop index结算日期索引on作业项目表;drop index入账日期索引on作业项目表;--3-----------------------------------------------------(1)------------------------------------------create table结算金额表(施工单位char(20),年月varchar(7),结算金额money);--(2)-----------------------------------------insertinto结算金额表select施工单位,convert(varchar(7),结算日期,111),sum(结算金额)from作业项目表group by施工单位,convert(varchar(7),结算日期,111);--another solution--insert--into 结算金额表--select 施工单位,YEAR(结算日期)*100+MONTH(结算日期),sum(结算金额) --from 作业项目表--group by 施工单位,YEAR(结算日期)*100+MONTH(结算日期);--(3)---------------------------------------------------begin tranupdate作业项目表set结算人='李兵'where预算单位in(select单位代码from单位代码表where单位名称like'采油一矿%');--(4)-----------------------------------------------------------------------------------------------deletefrom作业项目表where预算单位in(select单位代码from单位代码表where单位名称like'采油一矿%');rollback---实验五--------------------------------------------------------------------------------------(1)-------------------alter table结算金额表add备注char(20);select*from结算金额表--(2)-----------------------------------------------alter table结算金额表alter column施工单位char(20)not null;alter table结算金额表alter column年月varchar(7)not null;alter table结算金额表add primary key(施工单位,年月);TRUNCATE TABLE结算金额表insertinto结算金额表(施工单位,年月,结算金额)select施工单位,convert(varchar(7),结算日期,111),sum(结算金额) from作业项目表group by施工单位,convert(varchar(7),结算日期,111);---------------------------------------------------------------deletefrom结算金额表;delete结算金额表;--2-----------------------------------------------------(1)-----------------------------------------------alter table材料费表alter column单据号char(20)not null;alter table材料费表alter column物码char(20)not null;alter table材料费表add primary key (单据号,物码);-----------------------------------------------------------------------------------------------------------------alter table作业项目表alter column单据号char(20)not null;alter table作业项目表add primary key (单据号);--------------------------------------------------------------------------------------------------alter table单位代码表alter column单位代码char(20)not null;alter table单位代码表add primary key (单位代码);----------------------------------------------------alter table施工单位表alter column施工单位名称char(20)not null;alter table施工单位表add primary key (施工单位名称);-------------------------------------------------------alter table物码表alter column物码char(20)not null;alter table物码表add primary key (物码);-------------------------------------------------------------alter table油水井表alter column井号char(20)not NUll;alter table油水井表add primary key (井号);---------------------------------------------------------------------begin traninsert into材料费表values('zy2016001','wm004',100,10);insert into材料费表values('zy2016002',NULL,200,10); rollback--(2)------------------------------------------------------------------alter table材料费表add constraint a1 foreign key (单据号)references作业项目表(单据号);alter table材料费表add constraint a2 foreign key (物码)references物码表(物码);alter table作业项目表add constraint b1 foreign key(预算单位)references单位代码表(单位代码);alter table作业项目表add constraint b2 foreign key(井号)references油水井表(井号);alter table作业项目表add constraint b3 foreign key(施工单位)references施工单位表(施工单位名称);-----------------------------------------------------------------------------------------insert into油水井表values ('y007','油井','112203002');insert into材料费表values('zy2016007','wm006',100,10);begin tranupdate作业项目表set施工单位='作业公司作业五队'where单据号='zy2016001';deletefrom单位代码表where单位代码='112202002';update物码表set物码='wm04'where名称规格='材料四';rollback tran--(3)-------------------------------alter table单位代码表add constraint aa1 check (单位名称is not null);alter table单位代码表add constraint uni unique(单位代码);alter table油水井表add constraint aa2 check(井别in('油井','水井'));alter table油水井表alter column单位代码char(20)not null;alter table物码表alter column名称规格char(20)not null;alter table物码表add constraint uni2 unique(名称规格);alter table物码表alter column计量单位char(20)not null;alter table材料费表alter column消耗数量int not null;alter table材料费表alter column单价int not null;alter table作业项目表add constraint asdaf check (材料费+人工费+设备费+其他费用=结算金额);--3--------------------------------------------------------------------------------------(1)--------------------------------------------create view视图一asselect作业项目表.*,物码,消耗数量,单价from作业项目表,材料费表where作业项目表.单据号=材料费表.单据号;--(2)------------select结算金额,消耗数量from视图一where物码='wm003';select预算单位,施工内容from视图一where单据号='zy2016001'and物码='wm001';--(3)-------------------------create view预算状态asselect单据号,预算单位,井号,预算金额,预算人,预算日期from作业项目表begin traninto预算状态values ('zy2016008','112202002','y005',¥10000,'张三','2016-07-02');rollback tran--实验六---------------------------------------------------------------------------------------------------------------------1----------------------------begin trangoinsert into作业项目表values('zy2016006','112202002','y005',10000,'张三','07-01-2016','07-04-2016','07-25-2016','作业公司作业一队','堵漏',7000,2500,1000,1400,11900,'李四','07-26-2016',11900,'王五','07-28-2016')insert into材料费表values('zy2016006','wm001',200,10)insert into材料费表values('zy2016006','wm002',200,10)insert into材料费表values('zy2016006','wm003',200,10)insert into材料费表values('zy2016006','wm004',100,10)if@@error<>0beginprint'语句执行失败'endelsebeginprint'语句执行成功'commitend--2---------------------------------begin trandeclare yb cursor forselect*from作业项目表open ybdeclare @单据号varchar(20) declare @预算单位varchar(20) declare @井号varchar(20) declare @预算金额varchar(20) declare @预算人varchar(20) declare @预算日期varchar(20) declare @开工日期varchar(20) declare @完工日期varchar(20) declare @施工单位varchar(20)declare @施工内容varchar(20) declare @材料费varchar(20) declare @人工费varchar(20) declare @设备费varchar(20) declare @其它费用varchar(20) declare @结算金额varchar(20) declare @结算人varchar(20) declare @结算日期varchar(20) declare @入账金额varchar(20) declare @入账人varchar(20) declare @入账日期varchar(20)print'单据号'+'预算单位'+'井号'+'预算金额'+'预算人'+'预算日期'+'开工日期'+'完工日期'+'施工单位'+'施工内容'+'人工费'+'设备费'+'其它费用'+'结算金额'+'结算人'+'结算日期'+'入账金额'+'入账人'+'入账日期'fetch next from yb into @单据号,@预算单位,@井号,@预算金额,@预算人,@预算日期,@开工日期,@完工日期,@施工单位,@施工内容,@人工费,@设备费,@其它费用,@结算金额,@结算人,@结算日期,@入账金额,@入账人,@入账日期while(@@fetch_status= 0) beginprint@单据号+' '+@预算单位+' '+@井号+' '+@预算金额+' '+@预算人+' '+@预算日期+' '+@开工日期+' '+@完工日期+' '+@施工单位+' '+ @施工内容+' '+ @材料费+' '+@人工费+' '+@设备费+' '+@其它费用+' '+ @结算金额+' '+ @结算人+' '+@结算日期+' '+ @入账金额+' '+ @入账人+' '+@入账日期fetch next from yb into@单据号,@预算单位,@井号,@预算金额,@预算人,@预算日期,@开工日期,@完工日期,@施工单位,@施工内容,@材料费,@人工费,@设备费,@其它费用,@结算金额,@结算人,@结算日期,@入账金额,@入账人,@入账日期;end--3----------------------------------if object_id('_someDepCost','p')is not null drop procedure _someDepCost;gocreate procedure _someDepCost@单位代码varchar(40),@起始日期datetime,@结束日期datetimeasdeclare @单位名称varchar(40);declare @预算金额money,@结算金额money,@入账金额money,@未结算金额money,@未入账金额money;select @单位名称=单位名称from单位代码表where单位代码= @单位代码set @预算金额=(select sum(预算金额)from作业项目表where预算单位like @单位代码+'%'and(预算日期between @起始日期and @结束日期))set @结算金额=(select sum(结算金额)from作业项目表where预算单位like @单位代码+'%'and(结算日期between @起始日期and @结束日期))set @入账金额=(select sum(入账金额)from作业项目表where预算单位like @单位代码+'%'and(入账日期between @起始日期and @结束日期) and(入账金额is not null))set @未结算金额=(select sum(预算金额)from作业项目表where (结算金额is null)and(预算日期between @起始日期and @结束日期))set @未入账金额=(select sum(结算金额)from作业项目表where (入账金额is null)and(结算日期between @起始日期and @结束日期))set @未结算金额= @预算金额- @结算金额set @未入账金额= @结算金额- @入账金额if @预算金额is nullset @预算金额= 0if @结算金额is nullset @结算金额= 0if @入账金额is nullset @入账金额= 0if @未结算金额is nullset @未结算金额= 0if @未入账金额is nullset @未入账金额= 0declare @result varchar(100)set @result =convert(varchar,@预算金额)+' '+convert(varchar,@结算金额)+' '+convert(varchar,@入账金额)+' '+convert(varchar,@未结算金额)+' '+convert(varchar,@未入账金额)print @单位名称+'单位'+convert(varchar,@起始日期,102)+'--'+convert(varchar,@结束日期,102)+'成本运营状况'print'预算金额结算金额入账金额未结算金额未入账金额'print @resultgoexecute _someDepCost@单位代码='1122',@起始日期='2016-5-1',@结束日期='2016-5-29';execute _someDepCost@单位代码='112201',@起始日期='2016-5-1',@结束日期='2016-5-29';execute _someDepCost@单位代码='112201001',@起始日期='2016-5-1',@结束日期='2016-5-29';--4-----------------------------------------------(1)----------------------------if OBJECT_ID('trmytr1','TR')is not nulldrop trigger tr_mytrlgocreate trigger trmytr1 on作业项目表after insertasdeclare @结算金额moneydeclare @temp1 money,@temp2 money,@temp3 money,@temp4 money; select @temp1 =材料费,@temp2 =人工费,@temp3 =设备费,@temp4 =其他费用from inserted;set @结算金额= @temp1+@temp2+@temp3+@temp4;update作业项目表set结算金额= @结算金额where单据号=(select单据号from inserted);go--(2)---------------------------------------------if OBJECT_ID('trmytr2','TR')is not nulldrop trigger tr_mytr2create trigger trmytr2 on作业项目表after updateasdeclare @结算金额moneydeclare @temp1 money,@temp2 money,@temp3 money,@temp4 money; select @temp1 =材料费,@temp2 =人工费,@temp3 =设备费,@temp4 =其他费用from inserted;set @结算金额= @temp1+@temp2+@temp3+@temp4;update作业项目表set结算金额= @结算金额where单据号=(select单据号from inserted);go--(3)----------------------------------if OBJECT_ID('trmytr3','TR')is not nulldrop trigger tr_mytr3gocreate trigger trmytr3 on作业项目表instead of deleteasdelete from材料费表where单据号=(select单据号from deleted);--(4)------------------------begin tran/*(1)*/insert into作业项目表(单据号,预算人,材料费,人工费,设备费,其他费用) values('2017000','test',100,200,300,400);delete from作业项目表where单据号='2017000';/*(2)*/insert into作业项目表(单据号,预算人,材料费,人工费,设备费,其他费用) values('2017111','test',100,200,300,400);update作业项目表set材料费= 100000where单据号='2017111';/*(3)*/insert into作业项目表(单据号,预算人,材料费,人工费,设备费,其他费用) values('2017110','test',100,200,300,400);insert into材料费表values('2017110','wm001');select单据号,物码from材料费表;delete from作业项目表where单据号='2017110';select单据号,物码from材料费表rollback----实验七-----------------------------------------2----------------------------------------------------(1)----------------------------------create view采油一矿asselect*from作业项目表,单位代码表where单位代码=单据号and单位名称like'采油一矿%';create login user01 with password='12345';create user user00 for login user01;grant selecton采油一矿to user00;--(2)---------------------------------------------create login login007 with password='12345';create user user12 for login login007gosetuser'user12'goexecute _someDepCost@单位代码='1122',@起始日期='2016-5-1',@结束日期='2016-5-29';execute _someDepCost@单位代码='112201',@起始日期='2016-5-1',@结束日期='2016-5-29';execute _someDepCost@单位代码='112201001',@起始日期='2016-5-1',@结束日期='2016-5-29';gouse zyxtgrant execute on _someDepCostto user12goset user12goexecute _someDepCost@单位代码='1122',@起始日期='2016-5-1',@结束日期='2016-5-29';execute _someDepCost@单位代码='112201',@起始日期='2016-5-1',@结束日期='2016-5-29';execute _someDepCost@单位代码='112201001',@起始日期='2016-5-1',@结束日期='2016-5-29';go--(3)----------------------------------------------if OBJECT_ID('trmytr7','TR')is not nulldrop trigger tr_mytr7gocreate trigger trmytr7 on作业项目表after updateasdeclare @currenttime datetimeset @currenttime =getdate();declare @current_day varchar(10)set @current_day =convert(varchar(10),DATEPART(dw,@currenttime)-1); if @current_day not between 1 and 5beginif@@TRANCOUNT>0beginrollbackprint'非工作日不能更新数据'endendgo--测试数据begin tran。