现有图书管理数据库的三个关系模式:
图书(总编号, 分类号, 书名, 作者, 出版单位, 单价)
读者(借书证号, 单位, 姓名, 性别, 职称, 地址)
借阅(借书证号, 总编号, 借书日期)
具体数据为:
图书:
总编号 分类号 书名 作者 出版单位 单价 445501
TP3/12
数据库导论 王强 科学出版社 17.90
445502
TP3/12
数据库导论 王强 科学出版社 17.90
445503
TP3/12
数据库导论 王强 科学出版社 17.90
332211
TP5/10
计算机基础 李伟 高等教育出版社 18.00
112266
TP3/12
FoxBASE
张三 电子工业出版社 23.60
665544
TS7/21
高等数学 刘明 高等教育出版社 20.00
114455
TR9/12
线性代数 孙业 北京大学出版社 20.80
113388
TR7/90
大学英语 胡玲 清华大学出版社 12.50
446601
TP4/13
数据库基础 马凌云 人民邮电出版社 22.50
446602
TP4/13
数据库基础 马凌云 人民邮电出版社 22.50
446603
TP4/13
数据库基础 马凌云 人民邮电出版社 22.50
449901
TP4/14
FoxPro 大全 周虹 科学出版社 32.70
449902
TP4/14
FoxPro 大全 周虹 科学出版社 32.70
118801
TP4/15
计算机网络 黄力钧 高等教育出版社 21.80
118802
TP4/15
计算机网络 黄力钧 高等教育出版社 21.80
读者:
借书证号 单位 姓名 性别 职称 地址 111
信息系 王维利 女 教授 1 号楼 424
112
财会系 李
立 男 副教授 2 号楼 316
113
经济系 张
三 男 讲师 3 号楼 105
114
信息系 周华发 男 讲师 1 号楼 316
115
信息系 赵正义 男 工程师 1 号楼 224
116
信息系 李
明 男 副教授 1 号楼 318
117
计算机系 李小峰 男 助教 1 号楼 214
118
计算机系 许鹏飞 男 助工 1 号楼 216
119
计算机系 刘大龙 男 教授 1 号楼 318
120
国际贸易 李
雪 男 副教授 4 号楼 506
121
国际贸易 李
爽 女 讲师 4 号楼 510
122
国际贸易 王
纯 女 讲师 4 号楼 512
123
财会系 沈小霞 女 助教 2 号楼 202
124
财会系 朱
海 男 讲师 2 号楼 210
125
财会系 马英明 男 副教授 2 号楼 212
借阅:
借书证号 总编号 借书日期 112
445501
1997-3-19
125
332211
1997-2-12
111
445503
1997-8-21
112
112266
1997-3-14
114
665544
1997-10-21
120
114455
1997-11-2
120
118801
1997-10-18
119
446603
1997-12-12
112
449901
1997-10-23
115
449902
1997-8-21
118
118801
1997-9-10
根据以上描述,请完成:
DDL 1. 写出创建上述表的语句 命令:
create table 图书(总编号 varchar(7) primary key, 分类号 varchar(8), 书名 varchar(18), 作者 varchar(8), 出版单位 varchar(18), 单价 float)
create table 读者(借书证号 varchar(4) primary key, 单位 varchar(7), 姓名 varchar(8), 性别 varchar(2), 职称 varchar(8), 地址 varchar(18))
create table 借阅(借书证号 varchar(3), 总编号 varchar(6), 借书日期 date,primary key(借书证号,总编号,借书日期))
DML 2. 给出插入上述数据的 insert 语句 命令:
:
insert into 图书 values("445501","TP3/12","数据库导论","王强","科学出版社",17.90) insert into 图书 values("445502","TP3/12","数据库导论","王强","科学出版社",17.90) insert into 图书 values("445503","TP3/12","数据库导论","王强","科学出版社",17.90) insert into 图书 values("332211","TP5/10","计算机基础","李伟","高等教育出版社",18.00) insert into 图书 values("112266","TP3/12","FoxBASE","张三","电子工业出版社",23.60) insert into 图书 values("665544","TS7/21","高等数学","刘明","高等教育出版社",20.00) insert into 图书 values("114455","TR9/12","线性代数","孙业","北京大学出版社",20.80) insert into 图书 values("113388","TR7/90","大学英语","胡玲","清华大学出版社",12.50) insert into 图书 values("446601","TP4/13","数据库基础","马凌云","人民邮电出版社",22.50) insert into 图书 values("446602","TP4/13","数据库基础","马凌云","人民邮电出版社",22.50) insert into 图书 values("446603","TP4/13","数据库基础","马凌云","人民邮电出版社",22.50) insert into 图书 values("449901","TP4/14","FoxPro大全","周虹","科学出版社",32.70) insert into 图书 values("449902","TP4/14","FoxPro大全","周虹","科学出版社",32.70) insert into 图书 values("118801","TP4/15","计算机网络","黄力钧","高等教育出版社
",21.80) insert into 图书 values("118802","TP4/15","计算机网络","黄力钧","高等教育出版社",21.80)
insert into 读者 values("111","信息系","王维利","女","教授","1号楼") insert into 读者 values("112","财会系","李立","男","副教授","2号楼") insert into 读者 values("113","经济系","张三","男","讲师","3号楼") insert into 读者 values("114","信息系","周华发","男","讲师","1号楼") insert into 读者 values("115","信息系","赵正义","男","工程师","1号楼") insert into 读者 values("116","信息系","李明","男","副教授","1号楼") insert into 读者 values("117","计算机系","李小峰","男","助教","1号楼") insert into 读者 values("118","计算机系","许鹏飞","男","教授","1号楼") insert into 读者 values("119","计算机系","刘大龙","男","副教授","4号楼") insert into 读者 values("120","国际贸易","李雪","男","副教授","4号楼") insert into 读者 values("121","国际贸易","李爽","女","讲师","4号楼") insert into 读者 values("122","国际贸易","王纯","女","讲师","4号楼") insert into 读者 values("123","财会系","沈小霞","女","助教","2号楼") insert into 读者 values("124","财会系","朱海","男","讲师","2号楼") insert into 读者 values("125","财会系","马英明","男","副教授","2 号楼")
insert into 借阅 values("112","445501","1997-3-19") insert into 借阅 values("125","332211","1997-2-12") insert into 借阅 values("111","445503","1997-8-21") insert into 借阅 values("112","112266","1997-3-14") insert into 借阅 values("114","665544","1997-10-21") insert into 借阅 values("120","114455","1997-11-2") insert into 借阅 values("120","118801","1997-10-18") insert into 借阅 values("119","446603","1997-12-12") insert into 借阅 values("112","449901","1997-10-23") insert into 借阅 values("115","449902","1997-8-21") insert into 借阅 values("118","118801","1997-9-10") 单表查询 3. 找出姓李的读者姓名和所在单位 命令:
select 姓名,单位 from 读者 where 姓名 like "李%"
结果:
4. 列出图书库中所有藏书的书名以及出版单位 命令:
select distinct 书名,出版单位 from 图书
结果:
5. 查找出高等教育出版社的所有图书及单价,结果按单价降序排列 命令:
select distinct 书名,单价 from 图书 where 出版单位="高等教育出版社" order by 单价 desc
结果:
6. 查找出价格位于 10 元和 20 元之间的图书种类,结果按出版单位和单价升序排序 命令:
select * from 图书 where 单价 between 10 and 20 order by 出版单位,单价
结果:
7. 找出书名以“计算机”打头的所有图书和作者 命令:
select distinct 书名,作者 from 图书 where 书名 like "计算机%"
结果:
8. 检索同时接借阅了总编号为 112266 和 449901 两本书的借书证号 命令:
select 借书证号 from 借阅 where 总编号="112266" intersect select 借书证号 from 借阅 where 总编号="449901"
结果:
9. 求科学出版社图书的最高单价、最低单价和平均单价 命令:
select MAX(单价) 最高单价,MIN(单价) 最低单价,AVG(单价) 平均单价 from 图书 where 出版单位="科学出版社"
结果:
聚合查询 10. 找出藏书中各个出版社的册数、价值总额 命令:
select
出版单位,COUNT(*) 册数,SUM(单价) 价值总额 from 图书 group by 出版单位
结果:
11. 求出各个出版社图书的最高价格、最低价格和册数 命令:
select
出版单位,COUNT(*) 册数,max(单价) 最高价格,MIN(单价) 最低价格 from 图书 group by 出版单位
结果:
多表查询 12. 查找所有借了书的读者的姓名以及所在单位 命令:
select distinct 姓名,单位 from 读者 join 借阅 on 读者.借书证号=借阅.借书证号
结果:
13. 找出李某所借图书的所有图书的书名及借书日期 命令:
select 姓名,书名,借书日期 from 读者 join 借阅 on 读者.借书证号=借阅.借书证号 join 图书 on 借阅.总编号=图书.总编号 where 姓名 like "李%"
结果:
14. 查询 1997 年 10 月以后借书的读者借书证号、姓名和单位 命令:
select
distinct 读者.借书证号,姓名,单位 from 借阅 join 读者 on 借阅.借书证号=读者.借书证号 where DATEDIFF(MONTH,"1977-10-1",借书日期)>=0
结果:
15. 找出借阅了 FoxPro 大全一书的借书证号 命令:
select 借书证号 from 借阅 join 图书 on 借阅.总编号=图书.总编号 where 书名="FoxPro 大全"
结果:
16. 分别找出借书人次超过 1 人次的单位及人次数 命令:
select 单位,COUNT(*) 人次数 from 借阅 join 读者 on 借阅.借书证号=读者.借书证号 group by 单位 having COUNT(*)>1
结果:
子查询 17. 找出与赵正义在同一天借书的读者姓名、所在单位以及借书日期 命令:
select 姓名,单位,借书日期 from 读者 join 借阅 on 读者.借书证号=借阅.借书证号 where 借书日期=(select 借书日期 from 借阅 join 读者 on 借阅.借书证号=读者.借书证号 where 姓名="赵正义")
结果:
18. 查询 1997 年 7 月以后没有借书的读者借书证号、姓名以及单位 命令:
select 借书证号,姓名,单位 from 读者 except select 借阅.借书证号,姓名,单位 from 借 阅 join 读 者 on 借 阅 . 借 书 证 号 = 读 者 . 借 书 证 号 where DATEDIFF(DAY,"1997-7-1",借书日期)>=0
结果:
19. 求信息系当前借阅图书的读者人次数 命令:
select COUNT(*) 人次数 from 借阅 join 读者 on 借阅.借书证号=读者.借书证号 where 单位="信息系"
结果:
20. 找出当前至少借阅了 2 本书的读者及所在单位 命令:
select 姓名,单位 from 借阅 join 读者 on 借阅.借书证号=读者.借书证号 group by 读者.姓名,单位 having COUNT(*)>=2
结果:
21. 查询经济系是否还清所有图书。如果还清,则显示该系统所有读者的姓名、所在单位和
职称 命令:
select 姓名,单位,职称 from 读者 where not exists (select 姓名 from 借阅 join 读者 on 借阅.借书证号=读者.借书证号 where 单位="经济系") and 单位="经济系"
结果: