数据库实验上机答案整理-中国石油大学-龚安

合集下载

中国石油大学数据结构上机实验3

中国石油大学数据结构上机实验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的索引。

数据库实验答案分析总结.doc

数据库实验答案分析总结.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号课程的学生姓名。

数据库原理及应用最全上机实验及实验答案

数据库原理及应用最全上机实验及实验答案

实验一 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.在“注册信息”页上的“姓名”和“公司”文本框中,输入相应的信息。

数据库系统原理实验报告册(带答案)

数据库系统原理实验报告册(带答案)

河南工程学院计算机科学与工程系数据库系统原理实验报告册学期:课程:专业:班级:学号:姓名:指导教师:目录实验一 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

数据库课后习题参考答案与解析.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的身份执行该存储过程,观察记录是否成功执行。

第2次上机课参考答案

第2次上机课参考答案

数据库原理及应用—第2次上机课参考答案第一部分:单表查询1、查询所有员工信息。

select * from Employees2、查询位于城市’Seattle’的员工信息。

select * from Employees where City = 'Seattle'3、查询出生日期在1960-1970年间的员工,按日期升序。

select * from Employeeswhere BirthDate between '1960-1-1' and '1970-1-1'order by BirthDate4、查询名称中包含’ma’的产品信息。

select * from Products where ProductName like '%ma%'5、查询价格在20元以下,且库存高于于70的产品信息,结果按价格升序,库存降序排列;select * from ProductsWHERE (UnitPrice < 20) AND (UnitsInStock > 70)ORDER BY UnitPrice, UnitsInStock DESC6、按产品类型(ID)统计产品的数量;select CategoryID, count(*) as psfrom Productsgroup by CategoryID order by ps desc7、查询所含产品数量大于10的产品类型ID;select CategoryID from Productsgroup by CategoryID having count(*) > 108、查询负责订单最多的员工ID;select top 1 EmployeeID, count(*) as esfrom Orders group by EmployeeID order by es desc9、查询需要补货的产品。

数据库原理及应用最全上机实验及实验答案

数据库原理及应用最全上机实验及实验答案

实验一 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.在“注册信息”页上的“姓名”和“公司”文本框中,输入相应的信息。

第四次上机实验参考答案.doc

第四次上机实验参考答案.doc

第四次上机实验参考答案•第1题:使用Microsoft Access建立一个数据库,命名为“用户”,该数据库包含一张“用户信息”表,结构如表4-1所示:表4-1用户信息表字段名称数据类型字段大小主键用户号数字整型YES用户名文本10所在地文本50街区文本50然后在用户信息表中输入如图4-1所示的5条记录。

图4-1运行界面实验步骤:1、建立数据库使用Access建立“用户”数据库,并创建“用户信息”表,然后在用户信息表中输入如图4-1所示的5条记录。

【创建过程略】。

2、设计用户界面建立一个Windows应用程序,在窗体上添加数据源控件BindingSource 1,实现和“用户”数据库的连接(连接步骤参见教材P240-243例10-3,注意将连接对象设置为“用户”数据库和“用户信息”表);添加DataGridViewl控件,将其与数据源BindingSourcel连接(连接步骤参见教材P243-244例10-4),实现对数据库信息的浏览。

程序界面如图4-2所示。

3、编程给退出按钮编程,可退出应用程序的运行。

【略】V bindingSourcel 通用户DataSet 匚丫用户信息BindingSource '图)用户信息TableAdapter图4-2程序界面设计•第2题:完成教材P245中的“4.编程题”,使用创建一个用户登录界面程序。

要求首先用Access 建立一个用户数据库users,并建立表:userinfo(username,password,address,email), 并输入记录(admin,123,信息系,123@)。

然后设计一个用户登录界面,当用户输入相关信息单击“登录”按钮时,从userinfo表中查找是否有该用户记录,如果有就显示“登录成功”;否则显示“用户名或密码错误”。

用户登录界面如下图所示。

【编程提示】:在Forml_Load事件中编写连接数据库、访问数据库表的代码;在“登录”按钮的单击事件中核对用户登录信息,并在窗体上用标签显示登录成功或失败的信息;在“重置”按钮的单击事件中清空本文框和标签中的显示信息,同时允许重新输入用户名和密码;在“退出”按钮的单击事件中关闭数据库连接,并退出应用程序。

数据库系统原理实验一参考答案

数据库系统原理实验一参考答案
CONSTRAINTReport_CourseFOREIGNKEY(Cno)REFERENCESCourses
)
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',

数据库与软件工程上机实验答案

数据库与软件工程上机实验答案

数据库与软件工程上机实验答案第一篇:数据库与软件工程上机实验答案《数据库与软件工程》上机实验答案实验三 SQL语言的DDL3.CREATE TABLE aa(Bb1 VARCHAR(30),Bb2 INT,Bb3 DECIMAL(6,2))4. ALTER TABLE aa ADD Bb4 varchar(20)5.DROP TABLE AA6. CREATE VIEWReaderView(借阅者)ASSELECT DISTINCT 读者编号FROM 借阅7. Drop ViewReaderView。

8.CREATE INDEX INDEX1 ON 读者(姓名 ASC,单位 ASC)CREATE INDEX INDEX3 ON 借阅(借阅日期 DESC)9. DROP INDEX 读者.INDEX1CREATE INDEX INDEX1 ON 读者(姓名 ASC)实验四 SQL语言的DML初步1. CREATE DEFAULT ZEROVALUE AS 0sp_bindefault ZEROVALUE, '图书.借出否'CREATE DEFAULT CURTIME AS getdate()sp_bindefault CURTIME, '借阅.借阅日期'2. CREATE RULE gender_ruleAS@value in('男','女')EXEC sp_bindrule 'gender_rule', '读者.性别'CREATE RULE lenddate_ruleAS@value > '2004-1-1'EXEC sp_bindrule 'lenddate_rule', '借阅.归还日期'3.用INSERT语句对“图书”表插入6条记录INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)VALUES('0001','计算机类','清华出版社','严蔚敏','数据结构', 20.11)INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)VALUES('0002','计算机类','清华出版社','苗雪兰','数据库技术及应用',29.00)INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)VALUES('0003','计算机类','清华出版社','李建中','软件工程',48.00)INSERT INTO 图书(书号,类别,出版社,作者,书名,定价) VALUES('0004','计算机类','电子工业出版社','汤惟','WEB技术',32.00)INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)VALUES('0005','自动化类','机械工业出版社','胡寿松','自动控制原理',52.00)INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)VALUES('0006','自动化类','机械工业出版社','郑大钟','线性控制理论',32.00)用INSERT语句对“读者”表插入4条记录INSERT INTO 读者(读者编号,姓名,单位,性别,电话)VALUES('10001','张三','东华大学','男','67792312')INSERT INTO 读者(读者编号,姓名,单位,性别,电话)VALUES('10002','李四','东华大学','女','67792312')INSERT INTO 读者(读者编号,姓名,单位,性别,电话)VALUES('10003','王五','东华大学','男','67792312')INSERT INTO 读者(读者编号,姓名,单位,性别,电话)VALUES('10004','李明','东华大学','女','67792312')用INSERT语句对“借阅”表插入7条记录INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0001','10001','2006-04-19 09:58:03','2006-05-19 8:38:23')INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0006','10002','2006-07-01 15:28:12','2006-07-18 9:14:02')INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0002','10002','2006-07-01 15:28:30','2006-07-17 19:10:32')INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0002','10003','2006-07-03 15:28:30','2006-08-09 15:28:30')INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0004','10002','2007-05-01 11:28:24','2007-08-01 8:09:04')INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0005','10002','2007-11-01 10:43:12','2007-12-01 14:09:56')INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0003','10004','2007-12-01 16:06:02','2007-12-29 13:17:09')4. UPDATE 借阅SET 借阅日期='2006-08-03 15:28:30'WHERE 读者编号='10003' AND借阅日期 BETWEEN '2006-07-03' AND '2006-07-04' AND 书号='0002'5. DELETE FROM 借阅WHERE 借阅日期<'2006-06-01'1. SELECT 书号,书名 as 名称,定价 as 价格 FROM 图书WHERE 类别='自动化类'2.方法1:SELECT * FROM 图书WHERE 类别='计算机类'UNIONSELECT * FROM 图书WHERE 出版社='电子工业出版社'方法2:SELECT * FROM 图书WHERE 类别='计算机类' OR 出版社='电子工业出版社'3. SELECT * INTO 计算机图书表 FROM 图书WHERE 类别='计算机类'4. SELECT DISTINCT 读者.* FROM 读者,借阅WHERE 读者.读者编号=借阅.读者编号5. SELECT 读者.读者编号,姓名,单位,图书.书号,书名,借阅日期FROM 读者,借阅,图书WHERE 读者.读者编号=借阅.读者编号AND 图书.书号=借阅.书号6. SELECT 图书.书号,书名,类别,借阅日期 FROM 读者,借阅,图书WHERE 读者.读者编号=借阅.读者编号AND 图书.书号=借阅.书号AND 姓名='张三'ORDER BY 借阅日期 DESC7. SELECT 读者.读者编号,姓名,书名,DATEDIFF(day,借阅日期,归还日期)as 借阅时间FROM 读者,借阅,图书WHERE 读者.读者编号=借阅.读者编号AND 图书.书号=借阅.书号AND DATEDIFF(day,借阅日期,归还日期)>20order by 借阅时间8. SELECT * FROM 读者WHERE NOT EXISTS(SELECT * FROM 图书WHERE 类别='自动化类' and NOT EXISTS(SELECT * FROM 借阅WHERE 读者编号=读者.读者编号 and 书号=图书.书号))1.SELECT 类别,COUNT(*)AS 数量, AVG(定价)AS平均价格,SUM(定价)AS 总价FROM 图书GROUP BY 类别ORDER BY 类别2. SELECT YEAR(借阅日期)as 年份,书号,COUNT(*)AS 借阅次数FROM 借阅GROUP BY YEAR(借阅日期),书号ORDER BY 借阅次数 DESC3. SELECT 读者.读者编号,COUNT(书号)AS 借阅次数 FROM 读者LEFT JOIN(SELECT * FROM 借阅 WHERE 借阅日期 BETWEEN '2006-7-1' AND '2007-10-1')AON 读者.读者编号=A.读者编号GROUP BY 读者.读者编号4. SELECT 读者编号,COUNT(*)AS 次数 FROM 借阅,图书WHERE 借阅.书号=图书.书号 AND 书名='数据库技术及应用'GROUP BY 读者编号ORDER BY 次数 DESC5.方法1:SELECT MAX(次数)AS 最多,MIN(次数)AS 最少,AVG(次数*1.0)AS 平均FROM(SELECT 图书.书号,COUNT(*)AS 次数 FROM 图书,借阅WHERE 图书.书号=借阅.书号 AND 类别='计算机类'GROUP BY 图书.书号)A方法2:SELECT 图书.书号,COUNT(*)*1.0 AS 次数 FROM 图书,借阅WHERE 图书.书号=借阅.书号 AND 类别='计算机类'GROUP BY 图书.书号COMPUTEMAX(COUNT(*)*1.0),MIN(COUNT(*)*1.0),AVG(COUNT(*)*1.0)6. SELECT 类别 FROM 图书GROUP BY 类别HAVING MAX(定价)>=ALL(SELECT 2*AVG(定价)FROM 图书GROUP BY 类别)7. SELECT 书号,书名,定价,出版社 FROM 图书WHERE 类别='计算机类'ORDER BY 出版社 DESCCOMPUTE COUNT(书号)BY 出版社COMPUTE COUNT(书号)实验七存储过程、触发器和数据库恢复1.(1)CREATE PROCEDURE 借阅情况@Readerno VARCHAR(8)ASSELECT 读者.读者编号,姓名,图书.书号,书名,借阅日期, 借出否AS 归还否FROM 读者,借阅,图书WHERE 读者.读者编号=借阅.读者编号AND 图书.书号=借阅.书号AND 读者.读者编号=@ReadernoEXEC 借阅情况‘10004’(2)CREATE PROCEDURE 借出情况@Bookno VARCHAR(10)ASSELECT 书名,姓名,借阅日期,归还日期FROM 读者,借阅,图书WHERE 读者.读者编号=借阅.读者编号AND 图书.书号=借阅.书号AND 图书.书号=@BooknoEXEC 借出情况 '0004'2.CREATE TRIGGER lendbookinsert ON 借阅FOR INSERTASIF(SELECT 借出否 FROM 图书 WHERE 书号 IN(SELECT 书号 FROM INSERTED))=1BEGINPRINT '该书已经借出'ROLLBACK TRANSACTIONENDELSEBEGINUPDATE 图书SET 借出否=1WHERE 书号 IN(SELECT 书号 FROM INSERTED)END第二篇:数据库上机实验(二)数据库上机实验内容及要求(第二部分)1.建立工厂管理数据库工厂(包括厂名和厂长名)需要建立一个管理数据库存储以下信息:(1)一个厂内有多个车间,每个车间有车间号、车间主任姓名、地址和联系电话;(2)一个车间有多个工人,每个工人有职工号、姓名、年龄、性别和工种;(3)一个车间生产多种产品,产品有产品号和价格;每种产品只能由一个车间生产;(4)一个车间制造多种零件,一种零件也可能为多个车间制造。

中国石油大学数据库原理及应用-第一次在线作业

中国石油大学数据库原理及应用-第一次在线作业

第一次在线作业单选题(共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、数据库中的数据可以共享我的答案:C 此题得分:0。

中国石油大学华东数据库实验八龚安

中国石油大学华东数据库实验八龚安

实验八数据库应用编程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驱动程序和服务器名称来引用。

数据库上机实验部分题目及答案

数据库上机实验部分题目及答案

上机实验部分题目及答案一、实验目的1、基本表的定义、修改和删除2、视图的建立、删除和查询3、约束的命名、删除和重定义二、实验结果存放创建表homework8(result ),将每题的题目序号和SQL语句写到此表。

三、实验内容现有图书管理数据库的一个关系模式:book(总编号,分类号,书名,作者,出版单位,单价)1.利用SQL语句创建book的表结构,其中总编号为主码,书名的类型为char(50),并给主码的约束命名(主码约束命名参照第五章内容)。

2.利用SQL在book这个表中分别插入以下所给元组:34、为“数据库导论”设置“出版日期”的值为2009年6月5日,为“计算机基础”设置“出版日期”的值为2008年3月4日。

5、删除总编号为445503的元组。

6、删除列“出版日期”。

7、将列“书名”的类型改为char(100),其中修改列类型的语句为:alter table <表名>[modify 列名数据类型]8、删除book的主码约束(参照第五章)9、将表book中的总编码设置为主码(参照87页内容)。

11.建立表book1,其表结构与内容参照第2题。

12. 为表book1建立科学出版社所出图书的视图science13、删除表book1,其中删除表的格式为:drop table <表名>[restrict|cascade constraint] 其中restrict与cascade参数的含义参照87页14、为表book建立高等教育出版社所出图书的视图education15、查询视图education中的所有内容16、删除视图educationdrop table homework8drop table bookcreate table homework8(ti smallint,res char(400))create table book(总编码char(8) ,分类号char(7),书名char(50),作者char(30),出版单位char(200),单价char(8),constraint total primary key(总编码) )insertinto homework8(ti,res)values (1,'create table book(总编码char(8) ,分类号char(7),书名char(50),作者char(30),出版单位char(200),单价char(8),constraint total primary key(总编码) )')22222222insertinto book(总编码,分类号,书名,作者,出版单位,单价)values ('445501','TP3/12','数据库导论','王强','科学出版社','17.90')insertinto book(总编码,分类号,书名,作者,出版单位,单价)values ('445502','TP3/12','数据库导论','王强','科学出版社','17.90')insertinto book(总编码,分类号,书名,作者,出版单位,单价)values ('445503','TP3/12','数据库导论','王强','科学出版社','17.90')insertinto book(总编码,分类号,书名,作者,出版单位,单价)values ('332211','TP5/10','计算机基础','李伟','高等教育出版社','18.00')3333333alter table bookadd 出版日期char(20)alter table bookadd 页数char(5)444444444444444444444444444444444444444update bookset 出版日期='2009年6月5日'where 书名='数据库导论'update bookset 出版日期='2008年3月4日'where 书名='计算机基础'55555555555555555555555555555555555555 deletefrom bookwhere 总编号='445503'66666666666666666666666666666666666666 alter table bookdrop column 出版日期777777777777777777777777777777777777777 alter table bookmodify 书名char(100)8888888888888888888888888888888888888 alter table bookdrop constraint total9999999999999999999999999999999999999 alter table bookadd primary key (总编码)11 11 11 11 11 11 11 11 11 11 create table book1(总编码char(8) ,分类号char(7),书名char(50),作者char(30),出版单位char(200),单价char(8),constraint total primary key(总编码))12 12 12 12 12 12 12 12 CREATE VIEW scienceASSELECT 总编码,分类号,书名,作者,出版单位,单价FROM book1WHERE 出版单位='科学出版社'13DROP TABLE book114CREATE VIEW educationASSELECT 总编码,分类号,书名,作者,出版单位,单价FROM bookWHERE 出版单位='高等教育出版社'15SELECT *FROM education16DROP VIEW education。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 traninsertinto预算状态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'语句执行失败'rollbackendelsebeginprint'语句执行成功'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 ybinto @单据号,@预算单位,@井号,@预算金额,@预算人,@预算日期,@开工日期,@完工日期,@施工单位,@施工内容,@材料费,@人工费,@设备费,@其它费用,@结算金额,@结算人,@结算日期,@入账金额,@入账人,@入账日期while(@@fetch_status= 0) beginprint@单据号+' '+@预算单位+' '+ @井号+' '+@预算金额+' '+ @预算人+' '+ @预算日期+' '+ @开工日期+' '+ @完工日期+' '+ @施工单位+' '+ @施工内容+' '+ @材料费+' '+ @人工费+' '+ @设备费+' '+ @其它费用+' '+ @结算金额+' '+ @结算人+' '+ @结算日期+' '+ @入账金额+' '+ @入账人+' '+ @入账日期fetch next from yb into@单据号,@预算单位,@井号,@预算金额,@预算人,@预算日期,@开工日期,@完工日期,@施工单位,@施工内容,@材料费,@人工费,@设备费,@其它费用,@结算金额,@结算人,@结算日期,@入账金额,@入账人,@入账日期;end--3----------------------------------if object_id('_someDepCost','p')is not nulldrop 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'; go--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_mytr2gocreate 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 tranupdate作业项目表set预算人='test'where单据号='zy2017001'if@@TRANCOUNT>0begincommitendgo本文档部分内容来源于网络,如有内容侵权请告知删除,感谢您的配合!。

相关文档
最新文档