当前位置:文档之家› 上海大学数据库上机作业上机练习

上海大学数据库上机作业上机练习

上海大学数据库上机作业上机练习
上海大学数据库上机作业上机练习

上海大数据库

《数据库系统与应用》上机习题*************************************************************************************************

第六部分、SQL高级应用

要求掌握:熟练掌握T-SQL语言,了解事务处理的相关语句,学会用游标方式对数据库进行操作。

一、写出书上练习题10中第14、15、16、17题的结果,并上机验证。完成第20、21、

22、23、24题

14.给出下列程序的执行结果

USE school

SELECT sno,cno,degree

FROM score

WHERE sno IN(103,105)

ORDER BY sno

COMPUTE A VG(degree)BY sno

GO

15.给出下列程序的执行结果

USE school

GO

SELECT teacher.tname AS'教师',student.sclass AS'班号',A VG(score.degree)AS'平均分'

FROM student,course,score,teacher

WHERE student.sno=score.sno AND https://www.doczj.com/doc/c715664766.html,o=https://www.doczj.com/doc/c715664766.html,o AND course.tno=teacher.tno

GROUP BY teacher.tname,student.sclass WITH CUBE

GO

16.给出下列程序的执行结果

USE school

GO

BEGIN TRANSACTION Mytran

--启动事务

INSERT INTO teacher

V ALUES(999,'张瑛','男','1960/03/05','教授','计算机系')

--插入一个教师记录

SA VE TRANSACTION Mytran

--保存点

INSERT INTO teacher

V ALUES(888,'胡丽','男','1982/8/04','副教授','电子工程系')

ROLLBACK TRANSACTION Mytran

COMMIT TRANSACTION

GO

SELECT*

FROM teacher

--查询教师表的记录

GO

DELETE teacher WHERE tno='999'

--删除插入的记录

GO

17.编写一个程序,查询最高分的课程名

USE school

SELECT cname

FROM course,score

WHERE https://www.doczj.com/doc/c715664766.html,o=https://www.doczj.com/doc/c715664766.html,o AND degree=(SELECT MAX(degree)FROM score)

二、完成书上上机实验题5

1.1)进入企业管理器,展开数据库,单击“factory”,单击下方的“关系图”。2)在数据库关系图中,选择要表示要从关系图中删除的关系的联接线。3)右击关系线,并从快捷菜单中选择“从数据库中删除关系”。

4)出现一个消息框,提示确认删除。单击“是”按钮。

https://www.doczj.com/doc/c715664766.html,E factory

SELECT worker.职工号,worker.姓名,salary.工资

FROM worker,salary

WHERE worker.职工号=salary.职工号

ORDER BY worker.职工号,worker.姓名

COMPUTE SUM(salary.工资)BY worker.职工号

https://www.doczj.com/doc/c715664766.html,E factory

SELECT worker.性别,depart.部门名,A VG(salary.工资)AS'平均工资'

FROM worker,salary,depart

WHERE worker.职工号=salary.职工号AND worker.部门号=depart.部门号

GROUP BY worker.性别,depart.部门名WITH CUBE

ORDER BY worker.性别,depart.部门名

https://www.doczj.com/doc/c715664766.html,E factory

GO

INSERT INTO worker V ALUES(20,'陈立','女','55/03/08',1,'75/10/10',4)

GO

INSERT INTO depart V ALUES(5,'设备处')

GO

SELECT worker.职工号,worker.姓名,depart.部门名

FROM worker FULL JOIN depart

ON(worker.部门号=depart.部门号)

ORDER BY worker.职工号

GO

DELETE FROM worker WHERE职工号='20'

GO

DELETE FROM depart WHERE部门号='5'

GO

https://www.doczj.com/doc/c715664766.html,E factory

SELECT worker.职工号,worker.姓名,depart.部门名,salary.日期,salary.工资FROM worker,salary,depart

WHERE worker.职工号=salary.职工号AND worker.部门号=depart.部门号

AND salary.工资=(SELECT MAX(工资)FROM salary)

https://www.doczj.com/doc/c715664766.html,E factory

SELECT部门名

FROM depart

WHERE部门号=(SELECT部门号FROM worker

WHERE职工号=(SELECT职工号FROM salary

WHERE工资=(SELECT MAX(工资)FROM salary)))

https://www.doczj.com/doc/c715664766.html,E factory

SELECT职工号,姓名

FROM worker

WHERE职工号IN(SELECT职工号FROM salary

GROUP BY职工号HA VING A VG(工资)<(SELECT A VG(工资)FROM salary)) https://www.doczj.com/doc/c715664766.html,E factory

GO

SET NOCOUNT ON

--声明变量

DECLARE@dname char(10)

--声明游标

DECLARE d_cursor CURSOR

FOR SELECT部门名

FROM depart

WHERE部门号=

(SELECT部门号

FROM worker

WHERE职工号=

(SELECT职工号

FROM salary

WHERE工资=

(SELECT MAX(工资)

FROM salary)

)

)

--打开游标

OPEN d_cursor

--提取第一行数据

FETCH NEXT FROM d_cursor INTO@dname

--打印表标题

PRINT'部门名'

WHILE@@FETCH_STATUS=0

BEGIN

--打印一行数据

PRINT@dname

--提取下一行数据

FETCH NEXT FROM d_cursor INTO@dname

END

--关闭游标

CLOSE d_cursor

--释放游标

DEALLOCATE d_cursor

GO

https://www.doczj.com/doc/c715664766.html,E factory

GO

SET NOCOUNT ON

--声明变量

DECLARE@no int,@name char(10)

--声明游标

DECLARE w_cursor CURSOR

FOR SELECT职工号,姓名

FROM worker

WHERE职工号IN

(SELECT职工号

FROM salary

GROUP BY职工号

HA VING A VG(工资)<(SELECT A VG(工资)FROM salary)) --打开游标

OPEN w_cursor

--提取第一行数据

FETCH NEXT FROM w_cursor INTO@no,@name

--打印表标题

PRINT'职工号姓名'

WHILE@@FETCH_STATUS=0

BEGIN

--打印一行数据

PRINT CAST(@no AS char(8))+@name

--提取下一行数据

FETCH NEXT FROM w_cursor INTO@no,@name

END

--关闭游标

CLOSE w_cursor

--释放游标

DEALLOCATE w_cursor

GO

https://www.doczj.com/doc/c715664766.html,E factory

GO

DECLARE@num int

SELECT@num=COUNT(*)

FROM worker

PRINT'原职工人数:'+CAST(@num AS CHAR(3))

GO

DECLARE@num int

BEGIN TRANSACTION

--启动事务

--插入一个职工记录

INSERT INTO worker V ALUES(20,'陈立','女','55/03/08',1,'75/10/10',4) PRINT'插入一个职工记录'

SELECT@num=COUNT(*)

FROM worker

PRINT'职工人数:'+CAST(@num AS CHAR(3))

ROLLBACK TRANSACTION

--回滚事务

GO

PRINT'回滚事务'

DECLARE@num int

SELECT@num=COUNT(*)

FROM worker

PRINT'职工人数:'+CAST(@num AS CHAR(3))

GO

数据库上机实验7实验报告

上机实验七——视图的建立及操作 一、实习目的: 掌握创建、删除、和查询视图的方法,验证可更新视图和不可更新视图。 二、实习准备: 1.复习第三章3.6节视图 2. 完成习题三第16题中的各项操作的SQL语句。 3.了解可更新视图和不课更新视图 三、实习内容:验证习题三第16题中的各项操作的SQL语句。 ①建立01311班选修了1号课程的学生视图Stu_01311_1 CREATE VIEW Stu_01311_1 AS SELECT * FROM Grade WHERE Cno='1'AND Sno in( SELECT Sno FROM Student WHERE Clno='01311') WITH CHECK OPTION ②建立01311班选修了1号课程并且成绩不及格的学生视图Stu_01311_2 CREATE VIEW Stu_01311_2 AS SELECT * FROM Grade

WHERE Cno='1'AND Gmark<60 AND Sno in( SELECT Sno FROM Student WHERE Clno='01311') WITH CHECK OPTION ③建立视图Stu_year,由学生学号、姓名、出生年份组成 CREATE VIEW Stu_year AS SELECT Sno,Sname,year=2001-Sage FROM Student ④查询1990年以后出生的学生姓名 SELECT Sname FROM Student WHERE 2001-Sage<1990; ⑤查询01311班选修了1号课程并且成绩不及格的学生的学号、姓名、出生年份SELECT Sno,Sname,2014-Sage FROM Student WHERE Clno=01311 AND EXISTS(

SQL第6周数据库上机作业答案

第二次(第6周)上机作业 一、用T-SQL语句在E:\DATA\文件夹中创建一个教师信息数据库teacher,该数据库包含:(界面方式也要会) 1、一个主数据文件逻辑名‘teacherdata1 ’, 物理名‘E:\DATA\tdata1.mdf ’, 初始容量1MB,最大容量10MB,每次增长量为15%。 2、一个辅助数据文件逻辑名‘teacherdata2 ’ 物理名‘E:\DATA\tdata2.ndf ’, 初始容量2MB,最大容量15MB,每次增长量为2MB。 3、两个数据文件不单独创建文件组,即使用默认的PRIMARY组; 4、一个事务日志文件逻辑名‘teacherlog’物理名‘E:\DATA\teacherlog.ldf ’,初始容量500KB,最大容量不受限制,每次增长量为500KB。 先确认E:\DATA\文件夹已创建, CREATE DATABASE teacher ON PRIMARY ( NAME = teacherdata1 , FILENAME = 'E:\DATA\tdata1.mdf' , SIZE =5MB , MAXSIZE= 10 , FILEGROWTH = 15% ) , ( NAME = teacherdata2 , FILENAME = 'E:\DATA\tdata2.ndf' , SIZE = 2 , MAXSIZE= 15 , FILEGROWTH = 2MB ) LOG ON /* 创建事务日志文件*/ ( NAME = teacherlog , FILENAME = 'E:\DATA\teacherlog.LDF', SIZE = 500 KB ,/* 初始容量,KB单位不能省略*/ MAXSIZE = UNLIMITED ,/* 日志文件最大容量不受限制*/ FILEGROWTH = 500 KB/* 增长量KB 不能省略*/ ) 二、修改数据库“teacher”,增加两个文件组,文件组名:Gteacher1和Gteacher2。ALTER DATABASE teacher Add filegroup Gteacher1 ALTER DATABASE teacher Add filegroup Gteacher2 三、增加一个辅助数据文件,文件逻辑名teacherdata3,物理名为:E:\data\ teacherdata3.ndf’,初始大小为20MB,最大100MB,增量10MB,归属于文件组“Gteacher1”。 Alter database teacher Add file

数据库原理及应用(SQL Server 2008)全书答案 清华大学出版社 马建红 李占波主编第三章习题及实验答案

第三章习题及实验答案 习题答案 一、选择题 1、A 2、A 3、C 二、填空题 1、程序 2、MIN、SUM 3、CONTINUE、BREAK 三、简答题 1、可以使用的运算符可以分为算术运算符、逻辑运算符、赋值运算符、字符串串联运算符、按位运算符、一元运算符及比较运算符等。 2、用户自定义函数可分为:标量函数和表值函数。可使用CREATE FUNCTION语句创建函数,在调用用户自定义函数时,如果调用的是标量函数,则必须提供架构名。如果调用的是表值函数,则可以不提供架构名。用户可以将调用的函数用在赋值语句中,或作为表达式的操作数,或用在SQL命令中。 3、批处理是包含一个或多个Transaction-SQL语句的组,从应用程序一次性的发送到SQL Server执行。批处理是使用GO语句将多条SQL语句进行分隔,其中每两个GO之间的SQL 语句就是一个批处理单元。一个批处理中可以包含一条语句,也可以包含多条语句。 4、在SQL Server系统中,可以使用的流程控制语句有BEGIN…..END、IF…ELSE、CASE、WHILE…..CONTINUE….BREAK、GOTO、W AITFOR、RETURN等。 BEGIN…..END….: 在条件语句和循环语句等流程控制语句中,当符合特定条件需要执行两个或多个语句时,就应该使用BEGIN…END语句将这些语句组合在一起。 IF…..ELSE….: IF….ELSE语句是条件判断语句。 CASE:用于多重选择的条件判断语句,结果返回单个值。在CASE中可根据表达式的值选择相应的结果。 WHILE…..CONTINUE….BREAK: SQL语言中的循环语句,用来重复执行SQL语句或语句块。 GOTO: SQL程序中的无条件跳转语句,可以使程序直接跳到指定的标识符位置处继续执行。 WAITFOR: SQL中起暂停正在执行的语句、语句块或者存储过程的调用,直到某时间、时间间隔到达后才继续执行。 RETURN:用于无条件终止查询、存储过程或批处理。

数据库上机实验报告

数据库实验 (第三次) 题目1 实验内容: 1. 检索上海产的零件的工程名称; 2. 检索供应工程J1零件P1的供应商号SNO; 3. 检索供应工程J1零件为红色的供应商号SNO; 4. 检索没有使用天津生产的红色零件的工程号JNO; 5. 检索至少用了供应商S1所供应的全部零件的工程号JNO; 6. 检索购买了零件P1的工程项目号JNO及数量QTY,并要求对查询的结果按数 量QTY降序排列。

1 select jname from j where jno in (select jno from spj where sno in (select sno from s where city ='上海' ) ); 2 select sno from spj where jno ='j1'and pno ='p1' 3

selectdistinct sno from spj where pno in (select pno from p where color='红'and pno in (select pno from spj where jno ='j1' ) ); 4 selectdistinct jno from spj where pno notin (select pno from p where color ='红'and pno in (select pno from spj where sno in (select sno from s where city ='天津' ) ) )

5 select jno from spj where sno ='s1' 6 select jno,qty from spj where pno ='p1' orderby qty desc 四﹑思考题 1.如何提高数据查询和连接速度。 建立视图 2. 试比较连接查询和嵌套查询 有些嵌套查询是可以用连接来代替的,而且使用连接的方式,性能要比 嵌套查询高出很多 当查询涉及多个关系时,用嵌套查询逐步求解结构层次清楚,易于构造,具有结构化程序设计的优点。但是相比于连接运算,目前商用关系数据库管理系统对嵌套查询的优化做的还不够完善,所以在实际应用中,能够用连接运算表达的查询尽可能采用连接运算。

北大数据库原理上机考题练习及参考答案 练习二(商品、顾客、购买)

题目: 现有一个商店的数据库,记录顾客及其购物情况,由下面三个表组成:商品(商品号,商品名,单价,商品类别,供应商); 顾客(顾客号,姓名,住址); 购买(顾客号,商品号,购买数量); 试用SQL语言完成下列功能: 1 建表,在定义中要求声明: (1)每个表的主外码; (2)顾客的姓名和商品名不能为空值; (3)单价必须大于0,购买数量必须再0到20之间; 2 往表中插入数据: 商品(M01,佳洁士,8.00,牙膏,宝洁; M02,高露洁,6.50,牙膏,高露洁; M03,洁诺,5.00,牙膏,联合利华; M04,舒肤佳,3.00,香皂,宝洁; M05,夏士莲,5.00,香皂,联合利华; M06,雕牌,2.50,洗衣粉,纳爱斯 M07,中华,3.50,牙膏,联合利华; M08,汰渍,3.00,洗衣粉,宝洁; M09,碧浪,4.00,洗衣粉,宝洁;) 顾客(C01,Dennis,海淀; C02,John,朝阳; C03,Tom,东城; C04,Jenny,东城; C05,Rick,西城;) 购买 (C01,M01,3;C01,M05,2; C01,M08,2;C02,M02,5; C02,M06,4;C03,M01,1; C03,M05,1;C03,M06,3; C03,M08,1;C04,M03,7; C04,M04,3;C05,M06,2; C05,M07,8;) 商品有9 条,顾客有5条, 购买有5条

3 用SQL语句完成下列查询: (1)求购买了供应商"宝洁"产品的所有顾客; (2)求购买的商品包括了顾客"Dennis"所购买商品的顾客(姓名);(3)求牙膏卖出数量最多的供应商。 4 将所有的牙膏商品单价增加10%。 5 删除从未被购买的商品记录。 参考答案: create table product ( productno char(10) not null, productname char(15) not null, price float(15), sort char(10), supplier char(20), primary key (productno), check (price > 0) ) create table customer ( customerno char(10) not null, customername char(15) not null, address char(10), primary key (customerno) ) create table buy ( customerno char(10) not null, productno char(10) not null, num smallint, primary key (customerno,productno), foreign key (customerno) references customer (customerno), foreign key (productno) references product (productno), check (num between 0 and 20) )

数据库操作题及答案

数据库操作题及答案 【篇一:sql数据库复习资料操作题复习(带答案)】 本文件,文件名为学号姓名.sql,sql语句前加上题号。(共60分)一、创建数据库 创建一个数据库,数据库名为student,主数据文件的逻辑名为student_data,物理名称为student_data.mdf,存放在d盘根目录下,初始大小为10mb,最大可增长到50mb,增长方式是按5%比 例增长;日志文件的逻辑名称为student_log,物理名称为 student_log.ldf,存放在d盘根目录下,初始大小为2mb,最大可 增长到5mb,按1mb增长。 create database student on primary (name=student_data, filename=d:\student_data.mdf, size=10mb, maxsize=50mb, filegrowth=5%) log on (name=student_log, filename=d:\student_log.ldf, size=2mb, maxsize=5mb, filegrowth=1mb) 二、创建表 create table 学生 (学号 char(8) primary key, 姓名 char(20) not null, 性别 char(2) not null check(性别 in(男,女)),出生日期 datetime null) use student create table 成绩 (学号 char(8),课程名 varchar(30),成绩 real null check(成绩 between 0 and 100) primary key(学号,课程名), foreign key (学号) references 学生(学号)) 3、在gxc数据库中创建商品表,表名:sp。结构如下: use gxc create table sp (bh char(20) primary key,mc varchar(50) not null, xkc real, sj money) 4、在gxc数据库中创建供应表,表名:gy。结构如下: create table gy (ddh char(10),bh char(20) not null, sl float not null check(sl0), jg money, jsj datetime default(getdate()), primary key(ddh,bh), foreign key (bh) references sp(bh)) 5、往表中插入以下记录:

数据库作业 2要点

《数据库技术与管理》上机实验报告 班级:工程管理1101班 姓名: 学号:

实验报告一 《数据库技术与管理》上机实验报告 专业:工程管理学号:姓名:班级:1101班 实验时间2012.11.24 实验地点西配楼 实验内容1.创建数据库 (1) A.使用企业管理器创建数据库 B.在Data上点击鼠标右键,选择新建数据库 C.输入数据库名称,并点击数据文件和事务日志选项卡,分别输入相应信息 D.点击确定后可以看到在SQL Server的数据库中新增加了YGKQ数据库。 (2) 使用SQL语句创建数据库 CREATE DATABASE YGKQ ON (NAME=YGKQ _Data, FILENAME='C:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\YGKQ_Data.mdf’ SIZE=10MB, MAXSIZE=50MB, FILEGROWTH=5% ) LOG ON (NAME=YGKQ _log, FILENAME=' C:\Program Files\MicrosoftSQL Server\MSSQL\Data\YGKQ _log.ldf ', SIZE=2MB, MAXSIZE=5MB, FILEGROWTH=1MB ) 2. 创建表 (1) 使用企业管理器创建表 第一步:在YGKQ数据库展开点击表,在所有表的展开上点击右键选择新建表 第二步:按照要求依次输入表的列名、数据类型、长度、是否允许空以及对这一列的描述。 第三步:点击鼠标右键,设置主键 第四步:将所有列信息输入完成后点击保存,输入文件名。第一张表创建完成。 可以在表展开中查看到新建的表 第五步:按照上述方法将其他表新建完成。 (2) 使用SQL语句创建表 第一步:打开事件分析器,输入SQL语句 create table qqxl ( sno char(4) primary key, --员工号 sname char(8) not null,--姓名 absent datetime,--缺勤时间(主键) absent int,--缺勤天数(主键)

数据库技术与应用第5章 习题答案

第5章数据库完整性与安全性 1. 什么是数据库的完整性?什么是数据库的安全性?两者之间有什么区别和联系? 解: 数据库的完整性是指数据库中数据的正确性、有效性和相容性,其目的是防止不符合语义、不正确的数据进入数据库,从而来保证数据库系统能够真实的反映客观现实世界。 数据库安全性是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。 数据的完整性和安全性是两个不同的概念,但是有一定的联系: 前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出所造成的无效操作和错误结果。后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。 2. 什么是数据库的完整性约束条件?完整性约束条件可以分为哪几类? 解: 完整性约束条件是指数据库中的数据应该满足的语义约束条件。一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。静态列级约束是对一个列的取值域的说明,包括以下几个方面:①数据类型的约束,包括数据的类型、长度、单位、精度等;②对数据格式的约束;③对取值范围或取值集合的约束; ④对空值的约束;⑤其他约束。静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有:①实体完整性约束;②参照完整性约束;③函数依赖约束。动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:①修改列定义时的约束;②修改列值时的约束。动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。 3. 试述DBMS如何实现完整性控制。 解: 为了维护数据库的完整性,DBMS提供了以下三种机制: ①完整性约束条件定义完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件。SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。这些完整性一般由SQL的DDL语义来实现。它们作为数据库模式的一部分存入数据字典中。 ②完整性检查方法检查数据是否满足已定义的完整性约束条件称为完整性检查。一般在INSERT、UPDATE、DELETE语句执行后开始检查,也可以在事务提交时检查。检查这些操作执行后数据库中的数据是否违背了完整性约束条件。 ③违约处理若发现用户操作违背了完整性约束条件,应采取一定的措施,如拒绝(NOACTION)执行该操作,或级连(CASCADE)执行其它操作,进行违约处理以保证数据的完整性。 4. 现有以下四个关系模式: 供应商(供应商编号,姓名,电话,地点),其中供应商编号为主码;

数据库上机作业

数据库上机实验报告 Ships表 Classes表 Outcomes表 Battles表

a)找出至少有10门炮的军舰类别名和制造国家 SELECT class, country FROM Classes WHERE numGuns >= 10 b)找出所有在1918年以前下水的舰船的名字,并且把结果列名改为ShipName. SELECT name AS ShipName FROM Ships WHERE YEAR(launched)<1918 c)找出所有在战斗中被击沉的船只和那次战斗的名字。 SELECT ship AS ShipName, battle FROM Outcomes WHERE result='sunk' d)找出所有和它的类别名同名的船只。 SELECT name AS ShipName FROM Ships WHERE name = class e)找出所有以“R”字符打头的船只的名字。 SELECT name AS ShipName FROM Ships WHERE name LIKE'R%'

a)找出重量超过35000吨的船只。 SELECT https://www.doczj.com/doc/c715664766.html, FROM Ships , Classes WHERE Ships.class = Classes.class AND Classes.displacement>35000 b)找出参加Guadalcanal战斗的船只的名字、排水量和火炮数量。 SELECT https://www.doczj.com/doc/c715664766.html,, C.displacement, C.numGuns FROM Ships S, Outcomes O, Classes C WHERE https://www.doczj.com/doc/c715664766.html,=O.ship AND S.class =C.class AND O.battle ='Guadalcanal' c)列出数据库在抗洪提到的所有船只。 SELECT name ShipName FROM Ships UNION SELECT ship ShipName FROM Outcomes d)找出同时拥有战列舰和巡洋舰的国家。 SELECT C1.country FROM Classes C1, Classes C2 WHERE C1.country = C2.country AND C1.type='bb'AND C2.type='bc';

上海大学数据库2原理研讨+作业的个人解答

第1周(第五章:函数依赖、推理规则、闭包) 二、研讨课: 1、假设员工关系EMP(员工号,姓名,部门,部门电话,部门负责人,家庭住址,家庭成员,成员关系)如下表所示。如果一个部门可以有多名员工,一个员工可以有多个家庭成员,那么关系EMP属于数据冗余问题;为了解决这一问题,应该将员工关系EMP分解为(员工号,姓名,部门,家庭地址,家庭成员,成员关系)(部门,部门负责人,部门电话), 画出ER图(上学期学过了,很简单,懒得画),主外键(主键:员工号,外键:部门)(主键: 2、判断F={A->BC,B->A,AD->E}与G={A->BC,B->A,BD->E}就是等价得 因为B->A,所以BD->AD,因为AD->E,所以BD->E,所以。。。 3、设关系模式R具有n个属性,在模式R上可能成立得函数依赖有 (1) 个?其中平凡得FD有 (2)个?非平凡得FD有(3) 个?以上3点都需说明为什么 三、作业: 1、设函数依赖集F={AB->E,AC->G,AD->BG,B->C,C->D},试证AC->G就是冗余得。 AD->BG,C->D,所以AC->BG,所以AC->G,所以冗余 2.课本Page124:习题5、3 (1)X->?永远满足。 (2)?->Y,则属性Y对于各元组得值相同。 (3)?->?为平凡得函数依赖,永远满足。 3、课本Page124:习题5、8 证明:(反证法)假设存在A→B 那么 A→AB, 关系模式R得候选码即为A,不就是全码 ∴假设不存在,R不满足A→B

同理:R不满足 B→A ?第2周(第五章:、关键码、最小函数依赖集) 二、研讨课: 2.设有函数依赖集:F={AB->C,C->A,BC->D,ACD->B,D->EG,BE->C,CG->BD,CE->AG},计算其等价得最小依赖集。 1、把右边都写成单属性 AB->C,C->A,BC->D,ACD->B,D->E,D->G,BE->C,CG->B,CG->D,CE->A,CE->G 2、去左边冗余属性 C->A,CE->A冗余,去掉CE->A,所以 AB->C,C->A,BC->D,ACD->B,D->E,D->G,BE->C,CG->B,CG->D,CE->G 3、去冗余得FD D->G,所以CD->CG,CG->B,所以CD->B,所以ACD->B,所以ACD->B冗余 所以 AB->C,C->A,BC->D,D->E,D->G,BE->C,CG->B,CG->D,CE->G3.已知R(ABCDE),F={A→B,BC→A,A→D},求R得全部非主属性。 L:C R:D N:E LR:A,B CE+=CE ACE+=ABCDE BCE+=ABCDE 所以非主属性为D 三、作业: 1、已知F={B→D,A→D,DA→CB,CD→A},求Fmin。 1、右边单属性 B→D,A→D,DA→C,DA→B,CD→A 2、左边冗余属性 A→D,DA→C,DA→B,所以A→C,A→B 所以 B→D,A→D,A→C,A→B,CD→A 3、冗余得FD:无 2、如果关系模式R(A,B)得候选码为(A,B)(即为全码),那么该关系模型一定不满足A→B,或B→A。 没什么好说得 3、设有R(ABCDE),F={ A→C,B→C,C→D,CE→A,DE→C },求候选码。 L:B,E R: N: LR:A,C,D BE+=ABCDE 所以BE

数据库上机答案

数据库上机1 1、新建工厂数据库factory。 create database factory on( name=factory_data, filename='d:\factory.mdf') log on(name=factory_log, filename='d:\factory.ldf') 2、数据库factory包括职工表worker、部门表depart和职工工资表salary。用SQL语句建立这三个表并输入数据,其表结构及用例数据分别如下: 职工表结构为: 职工号:int; 姓名:char(8) ; 性别:char(2) ; 出生日期:datetime; 党员否:char(2) ; 参加工作:datetime; 部门号:int; 其中职工号为主码。 部门表结构为:

部门号:int; 部门名:char(10); 其中部门号为主码。 职工工资表结构为: 职工号:int; 日期:datetime; 工资:decimal(6,1) ; 其中职工号和日期为主码。

create table worker ( 职工号int primary key, 姓名char(8) , 性别char(2), 出生日期datetime, 党员否char(2), 参加工作datetime, 部门号int ) create table depart ( 部门号int primary key, 部门名char(10)

) create table salary ( 职工号int, 日期datetime, 工资decimal(6,1), Primary key(职工号,日期) ) 3. 显示部门的详细信息。 select * from depart 4.查询3号职工的工资单。 select * from salary where职工号=3 5.显示所有职工的姓名及年龄,并按姓名升序显示。 select 姓名, 2015-year(出生日期) '年龄' from worker order by姓名6. 求出各部门的部门号及党员人数。 select 部门号,count(党员否) '党员人数' from worker where 党员否='是' group by 部门号 7. 在worker表的“姓名”列创建唯一索引nameindex。 create unique index nameindex on worker (姓名) 数据库上机2 1. 查询12月份过生日的名单。 答:select 姓名from worker where month(出生日期)= 12 2. 查询所有姓刘的职工信息。 select * from worker where 姓名like ‘刘%’ 3. 显示所有职工的职工号和2011年2月份的工资数。 select 职工号,工资from salary where year(日期)=2011 and month(日期)=2 4. 查询1号部门所有职工的姓名和工资,并按工资降序排列。

数据库上机实验报告4

数据库上机实验报告 4 学号:姓名:日期:年月日 实验目的:(1)练习连接查询;(2)练习视图的创建与使用;(3)学习使用ODBC的方法;(4)体验T-SQL的功能;体验存储过程的功能;体验表值函数、标量值函数的作用;体验ranking等功能。 1 练习视图及连接查询。 (1)创建一个视图,视图名为viNF,视图内容为select id,count(*) as nf from friends group by id。执行成功后,将SQL语句复制到下方。 (2)基于viNF视图,查找拥有最多好友的用户、最少好友的用户。执行成功后,将SQL语句复制到下方。 (3)基于users表和viNF视图进行连接查询。分别进行内连接、全外连接、左外连接、右外连接四种操作。执行成功后,将SQL语句复制到下方,并回答:四种结果表,哪两个的结果是一致的,为什么? (4)将题(3)中全外连接保存为一个新的视图viUAF。 2 通过ODBC用Excel打开users表。 3 体验T-SQL。 回顾实验2中的题目: 定义最低价格为成本价;依据此成本价做如下计算: 连接Goods,Goods_Extent,Sellers表,按照总利润,输出前10名;要求输出表的格式为(商品名称,卖家名称,商品价格,运费,卖家信誉,卖家好评率,历史销量,历史利润,期内销量,期内利润,总销量,总利润) 利用如下语句进行查询,体会和之前有什么不同。如感兴趣,自己可以仿照写一个变量定义、赋值及应用的例子。 declare @cost as float; select @cost=min(good_price)from goods; select top 10 good_name as商品名称, goods.seller_name as卖家名称, good_price as商品价格, good_shipping as运费,

(完整版)上海大学数据库上机作业上机练习4作业

上大学数据库上机作业 《数据库系统与应用》上机习题************************************************************************************************* 第四部分、SQL查询━━嵌套和组合统计查询要求掌握:利用SQL查询语言表达嵌套查询语句以及数据查询中的统计计算和组合操作。 一、做书上第九章余下的例题,并完成书上练习题9中第11、12、13、14题 11.if exists(SELECT*FROM sys.objects WHERE name=student) 12. 二、利用图书_读者数据库 1. 求机械工业出版社出版的各类图书的平均价。 USE图书读者 SELECT类别,A VG(定价)AS平均价 FROM图书 WHERE出版社='机械工业出版社' GROUP BY类别 2.求各类图书的最高价、最低价、图书的数量。 USE图书读者 SELECT类别,MAX(定价)AS最高价,MIN(定价)AS最低价,COUNT(*)AS数量 FROM图书 GROUP BY类别 3.查找图书类别,要求类别中最高的图书定价不低于全部按类别分组的图书平均定价的1.5倍。 USE图书读者 SELECT类别 FROM图书 WHERE定价=ALL (SELECT MAX(定价) FROM图书 WHERE定价<=ALL (SELECT A VG(定价)*1.5 FROM图书)) 4.计算机类和机械工业出版社出版的图书。 USE图书读者 SELECT* FROM图书 WHERE出版社='机械工业出版社'AND类别='计算机' 5.查询所有读者借阅过的书,要求按读者姓名、书名来排序。 USE图书读者 SELECT读者.编号,借阅.读者编号,姓名,书名 FROM图书,读者,借阅 WHERE读者.编号=借阅.读者编号AND借阅.书号=图书.书号 ORDER BY姓名 6. 查询所有在2008.11.15日以后被借阅过的图书名及借阅者。 USE图书读者 SELECT读者.编号,借阅.读者编号,书名,姓名,借阅日期 FROM图书,读者,借阅

数据库上机实验(有答案)

数据库上机实验内容及要求(第二部分) 1.建立工厂管理数据库 工厂(包括厂名和厂长名)需要建立一个管理数据库存储以下信息: (1)一个厂内有多个车间,每个车间有车间号、车间主任姓名、地址和联系电话; (2)一个车间有多个工人,每个工人有职工号、姓名、年龄、性别和工种; (3)一个车间生产多种产品,产品有产品号和价格;每种产品只能由一个车间生产; (4)一个车间制造多种零件,一种零件也可能为多个车间制造。零件有零件号、重量和价格; (5)一种产品可由多种零件组成,一种零件也可以装配出多种产品; (6)产品和零件均存入仓库; (7)厂内有多个仓库,仓库有仓库号、仓库主任姓名和电话。 根据以上需求分析结果,按照下述要求,设计并建立工厂管理数据库。 ◆分析实体及联系,设计E-R图。 ◆将E-R图转换成关系模式,并规范化到3NF。 ◆在Microsoft SQL Server2000中基于“企业管理器”建立数据库及相关对象(主 码,外码,索引,约束等)。 ◆测试数据入库 2.基于“查询分析器”,完成并保存下述题目的SQL脚本 (1)建立“工种”是“钳工”的所有职工详细信息的视图; create view View_工人_钳工 as select* from职工表 where工种='钳工' with check option (2)建立“车间号”是“CJ01”的钳工详细信息的视图; create view View_钳工_CJ01 as select* from View_工人_钳工 where车间号='CJ01' (3)建立使用了“零件号”是“LJ0002”的所有产品详细信息的视图; create view View_产品_零件LJ0002 as select产品表.产品号,价格,车间号,仓库号 from装配表,产品表 where装配表.产品号=产品表.产品号and零件号='LJ0002'(4)对零件表按照“零件号”建立唯一索引; create unique index Index_U_零件号on零件表(零件号) (5)对职工表按照“性别”建立聚簇索引; create clustered index Index_C_性别on职工表(性别) (6)查询使用了“零件号”是“LJ0002”的产品的生产车间号;

数据库基本操作习题与答案

第三章数据库基本操作 一、选择题 1. 如果需要给当前表增加一个字段,应使用的命令是________。 A) APPEND B) INSERT C) EDIT D) MODIFY STRU 2. 设表文件及其索引已打开,为了确保指针定位在物理记录号为1的记录上,应该使用命令________。 A) SKIP 1 B) SKIP -1 C) GO 1 D) GO TOP 3. 要显示数据库中当前一条记录的内容,可使用命令________。 A) LIST B) BROWSE C) TYPE D) DISPLAY 4. 在当前表中,查找第2个女同学的记录,应使用命令________。 A) LOCATE FOR 性别="女" B) LOCATE FOR 性别="女" NEXT 2 C) LIST FOR 性别="女" CONTINUE D) LOCATE FOR 性别="女" CONTINUE 5. Visual FoxPro的数据库表之间可建立两种联系,它们是________。 A) 永久联系和临时联系B) 长期联系和短期联系 C) 永久联系和短期联系D) 长期联系和临时联系 6. 数据库表的索引中,字段值不能有重复的索引有________种。 A) 1 B) 2 C) 3 D) 4 7. 建立表间临时关联的命令是________。 A) LET RELATION TO命令 B) JOIN命令 C) SET RELATION TO命令 D) 以上都不是 8. 通过关键字建立表间的临时关联的前提是________。 A) 父表必须索引并打开B) 子表必须索引并打开 C) 两表必须索引并打开D) 两表都不必索引 9. 查询设计器的“筛选”选项卡上,“插入”按钮的作用是________。 A) 用于增加查询输出字段B) 用于增加查询的表 C) 用于增加查询去向D) 用于插入查询输出条件 10. 在多工作区的操作中,如果选择了4,7,8号工作区并打开了相应的数据库,在命令窗口执行命令SELECT 0,其功能是________。 A) 选择4号工作区为当前工作区B) 选择0号工作区为当前工作区 C) 选择7号工作区为当前工作区D) 选择8号工作区为当前工作区 11. 表结构中空值(NULL)的含义是________。 A) 空格B) 尚未确定

数据库上机(实验一)作业

在订单数据库OrderDB中,完成如下的查询: (1)查询员工的姓名、职务和薪水。 select employeeName 员工姓名,headShip 职务,salary 薪水 from Employee (2)查询姓名中含有“有限”的客户名称和所在地。 select customerName 客户名称,address 所在地 from customer where customerName like'%有限%' (3)查询出姓“张”并且姓名的最后一个字为“梅”的员工。 select employeeNo 编号,sex 性别,birthday 出生日期,address 地址,telephone 联系电话,employeeName 员工姓名,headShip 职务,salary 薪水 from Employee where employeeName like'张%梅' (4)查询住址中含有“上海”或“南昌”的女员工,并显示其姓名、所属部门、职务、住址、出生日期和性别。如果出生日期为空,则显示“不祥”,否则按格式 “yyyy—mm—dd”显示,性别用“男”和“女”显示。 select employeeName 员工姓名,department 所属部门,headShip 职务,address 地址, case sex when'F'then'女' when'M'then'男' end性别, isnull(convert(char(10),birthday,120),'不详')出生日期 from Employee where sex like'F'and address like'上海%'or sex like'F'and address like'南昌%' (5)查询出职务为“职员”或职务为“科长”的女员工的信息。 select employeeNo 员工编号,employeeName 员工姓名, case sex when'F'then'女' when'M'then'男' end性别,birthday 出生日期,address 地址,telephone 联系电话,hireDate 雇佣时间,department 所属部门,headShip 职务,salary 薪水 from Employee where sex like'F'and headShip like'职员'or sex like'F'and headShip like'科长' (6)选取编号不在C20050001~C20050004之间的客户编号、客户名称、客户地址。 select customerNo 客户编号,customerName 客户名称,address 地址 from Customer where customerNo not between'C20050001'and'C20050004' (7)在表OrderMaster中挑选出销售金额大于等于5000元的订单。 先统计订单主表中的订单金额,使用命令:

全国计算机三级数据库技术上机试题100道

1.【考点分析】本题考查对4位整数的排序。考查的知识点主要包括:数组元素的排序算法,if判断语句和逻辑表达式,以及求余算术运算。 【解题思路】此题属于4位数排序问题。本题需主要解决3个问题:问题1如何取4位数的后3位进行比较;问题2如何按照题目要求的条件(按照每个数的后3位的大小进行降序排列,如果后3位相等,则按照原始4位数的大小进行升序排列)排序;问题3如何将排完序的前10个数存到数组bb中去。 本题的解题思路为:使用双循环对数组按条件进行排序,然后将排完序的前10个数存到数组bb中。对于问题1可以通过算术运算的取余运算实现(aa[i]%1000);问题2通过包含if判断语句的起泡排序法就可以实现。 【参考答案】 void jsSort() { int i,j; /*定义循环控制变量*/ int temp; /*定义数据交换时的暂存变量*/ for(i=0;i<199;i++) /*用选择法对数组进行排序*/ for(j=i+1;j<200;j++) { if(aa[i]%1000aa[j]) /*则要按原4位数的值进行升序排序*/ { temp=aa[i]; aa[i]=aa[j]; aa[j]=temp; } } for(i=0;i<10;i++) /*将排序后的前10个数存入数组b中*/ bb[i]=aa[i]; } 【易错提示】取4位数后三位的算法,if判断语句中逻辑表达式的比较运算符。 2.【考点分析】本题主要考查的知识点包括:C语言循环结构,if判断语句和逻辑表达式,以及分解多位整数的算术运算。 【解题思路】分析题干,本题除给出条件"SIX+SIX+SIX = NINE+NINE"之外,还可得出2个隐含的条件:条件1:SIX和NINE分别是3位和4位的正整数;条件2:SIX的十位数字等于NINE的百位数字,NINE的千位数字和十位数字相等。 本题解题思路:通过嵌套的循环结构可以遍历到所有的3位和4位数,对于每一个3位数及4位数的组合进行题设条件(SIX+SIX+SIX = NINE+NINE)的判断,满足条件的对其分解得到各数位的数字,再进一步判断各位数字是否满足本题隐含的条件(条件1及条件2),如果满足则个数加1,并将该3位数及4位数添加到和值中。 【参考答案】 void countValue() { int i,j; int s2; int n2,n3,n4; for(i=100;i<1000;i++)

相关主题
文本预览
相关文档 最新文档