数据库期中考试(二)

三、关系代数题(共10分)

设有一图书管理系统,由如下三个关系组成。
图书(书号,书名,作者,类型,页数,价格,),主键为书号;
读者(借书证号,姓名,性别,学历,住址,电话),主键为借书证号,学历只能取“助教”、“讲师" “副教授、“教授”四个值;
借阅(借书证号,书号,借书日期,还书日期),主键为《借书证号,书号),有两个外键,一个是借书证导,另一个是书号。
请用关系代数完成以下操作。
1、(2 分)查询所有图书的书名、价格。
2、(2分) 查询姓名为张三的读者的姓名和学历。
3、(6 分)查询没有还书的读者的姓名以及他未还图书的书名

1. π 书名, 价格 (图书)
2. π 姓名, 学历 ( σ 姓名='张三' (读者))
3. π 姓名, 书名(σ还书日期=NULL(图书 ⨝ 读者 ⋈借阅))


四、SQL语句设计题(共25分)
针对上题的图书管理系统,请用 SQL 语言完成以下操作。(所有字段名均用中文即可。如用字母。请用文字明确标明含义)
1)(1分)创建名为图书管理的数据库,参数均为默认值即可。
2)(2分)按要求创建名为图书的数据表。
3)(2 分) 按要求创建名为借阅的数据表。
4)(2 分) 查询所有图书的书名、价格。
5)(2分) 查询学历为讲师的读者的所有信息。
6) (2 分)查询姓名为张三的读者的姓名和学历。
7)(2 分) 查询所有读者的姓名及借阅的图书书名。
8) (2分) 查询读者人数,并按职称分类。
9)(2 分)为图书表插入·条记录,记录的书号为 B10,书名为《平凡的世界》,其余属性均为空
10) (2 分)将上题插入的《平凡的世界》的价格修改为 68 元。
11) (2 分)删除读者张三的所有借阅记录。
12) (2分)在图书表的姓名字段.l:创建一-索引,名为 indexl。
13) (2 分) 创建一视图,显示未还书的读者借书证号和他未还的图书的书号及借阅时间。

1) create database 图书管理;
2) create table 图书(
    书号 char(10) not null primary key,
    书名 varchar(50),
    作者 varchar(50),
    类型 varchar(20),
    页数 int,
    价格 decimal(10,2)
);
3) create table 借阅(
    借书证号 char(10),
    书号 char(10),
    借书日期 date,
    还书日期 date,
    primary key (借书证号,书号),
    foreign key (借书证号) references 读者(借书证号),
    foreign key (书号) references 图书(书号)
);
4) select 书名, 价格 from 图书;
5) select * from 读者 where 学历='讲师';
6) select 姓名, 学历 from 读者 where 姓名='张三';
7) select 读者.姓名, 图书.书名 
    from 读者,图书,借阅 
       where 读者.借书证号=借阅.借书证号 and 借阅.书号=图书.书号;
8) select count(*) as "读者人数", 学历 as "职称" from 读者 group by 学历;
9) insert into 图书(书号, 书名) values ('B10', '平凡的世界');
10) update 图书 set 价格=68 where 书名='平凡的世界';
11) delete from 借阅 where 借书证号 in (select 借书证号 from 读者 where 姓名='张三');
12) create index index1 on 图书(书名);
13) create view 未还书的读者 as
    select 借阅.借书证号, 借阅.书号, 借书日期
    from 借阅
    where 还书日期 is null;


五、程序设计题(共25分)

1.(7分)请写出下面代码的执行结果

declare @Compute int,@x int 
Set @Compute=0 
while @Compute<10 
	begin 
	if @Compute<5 
		begin 
		set @Compute=@Compute+1 
		set @x=@Compute 
		print cast(@x As Char(5)) 
		end 
	else 
		begin 
		set @Compute=@Compute+2 
		set @x=@Compute 
		print cast(@x As Char(5)) 
		end 
	end

 

 2.(9分)创建一个名为p1的存储过程,用参数@name 传入读者姓名,如果此人借阅过图书,显示借书数目;如果此人没有借阅过图书,显示“他很懒”的字样。

create procedure p1
    @name varchar(20)
as
begin
    if exists(select * from Borrow where reader_name = @name)
        select count(*) as borrow_count from Borrow where reader_name = @name
    else
        print '他很懒'
end

3.(9分)为图书表创建一个名为t1的插入触发器,当在该表中插入记录时,显示”又来新书了“。并编写一条语句,用来触发t1的代码运行。

-- 创建触发器
create trigger t1
on Book
after insert
as
begin
    print '又来新书了'
end

-- 触发代码运行
insert into Book (book_name, author, publish_date, price) values ('小王子', '圣埃克苏佩里', '1943-04-06', 29.99)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值