
练习题1:
现有图书管理数据库的三个关系模式:
图书(总编号,分类号,书名,作者,出版单位,单价)
读者 (借书证号,单位,姓名,性别,职称,地址)
借阅 (借书证号,总编号,借书日期)
1. 利用SQL Server 2000创建图书管理库和图书、读者和借阅三个基本表的表结构:
2. 利用SQL Server 2000在三个表中分别插入以下所给元组:
图书:
| 总编号 | 分类号 | 书名 | 作者 | 出版单位 | 单价 |
| 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 |
用SQL完成如下查询:
1) 找出姓李的读者姓名和所在单位。
2) 列出图书库中所有藏书的书名及出版单位。
3) 查找高等教育出版社的 所有图书及单价,结果按单价降序排序。
4) 查找价格介于10元和20元之间的图书种类,结果按出版单位和单价升序排序。
5) 查找书名以计算机打头的所有图书和作者。
6) 检索同时借阅了总编号为112266和449901两本书的借书证号。
7) 查找所有借了书的读者的姓名及所在单位。
8) 找出李某所借图书的所有图书的书名及借书日期。
9) 查询1997年10月以后借书的读者借书证号、姓名和单位。
10) 找出借阅了FoxPro大全一书的借书证号。
11) 找出与赵正义在同一天借书的读者姓名、所在单位及借书日期 。
12) 查询1997年7月以后没有借书的读者借书证号、姓名及单位。
练习题3:
完成下面SQL高级查询:
13) 求科学出版社图书的最高单价、最低单价、平均单价。
14) 求信息系当前借阅图书的读者人次数。
15) 求出各个出版社图书的最高价格、最低价格和册数。
16) 分别找出各单位当前借阅图书的读者人数。
17) 找出当前至少借阅了2本图书的读者及所在单位。
18) 分别找出借书人次超过1人次的单位及人次数。
19) 找出藏书中各个出版单位的册数、价值总额。
20) 查询经济系是否还清所有图书。如果还清,显示该系所有读者的姓名、所在单位和职称
Sql 语句答案:
1. select 姓名,单位
from 读者
where 姓名like '李%'
2. select 书名,出版单位
from 图书
3. select 出版单位,书名,单价
from 图书
where 出版单位='高等教育出版社'
order by 单价desc
4. select 书名,出版单位,单价
from 图书
where 单价between 10.00 and 20.00
order by 出版单位,单价asc
5. select 书名,作者
from 图书
where 书名like '计算机%'
6. select 借阅.总编号,借书证号
from 图书,借阅
where 图书.总编号=借阅.总编号and 借阅.总编号in ('112266','449901')
7.select distinct 姓名,单位
from 读者inner join 借阅
on 借阅.借书证号=读者.借书证号
8. select 书名,姓名,借书日期
from 图书inner join 借阅
on 图书.总编号=借阅.总编号
join 读者
on 借阅.借书证号=读者.借书证号
where 读者.姓名like '李%'
9. select distinct 读者.借书证号,姓名,单位
from 借阅inner join 读者
on 借阅.借书证号=读者.借书证号
where 借阅.借书日期>='1997-10-1'
10. select 借书证号
from 借阅
where 总编号in (select 总编号
from 图书
where 书名='FoxPro大全')
11. select 姓名,单位,借书日期
from 借阅,读者
where 借阅.借书证号=读者.借书证号and 借书日期=(select 借书日期
from 借阅,读者
where 借阅.借书证号=读者.借书证号and 姓名='赵正义')
12. select distinct 借书证号,姓名,单位
from 读者
where 借书证号not in (select 借书证号
from 借阅
where 借书日期>='1997-07-01' )
13. select max(单价) 最高单价,min(单价) as 最低单价,avg(单价) as 平均单价
from 图书
where 出版单位='科学出版社'
14. select count(借书证号)
from 借阅
where 借书证号in (select 借书证号
from 读者
where 单位='信息系')
15. select 出版单位,max(单价) 最高价格,min(单价) as 最低价格,count(*) 册数
from 图书
group by 出版单位
16. select 单位,count(借阅.借书证号)
from 借阅,读者
where 借阅.借书证号in (select 借书证号
from 读者)
group by 单位
17. select 姓名,单位
from 读者
where 借书证号in (select 借书证号
from 借阅
group by 借书证号
having count(*)>=2)
18. select 单位,count(*) as 超过人次
from 借阅,读者
where 读者.借书证号=借阅.借书证号
group by 单位
having count(*)>=2
19. select 出版单位,count(*) 册数,sum(单价) 总价
from 图书
group by 出版单位
20. select 姓名,单位,职称
from 读者
where 单位='经济系' and not exists (select *
from 读者,借阅
where 读者.借书证号=借阅.借书证号and 单位='经济系')
