数据库原理与应用(庞国莉)题目+答案 下载本文

1、 设有一图书馆数据库,包括三个表:图书表、读者表、借阅表。三个表

的结构如表3-3、表3-4和表3-5所示。完成以下习题。

表3-3 图书表结构

列名 说明 图书图书唯一的图书号 号 数据类型 约束 定长字符串,长度为主键 20 空值 书名 图书的书名 变长字符串,长度为50 作者 图书的编著者名 变长字符串,长度为空值 30 出版社 单价 图书的出版社 变长字符串,长度为空值 30 出版社确定的图书的单浮点型,FLOAT 价 空值 表3- 4 读者表结构

列名 读者号 姓名 性别 说明 数据类型 读者唯一编定长字符串,长度为10 号 读者姓名 定长字符串,长度为8 读者性别 约束说明 主键 非空值 定长字符串,长度为2 非空值 空值 办公电读者办公电定长字符串,长度为8 话 话 部门 读者所在部变长字符串,长度为30 门 空值 表3- 5 借阅表结构

列名 读者号 说明 数据类型 约束说明 读者的唯一编定长字符串,长度为外码,引用读者表的号 10 主键 图书号 图书的唯一编定长字符串,长度为外码,引用图书表的号 20 主键 图书借出的日借出日定长字符串,长度为非空值 期 期 8,为’yymmdd’ 归还日图书归还的日定长字符串,长度为空值 期 期 8,为’yymmdd’ 主键为:(读者号, 图书号) (1)用SQL语句创建图书馆数据库。 Create database 图书馆数据库; (2)用SQL语句创建上述三个表。 use 图书馆数据库 Go

create table book

( bnum char (20) primary key, bname varchar (50), bwri varchar (30), bpub varchar (30),

bpri float );

use 图书馆数据库 go

create table rea

use 图书馆数据库 go

create table br

( rnum char (10) not null, bnum char (20) not null, brdate char (8) not null, brback char (8),

foreign key (rnum) references rea(rnum), foreign key (bnum) references book(bnum) ( rnum char (10) primary key, rname char (8) not null, rsex char (2) not null, rphone char (8), rpar char(30) );

);

(3)基于图书馆数据库的三个表,用SQL语言完成以下各项操作: 1)给图书表增加一列“ISBN”,数据类型为CHAR(10)

alter table book add ISBN CHAR(10);

2)为刚添加的ISBN列增加缺省值约束,约束名为ISBNDEF,缺省值为’7111085949’;

ALTER TABLE BOOK

ADD CONSTRAINT ISBNDEF DEFAULT '7111085949' FOR ISBN;

3)为读者表的’办公电话’列,添加一个CHECK约束,要求前五位’88320’,约束名为CHECKDEF。

ALTER TABLE REA

ADD CONSTRAINT CHECKDEF CHECK (RPHONE >='88320000' AND RPHONE <='88320999');

4)删除图书表中ISBN列增加缺省值约束; ALTER TABLE BOOK DROP ISBNDEF;

5)删除读者表中“办公电话”列的CHECK约束;

ALTER TABLE REA DROP CHECKDEF;

6)删除图书表中新增的列ISBN;

ALTER TABLE BOOK DROP COLUMN ISBN;

(4)基于图书馆数据库的三个表,用SQL语言完成以下数据更新操作: 1)向读者表加入一个新读者,该读者的信息为:

(‘200197’, ‘王小平’, ‘男’ , ‘88320732’,’存中楼’)

INSERT INTO REA

VALUES ('200197','王小平','男','88320732','信息系');

2)向借阅表插入一个借阅记录,表示读者’王小平’借阅了一本书,图书号为’TP316/ZW6’,借出日期为当天的日期,归还日期为空值。

INSERT

INTO BOOK(BNUM) VALUES ('TP316/ZW6'); INSERT INTO BR VALUES

('200197','TP316/ZW6',convert( CHAR(8) ,GETDATE(),112),NULL);

3)读者’王小平’在借出上述图书后10 归还该书;

UPDATE BR

SET BRBACK= BRDATE+10 (10什么时候开应该加引号,什么是不加)

WHERE BNUM = 'TP316/ZW6';

4)当读者’王小平’按期归还图书时,删除上述借阅记录; DELETE FROM BR

WHERE rnum=(select rnum

from rea

where rname = '王小平')

(5)针对以上三个表,用SQL语言完成以下各项查询: 1)查询全体图书的图书号,书名,作者,出版社,单价。

select bnum,bname,bwri,bpub,bpri from book;

2)查询全体图书的信息,其中单价打8折,并且将该列设置别名为’打折价’ 。

select bnum,bname,bwri,bpub, bpri*0.8 打折价 from book;

3)显示所有借阅者的读者号,并去掉重复行。

select distinct rnum from br

4)查询所有单价在20到30之间的图书信息。

select * from book

where bpri between 20 and 30

5)查询所有单价不在20到30之间的图书信息。

select * from book

where bpri not between 20 and 30

6)查询机械工业出版社、科学出版社、人民邮电出版社的图书信息

select * from book

where bpub in ('机械工业出版社','科学出版社','人民邮电出版社')

7)查询既不是机械工业出版社、也不是科学出版社出版的图书信息

select * from book

where bpub not in ('机械工业出版社','科学出版社')

8)查找姓名的第二个字符是’建’并且只有两三个字符的读者的读者号、姓名。

select rnum ,rname from rea

where rname in ('_建‘,’_建_')

9)查找姓名以’王’开头的所有读者的读者号、姓名。

select rnum ,rname from rea

where rname like '王%'

10)查找姓名以’王’、’张’或’李’开头的所有读者的读者号、姓名。

select rnum ,rname from rea

where rname like ('王%','张%','李%')

11)查找姓名不是以’王’、’张’或’李’开头的所有读者的读者号、姓名。

select rnum ,rname from rea

where rname not like ('王%','张%','李%')

12)查询无归还日期的借阅信息。

select * from br

where brback = 'null'

13)查询有归还日期的借阅信息。

select * from br

where brback != 'null'

14)查询单价在20元以上,30元以下的机械工业出版社出版的图书名,单价。

select bname,bpri from book

where (bpri between 20 and 30) and bpub = '机械工业出版社'

15)查询机械工业出版社或科学出版社出版的图书名,出版社,单价。

select bname,bpub,bpri from book

where bpub = '机械工业出版社' or bpub = '科学出版社'

16)求读者的总人数

select count (*) 总人数 from rea

17)求借阅了图书的读者的总人数

select count (distinct rnum ) 借阅总人数 from br

18)求机械工业出版社图书的平均价格、最高价、最低价。

select AVG (bpri) avg , MAX (bpri) max , MIN (bpri) min from book

where bpub = '机械工业出版社'

19)查询借阅图书本数超过2本的读者号、总本数。并按借阅本数值从大到小排序。

select rnum,COUNT (bnum) 总本数 from br Group by rnum

having COUNT(bnum) >2 order by (count (bnum)) desc

(6)针对以上三个表,用SQL语言完成以下各项多表连接查询、子查询、组

合查询

1)查询读者的基本信息以及他/她借阅的情况。

select rea.* ,br.bnum ,br.brback ,br.brdate from rea,br

where rea.rnum = br.rnum

2)查询读者的读者号、姓名、借阅的图书名、借出日期、归还日期。

select br.bnum ,rea.rname,book.bname,br.brback ,br.brdate from rea,br,book

where rea.rnum = br.rnum and book.bnum=br.bnum

3)查询借阅了机械工业出版社出版,并且书名中包含’数据库’三个字的图书的读者,显示读者号、姓名、书名、出版社,借出日期、归还日期。

select rea.rnum,rea.rname,book.bname,br.brback ,br.brdate from rea,br,book

where book.bname like '%数据库%' and bpub = '机械工业出版社' and rea.rnum = br.rnum and book.bnum=br.bnum

4)查询至少借阅过1本机械工业出版社出版的书的读者的读者号、姓名、书名,借阅本数,并按借阅本数多少降序排列。

select br.rnum,rea.rname,bname,COUNT(br.bnum )本数 from book,rea,br

where rea.rnum = br.rnum and book.bnum = br.bnum and book.bnum = ' 机械工业出版社' Group by br.rnum ,rname,bname

having COUNT(bname) >=1 order by COUNT(br.bnum) desc

5)查询与’王平’的办公电话相同的读者的姓名。

select r1.rname from rea r1,rea r2

where r1.rname = '王平' and r1.rphone = r2.rphone

6)查询办公电话为’88320701’的所有读者的借阅情况,要求包括借阅了书籍的读者和没有借阅的读者,显示他们的读者号、姓名、书名、借阅日期。

select rea.rnum,rname,bname,brdate from book,rea,br

where rphone = '88320701' and rea.rnum = br.rnum

and book.bnum = br.bnum

7)查询所有单价小于平均单价的图书号、书名、出版社

select bnum,bname,bpub from book

where bpri < (select AVG(bpri)

from book )

8)查询’科学出版社’的图书中单价比’机械工业出版社’最高单价还高的的图书书名、单价。

select bname ,bpri from book

where bpub = '科学出版社' and bpri > (select MAX (bpri)

9)查询'科学出版社'的图书中单价比'机械工业出版社'最低单价高的的图书书名、单价。

rom book

where bpub = '机械工业出版社')

select bname ,bpri from book

where bpub = '科学出版社' and bpri > (select Min (bpri)

from book

where bpub = '机械工业出版社')

10)查询已被借阅过并已归还的图书信息。

select * from book

where bnum in ( select bnum

from br

where brback is not null)

11)查询从未被借阅过的图书信息。

select * from book

where bnum not in ( select bnum

from br

)

12)查询正在借阅的图书信息。

select * from book

where bnum in ( select bnum

from br

where brdate not like 'null' and brback like null )

13)查询借阅了机械工业出版社出版的书名中含有数'据库书'三个字的图书、或者借阅了科学出版社出版的书名中含有数'据库书'三个字的图书的读者姓名、书名。

select rname,bname from book,rea,br

where bname like '%数据库%' and rea.rnum in ( select br.rnum

from br,book

where bpub = '机械工业出版社' or bpub = '科学出版社' )

14)查询借阅了机械工业出版社出版的书名中含有数'据库书'三个字的图书并且也借阅了科学出版社出版的书名中含有数'据库书'三个字的图书的读者姓名、书名。

select rname,bname from book,rea,br

where bname = '%数据库%' and rea.rnum in ( select br.rnum

from br r1,br r2,book

where r1.rnum = r2.rnum and book.bnum =br.bnum and bpub = '机械工业出版社' and bpub = '科学出版社' )

15)查询借阅了机械工业出版社出版的书名中含有数'据库书'三个字的图书

但没有借阅了科学出版社出版的书名中含有数'据库书'三个字的图书的读者姓名、书名。

select rname,bname from book,rea,br

where bname like '%数据库%' and rea.rnum in ( select br.rnum

from br ,book

where br.bnum = book.bnum

and bpub = '机械工业出版社' and book.bnum in (select br.rnum

from br,book

where book.bnum = br.bnum and bname like '%数据库%' and bpub = '科学出版社')

)