数据库sql查询语句练习4-习题-结果(单世民)图书-习题

 现有图书管理数据库的三个关系模式:

 图书(总编号, 分类号, 书名, 作者, 出版单位, 单价)

 读者(借书证号, 单位, 姓名, 性别, 职称, 地址)

 借阅(借书证号, 总编号, 借书日期)

  具体数据为:

 图书:

 总编号 分类号 书名 作者 出版单位 单价 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 单位="经济系"

 结果: