现有图书管理数据库的三个关系模式:
图书(总编号, 分类号, 书名, 作者, 出版单位, 单价) 读者(借书证号, 单位, 姓名, 性别, 职称, 地址) 借阅(借书证号, 总编号, 借书日期)
具体数据为: 图书: 总编号 分类号 445501 TP3/12 445502 TP3/12 445503 TP3/12 332211 TP5/10 112266 TP3/12 665544 TS7/21 114455 TR9/12 113388 TR7/90 446601 TP4/13 446602 TP4/13 446603 TP4/13 449901 TP4/14 449902 TP4/14 118801 TP4/15 118802 TP4/15 读者: 书名 数据库导论 数据库导论 数据库导论 计算机基础 FoxBASE 高等数学 线性代数 大学英语 数据库基础 数据库基础 数据库基础 FoxPro大全 FoxPro大全 计算机网络 计算机网络 作者 王强 王强 王强 李伟 张三 刘明 孙业 胡玲 马凌云 马凌云 马凌云 周虹 周虹 黄力钧 黄力钧 出版单位 单价 17.90 科学出版社 17.90 科学出版社 17.90 科学出版社 高等教育出版社 18.00 电子工业出版社 23.60 高等教育出版社 20.00 北京大学出版社 20.80 清华大学出版社 12.50 人民邮电出版社 22.50 人民邮电出版社 22.50 人民邮电出版社 22.50 32.70 科学出版社 32.70 科学出版社 高等教育出版社 21.80 高等教育出版社 21.80 借书证号 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
单位 信息系 财会系 经济系 信息系 信息系 信息系 计算机系 计算机系 计算机系 国际贸易 国际贸易 国际贸易 财会系 财会系 财会系 姓名 王维利 李 立 张 三 周华发 赵正义 李 明 李小峰 许鹏飞 刘大龙 李 雪 李 爽 王 纯 沈小霞 朱 海 马英明 性别 女 男 男 男 男 男 男 男 男 男 女 女 女 男 男 职称 教授 副教授 讲师 讲师 工程师 副教授 助教 助工 教授 副教授 讲师 讲师 助教 讲师 副教授 地址 1号楼424 2号楼316 3号楼105 1号楼316 1号楼224 1号楼318 1号楼214 1号楼216 1号楼318 4号楼506 4号楼510 4号楼512 2号楼202 2号楼210 2号楼212 借阅:
借书证号 112 125 111 112 114 120 120 119 112 115 118 总编号 445501 332211 445503 112266 665544 114455 118801 446603 449901 449902 118801 借书日期 1997-3-19 1997-2-12 1997-8-21 1997-3-14 1997-10-21 1997-11-2 1997-10-18 1997-12-12 1997-10-23 1997-8-21 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 单位='经济系'
结果: