当前位置:文档之家› (完整版)上海大学数据库上机作业上机练习4作业

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

(完整版)上海大学数据库上机作业上机练习4作业
(完整版)上海大学数据库上机作业上机练习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图书,读者,借阅

WHERE读者.编号=借阅.读者编号AND借阅.书号=图书.书号

AND借阅日期>'2008-11-15'

ORDER BY姓名

三、利用上次上机的学生_课程数据库

1. 查询每个学生的情况以及他所选修的课程。

USE学生课程

SELECT学生.学号,姓名,选课.课程号,课程名,单位

FROM学生,选课,课程

WHERE学生.学号=选课.学号AND选课.课程号=课程.课程号

ORDER BY学号

2.求学生的学号、姓名、选修的课程名及成绩。

USE学生课程

SELECT学生.学号,姓名,选课.课程号,课程名,成绩

FROM学生,选课,课程

WHERE学生.学号=选课.学号AND选课.课程号=课程.课程号

ORDER BY学号

3.求选修C1课程且成绩为90分以上的学生学号、姓名及成绩。

USE学生课程

SELECT学生.学号,姓名,选课.课程号,课程名,成绩

FROM学生,选课,课程

WHERE学生.学号=选课.学号AND选课.课程号=课程.课程号AND选课.课程号=’C1’ AND成绩>90 ORDER BY学生.学号

4. 查询每门课程的间接先行课(就是先行课的先行课)。

USE学生课程

SELECT选课.课程号,课程名,先行课

FROM选课,课程

WHERE选课.课程号=课程.课程号

四、完成书上P158页上机实验题4

1.显示所有职工的年龄,并按职工号递增排序。

USE factory

SELECT职工号,DATEDIFF(YY,GETDATE(),出生日期)AS年龄

FROM worker

ORDER BY职工号

2.求出各部门的党员人数。

USE factory

SELECT部门号,SUM(cast(党员否as bigint))AS党员人数

FROM worker

WHERE党员否='True'

GROUP BY部门号

3.显示所有职工的姓名和2004年1月份的工资数。

USE factory

SELECT姓名,工资

FROM salary

WHERE日期='2004-01-04'

4.显示所有职工的职工号、姓名和平均工资。

USE factory

SELECT职工号,姓名,A VG(工资)AS平均工资

FROM salary

GROUP BY职工号,姓名

5.显示所有职工的职工号、姓名、部门名和2004年2月份的工资,并按部门名顺序排

序。

USE factory

SELECT salary.职工号,salary.姓名,部门名,工资

FROM salary,depart,worker

WHERE worker.部门号=depart.部门号AND日期='2004-02-03'AND worker.职工号=salary.职工号ORDER BY部门名

6.显示个部门名和该部门的所有职工平均工资。

USE factory

SELECT depart.部门名,A VG(工资)AS平均工资

FROM salary,depart,worker

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

GROUP BY depart.部门名

7.显示所有平均工资高于1200的部门名和对应的平均工资。

USE factory

SELECT depart.部门名,A VG(工资)AS平均工资

FROM salary,depart,worker

WHERE worker.部门号=depart.部门号

AND worker.职工号=salary.职工号

GROUP BY depart.部门名

HA VING A VG(工资)>1200

8.显示所有职工的职工号、姓名和部门类型,其中财务部和人事部属管理部门,市场部属市场部门。

USE factory

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

CASE rtrim(部门名)

WHEN'财务处'THEN'管理部门'

WHEN'人事处'THEN'管理部门'

WHEN'市场部'THEN'市场部门'

ELSE'其他部门'

END AS部门类型

FROM worker inner join depart On worker.部门号=depart.部门号

9.若存在职工号为10的职工,则显示其工作部门名称,否则显示相应的提示信息。USE factory

GO

DECLARE@no int,@dep char(10)

SET@no=10

IF EXISTS(SELECT*FROM worker WHERE职工号=@no)

BEGIN

SELECT@dep=depart.部门名

FROM worker,depart

WHERE worker.职工号=@no AND worker.部门号=depart.部门号

PRINT'职工号为'+CAST(@no AS CHAR(2))+'的职工在'+

CAST(@dep AS char(6))+'工作'

END

ELSEqw

PRINT'不存在该员工的记录'

GO

第二种:

USE factory

DECLARE@cno int

SET@cno=10

IF EXISTI (SELECT * FROM worker WHERE 职工号=@cno)

SELECT 部门名FROM depart WHERE 部门号IN(SELECT 部门号FROM worker WHERE 职工号

=@cno)

ELSE

SELECT ‘没有该工号’

10.求出男女职工的平均工资,若男职工平均工资高于女职工平均工资50%,怎显示“南‘男职工比女职工的工资高多了’,若男职工平均工资高于女职工平均工资比率在1.5-0.8之间,则显示男职工平均工资高于女职工平均工资差不多“”的信息,否则“女职工平均工资高于男职工平均工资”

USE factory

GO

DECLARE@avg1float,@avg2float,@ratio float

--计算男职工平均工资

SELECT@avg1=A VG(工资)

FROM worker,salary

WHERE worker.职工号=salary.职工号AND worker.性别='男'

--计算女职工平均工资

SELECT@avg2=A VG(工资)

FROM worker,salary

WHERE worker.职工号=salary.职工号AND worker.性别='女'

SET@ratio=@avg1/@avg2

IF@ratio>1.5

PRINT'男职工比女职工的工资高多了'

ELSE

IF@ratio>=0.8

PRINT'男职工跟女职工的工资差不多'

ELSE

PRINT'女职工比男职工的工资高多了'

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-Server数据库上机实验报告

SQL-Server数据库上机实验报告

《数据库系统原理》上机实验报告 学号:1120131743 姓名:谈兆年 班级:07111301

一、实验目的与要求: ●熟练使用SQL语句 ●掌握关系模型上的完整性约束机制 二、实验内容 1:利用SQL语句创建Employee数据库 CREATE DATABASE Employee; 结果: 2:利用SQL语句在Employee数据库中创建人员表person、月薪表salary及部门表dept。 做法:按表1、表2、表3中的字段说明创建 表1 person表结构 字段名数据 类型 字段 长度 允许空 否 字段说明 P_no Char 6 Not Null 工号,主键P_na Varch10 Not 姓名

me ar Null Sex Char 2 Not Null 性别 Birth date Dateti me Null 出生日期 Prof Varch ar 10 Null 职称 Dept no Char 4 Not Null 部门代码,外键 (参照dept表)表2 salary表结构 字段名数据 类型 字段 长度 允许空 否 字段说明 P_no Char 6 Not Null 工号,主键,外键(参照person表) Base Dec 5 Null 基本工资Bonu s Dec 5 Null 奖金,要求>50 Fact Dec 5 Null 实发工资=基本工 资+奖金 Mont h Int 2 Not Null 月份

表3 dept表结构 字段名数据 类型 字段 长度 允许空 否 字段说明 Dept no Char 4 Not Null 部门代码,主键, Dna me Varch ar 10 Not Null 部门名称 程序为: CREATE TABLE dept( deptno CHAR(4) PRIMARY KEY NOT NULL, dname V ARCHAR(10) NOT NULL) CREATE TABLE Person( P_no CHAR(6) PRIMARY KEY Not Null, P_name V ARCHAR(10) Not Null, Sex CHAR(2) Not Null, Birthdate Datetime Null, Prof V ARCHAR(10) Null, Deptno CHAR(4) Not Null, FOREIGN KEY(Deptno) REFERENCES

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

数据库上机实验报告

数据库实验 (第三次) 题目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) )

数据库作业 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,--缺勤天数(主键)

数据库上机实验报告正式版

For the things that have been done in a certain period, the general inspection of the system is also a specific general analysis to find out the shortcomings and deficiencies 数据库上机实验报告正式 版

数据库上机实验报告正式版 下载提示:此报告资料适用于某一时期已经做过的事情,进行一次全面系统的总检查、总评价,同时也是一次具体的总分析、总研究,找出成绩、缺点和不足,并找出可提升点和教训记录成文,为以后遇到同类事项提供借鉴的经验。文档可以直接使用,也可根据实际需要修订后使用。 数据库上机实验报告 试验内容 1、数据表的建立 基本表《简单的》带有主键 带有外码约束的(外码来自其他表或者本表) 2、数据表的修改 添加删除列 修改列属性类型 添加删除约束(约束名) 元组的添加,修改,删除 删除数据表

试验过程 1、createtablestudent ( snochar(9)primarykey,/*sno是主码列级完整性约束条件*/ snamechar(20)unique,/*sname取唯一值*/ ssexchar(2), sagesmallint,/*类型为smallint*/ sdeptchar(20)/*所在系*/ ); createtablecourse ( cnochar(4)primarykey,/*列级完整性约束条件,cno是主码*/

cnamechar(40), cpnochar(4),/*cpno的含义是先行课*/ ccreditsmallint, foreignkey(cpno)referencescourse(cno) /*表级完整性约束条件,cpno是外码,被参照表是course,被参照列是 cno*/ ); createtablesc ( snochar(9), cnochar(4), gradesmallint,

数据库上机作业

数据库上机实验报告 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/3118283551.html, FROM Ships , Classes WHERE Ships.class = Classes.class AND Classes.displacement>35000 b)找出参加Guadalcanal战斗的船只的名字、排水量和火炮数量。 SELECT https://www.doczj.com/doc/3118283551.html,, C.displacement, C.numGuns FROM Ships S, Outcomes O, Classes C WHERE https://www.doczj.com/doc/3118283551.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';

数据库上机实验报告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运费,

上海大学数据库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作业

上大学数据库上机作业 《数据库系统与应用》上机习题************************************************************************************************* 第四部分、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”的产品的生产车间号;

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

在订单数据库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元的订单。 先统计订单主表中的订单金额,使用命令:

数据库上机实验报告 总结

重庆邮电大学移通学院 数据库集中上机报告 学生:马志鹏 学号: 022******* 班级: 02210901 专业:计算机应用技术 重庆邮电大学移通学院 2011年6月

第一天:Access数据库基本操作 1 实验目的 1、熟悉的掌握Access数据库结构与创建 2、了解创建、修改、删除、查询、保存等操作 3、输入数据创建、设计器创建、向导创建。 2 实验内容 3 实验结果 1. 2. 2

重庆邮电大学移通学院 3 2 Access 数据表的编辑 第二天 数据表基本操作 1 表关系与编辑数据 1 实验目的: 1、实现一对一,一对多,多对多的实体关系 2、对“学生基本信息”表中的记录进行排序,按出生日期降序排列 3、从“学生基本信息”表中筛选出所有计算机系男生的记录 4、从“学生基本信息”表中筛选出回族和蒙古族的所有学生记录

2 实验内容 1. SELECT 学生基本信息表.学生姓名, 成绩档案表.* FROM 成绩档案表INNER JOIN 学生基本信息表ON 成绩档案表.学生学号= 学生基本信息表.学生学号 WHERE (((学生基本信息表.学生姓名)="张冰冰")); 2 SELECT 学生基本信息表.* FROM 学生基本信息表 WHERE (((学生基本信息表.性别)="男") AND ((学生基本信息表.班级名称)="计算机系")); 3 SELECT 成绩档案表.C语言, 课程表.* FROM 成绩档案表, 课程表; 4 SELECT 学生基本信息表.*, 学生基本信息表.性别, 学生基本信息表.班级名称FROM 学生基本信息表WHERE (((学生基本信息表.性别)<>"男") AND ((学生基本信息表.班级名称)<>"计算机系")); 5 SELECT 学生基本信息表.*, 学生基本信息表.出生日期 FROM 学生基本信息表WHERE (((Month([出生日期]))=9) AND ((Day([出生日期]))=1)); 6 SELECT 学生基本信息表.* FROM 学生基本信息表WHERE (((学生基本信息表.学生姓名) Like "李*")); 3 实验结果 4

全国计算机三级数据库技术上机试题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++)

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

上机实验八——完整性约束的实现 一、实习目的: 掌握SQL中实现数据完整性的方法,加深理解关系数据模型的三类完整性约束。 二、实习准备: 1.复习“完整性约束SQL定义” 2.完成习题四第10题中的各项操作的SQL语句。 3.了解SQL Server 中实体完整性、参照完整性和用户自定义完整性的实现手段 三、实习内容: 1.验证习题四第10题四个表结构的SQL语句。 表一:Sstudent CREATE TABLE Sstudent (Sno char(7) NOT NULL PRIMARY KEY, Sname VarChar(20) NOT NULL, Ssex Char(2) NOT NULL DEFAULT('男') check(Ssex IN('男','女')), Sage smallint check(Sage >14 AND Sage<65), Clno Char(5) NOT NULL REFERENCES Cclass(Clno) ON UPDATE CASCADE); 表二:Ccourse CREATE TABLE Ccourse (Cno Char(1) NOT NULL PRIMARY KEY, Cname VarChar(20) NOT NULL, Credit Smallint CHECK(Credit IN(1,2,3,4,5,6)));

表三:Cclass CREATE TABLE Cclass (Clno Char(5) NOT NULL PRIMARY KEY, Speciality VarChar(20) NOT NULL, Inyear Char(4) NOT NULL, Number Integer CHECK(Number>1 AND Number<100), Mointor Char(7) REFERENCES Student(Sno) ); 表四:Ggrade CREATE TABLE Ggrade (Sno Char(7) NOT NULL REFERENCES Student(Sno) ON DELETE CASCADE ON UPDATE CASCADE, Cno Char(1) NOT NULL REFERENCES Course(Cno) ON DELETE CASCADE ON UPDATE CASCADE, Gmark Numeric(4,1) CHECK(Gmark>0 AND Gmark<100), PRIMARY KEY(Sno,Cno)); 2. SQL Server中提供了那些方法实现实体完整性、参照完整体和用户自定义完整性 答:实体完整性:是通过主码的定义(PRIMARY KEY)来实现的; 参照完整性:是利用外部码(REFERENCES)的说明,以限制相关表中某些属性的取值,当用户违反规则时,提供三种:RESTRICT(限制策略),CASCADE(级联策略),SET NULL(置空策略); 用户自定义完整性:check约束,对元组的CHECK约束

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