数据库原理复习题1006文档格式.docx
《数据库原理复习题1006文档格式.docx》由会员分享,可在线阅读,更多相关《数据库原理复习题1006文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
电话
E_mail
M
借书人
借书证号姓名单位
图书关系模式:
图书(书号,书名,数量,位置,出版社名)
关系主键:
外键:
出版社名
借书人关系模式:
借书人(借书证号,姓名,单位)
借书证号
出版社关系模式:
出版社(出版社名,邮编,地址,电话,E-mail)
借阅关系模式:
借阅(借书证号,书号,借书日期,还书日期)
(借书证号,书号)
外键1:
外键2:
二、有一个[学生课程]数据库,数据库中包括三个表:
学生表(学号,姓名,性别,年龄,所在系)
课程表(课程号,课程名,先修课号,学分)
成绩表(学号,课程号,成绩)
用SQL语言编写实现下列功能的代码:
1、建立一个[学生表],要求设置学号属性为主键,规定年龄大于
2、查询年龄在20至23岁之间的学生的姓名、系别、和年龄。
3、查询各系的人数及平均年龄。
4、计算“数据库原理”课程的学生平均成绩。
5、将计算机科学系全体学生的成绩置零。
6、创建一个“经济系”全体学生的视图V_JJX。
7、创建一个自定义函数,可以求解任意数n的阶乘累加和,即计算
+n!
,并用n=10调用该函数。
8、建一个规则,并将其绑定到学生表的所在系列上,规定取值为(
16。
S=1!
+2!
+3!
+⋯⋯
'
经济系'
'
管理系'
机电
系'
信息系'
)之一。
9、创建一个触发器,要求当更新课程表的课程号时,能更新成绩表中相应的课程号。
答案:
1、建立一个学生表。
CREATETABLE学生表
(学号CHAR(5)PRIMARYKEY,
姓名CHAR(20),
性别CHAR
(2),
年龄INTCHECK(
所在系CHAR(15))
年龄>
16),
2、查询年龄在20至23岁之间的学生的姓名、系别、和年龄
SELECT姓名,所在系,年龄
FROM学生表
WHERE年龄BETWEEN20AND23
SELECT所在系,COUNT(*),AVG(
年龄)
GROUPBY所在系
4、计算数据库应用课程的学生平均成绩
SELECTAVG(成绩)
FROM成绩表
WHERE课程号in
(SELECT课程号
WHERE课程名='
FROM课程表
数据库应用'
)
5、将计算机科学系全体学生的成绩置零
UPDATE成绩表
SET成绩=0
WHERE学号in
(SELECT学号FROM学生表
WHERE所在系='
计算机科学系
6、createviewV_JJX
as
select*from学生表
WHERE所在系
='
7、
CREATEFUNCTION
F_C(@nINT)
RETURNSBIGINTAS
BEGIN
DECLARE@iint,@pbigint,@sbigint
SELECT@i=1,@p=1,@s=0
WHILE@i<
=@n
SET@p=@p*@i
SET@s=@s+@p
SET@i=@i+1
END
Return@S
Go
selectdbo.F_C(10)--调用
8.
Create
rule
r_szx
@zcin
('
管理系
机电系
go
execsp_bindrule
‘r_szx
’,
‘学生表
.
所在系’
9、
Createtriggertr_up_kconkc
Forupdate
As
Declare@kh_oldchar(3),@kh_newchar(3)
Select@kh_old=deleted.课程号,@kh_new=inserted.
Fromdeletedd,insertedi
Whered.课程名=i.课程名
Updatexs_kcset课程号=@kh_new
课程号
Where课程号=@kh_old
工程名称
修路A段
铺路B段
三、现有关系数据库如下:
数据库名:
工程管理
职工表(职工编号char(6),姓名,性别,民族,工资,身份证号)
工程表(工程号char(6),名称)
参加表(ID,职工编号,工程号,天数)
用SQL语言实现下列功能的sql语句代码:
1.
创建数据库,名为
[工程管理],其它参数可自己指定
(5分)。
2.
创建上述三表的代码
(12分);
要求使用以下约束:
主键(职工表.职工编号,工程表.工程号)、外键(参加表.职工编号,参加表.工程号)、默认(民族:
汉族)、非空(姓名)、唯一(身份证号)、检查(性别、天数在0~200之间),自动编号(ID)
3.插入、修改与删除记录操作(12分):
(1)向工程表插入:
工程号
100001
100003
(2)修改工程号为100003的工程名称为:
基座打桩
(3)删除工程号为100003的工程信息
4.创建名为[参加表视图]的视图(姓名,工程名称,天数);
(8分)
5.创建名为[某工程参加职工]的内嵌表值函数,完成输入一项工程号,返回表中含有参加
该工程的职工的职工姓名、性别、工资、身份证号和天数;
(5分)
调用函数检索:
所有参加'
100001'
这项工程的职工姓名;
(3分)。
6.创建名为[职工参加天数]的存储过程:
在[参加表视图]中查找某给定姓名的职工参加所
有工程的总天数。
(5分)
执行存储过程:
计算职工“张明”的总天数。
(3分)
7.创建一个名为[GZ_RULE]的规则,并将其绑定到职工表的工资列上,规定取值为1000
元到3000元之间。
(6分)
8.创建一个名为[del_tr]的触发器,如果某人参加工程的天数不为0,就不能删除该职工的
信息,即回滚撤销删除。
(6分)
createdatabase[
use[工程管理
]
--
(5
分)
createtable
职工表
([
[
编号]char(6)primarykey,姓名]nchar(4)notnull,性别]nchar
(1)check([民族]nchar(8)default'
性别]in('
男'
汉族'
notnull,
女'
)),
[工资]nchar(12),
[身份证号]char(18)unique
createtable工程表--(2分)
([工程号]char(6)primarykey,
[工程名称]char(40)notnull
createtable参加表
(IDIDENTITY(1,1),
[职工编号]char(6)references
[工程号]char(6)references
[天数]intcheck([天数
职工表(职工编号
工程表(工程号),
]between0and200)
(4),
3.
insert
update
delete
工程表工程表工程表工程表
values('
修路
100003'
铺路
set名称='
基座打桩'
where
where工程号='
A段'
B段'
工程号='
4.
createview[
select姓名,
where职工表.
参加表视图]as
工程名称,天数from职工表,参加表,工程表
职工编号=参加表.职工编号AND职工表.编号=参加表
职工编号
5.
createfunction[
某工程参加职工
](@
varchar(6))
returnstableas
return(select
fromwhere
姓名、性别、工资、身份证号,天数
职工表.编号=参加表.职工编号AND工程号=@工程号
select*from[
]('
6.
createprocedure[职工参加天数]
@职工名nchar(16)
begin
selectsum(天数)from参加表视图
where姓名=@职工名
end
execute[职工参加天数]'
张明'
7.
createrulegz_rule_
as@GZBETWEEN1000AND3000
sp_bindrule‘gz_rule’,'
职工表
工资'
Createtriggerdel_tron
Fordelete
Begin
If(select
天数from
参加表where
职工号in
(select
职工号fromdeleted))<
>
Rollback
四、1、计算1+2*3+4*5+6*7
⋯⋯+96*97+98*99
的和,并使用
PRINT显示计算结果。
DECLARE@Iint
,@sumint,@csumchar(10)
SELECT@I=________
,@sum=______
WHILE@I<
=_________
SELECT@I=__________
SELECT@sum=__________
SELECT@csum=convert(char(10),@sum)
__________
’1+2*3+4*5+6*7
=’+@csum
2、假定某单位有一工资数据表,表名为
GZ,部分数据如下:
工号
姓名
基本工资
津贴
公积金
养老保险
失业保险
医疗保险
1001
程
鑫1,200.00
100.00
10.00
30.00
20.00
1002
李倩如1,100.00
123.00
12.00
23.00
21.00
1103
张大宏1,111.00
121.00
1104
赵楠欣1,212.00
211.00
13.00
31.00
32.00
对以上数据表要做如下处理:
如果平均岗位津贴低于150元,则使用
有人的岗位津贴加10元,如果最高岗位津贴超过300元,则退出WHILE
USETEST
GO
DECLARE@avgjtdecimal(4,1)
WHILE________________________<
150
UPDATEGZ
SET_______________________
IF______________________________>
300
PRINT'
最高岗位津贴超过300元'
____________--中途退出WHILE循环
WHILE循环。
循环将所
SELECT@avgjt=AVG(岗位津贴)FROMGZ
PRINT'
岗位津贴增加完毕,平均岗位津贴为:
+
STR(@avgjt,4,1)
3.给定一个身份证号,返回其中的省份编码和生日数据。
DECLARE@sfzhchar(18)
SET@sfzh=’420103************’
PRINT‘省份编码是:
’+
PRINT‘生日数据是: