一、实验目的
1. 掌握使用查询分析器的使用方法。
2. 掌握使用SELECT语句进行数据库单表的高级查询。 3. 掌握使用SELECT语句的GROUP BY子句的使用方法。 4. 掌握使用SELECT 语句的嵌套查询方法。 5. 掌握使用SELECT语句的UNION 合并查询方法。
二、实验内容
现有图书管理数据库的三个关系模式:
图书(总编号,分类号,书名,作者,出版单位,单价) 读者 (借书证号,单位,姓名,性别,职称,地址) 借阅 (借书证号,总编号,借书日期。
1. 利用SQL SERVER 2000创建图书管理库和图书、读者和借阅三个基本表的表结构。 2. 利用SQL SERVER 2000在三个表中分别插入以下所给元组。
总编号 分类号 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 书名 数据库导论 数据库导论 数据库导论 计算机基础 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 118802 TP4/15 计算机网络 黄力钧 高等教育出版社 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 表三 借阅表数据
利用导入的方法创建上面的数据库并用SQL完成如下查询:
1. 求科学出版社图书的最高单价、最低单价、平均单价。
SQL代码如下:
SELECT 出版单位, MAX(单价) AS 最高价,MIN(单价) AS 最低价,AVG(单价) AS 平均价 From 图书
Where 出版单位='科学出版社' GROUP BY 出版单位
2. 求信息系当前借阅图书的读者人次数。
SQL代码如下:
SELECT 信息系借书人数=COUNT(DISTINCT 借书证号) FROM 借阅 WHERE 借书证号 IN (SELECT 借书证号 FROM 读者
WHERE 单位='信息系' )
3. 求出各个出版社图书的最高价格、最低价格和平均价格。
SQL代码如下:
SELECT 出版单位,最高价格=MAX(单价),最低价格=MIN(单价),平均价格=AVG(单价) FROM 图书 GROUP BY 出版单位
4. 分别找出各单位当前借阅图书的读者人数。
SQL代码如下:
SELECT 单位,读者人数=COUNT(DISTINCT 读者.借书证号 ) FROM 读者,借阅
WHERE 读者.借书证号=借阅.借书证号 GROUP BY 单位
5. 找出当前至少借阅了2本图书的读者及所在单位。
SQL代码如下:
Select 姓名,单位 From 读者
Where 读者.借书证号 IN( SELECT 借书证号 FROM 借阅 GROUP BY 借书证号 HAVING COUNT(*)>=2 )
6. 分别找出借书人次超过1人次的单位及人次数。
SQL代码如下:
SELECT 单位,借阅人次数=COUNT( 借阅.借书证号) FROM 读者,借阅
WHERE 读者.借书证号=借阅.借书证号 GROUP BY 单位
HAVING COUNT( 借阅.借书证号)>1
7. 找出藏书中各个出版单位的册数、价值总额。
SQL代码如下:
SELECT 出版单位,册数=COUNT(*),总价=SUM(单价) FROM 图书 GROUP BY 出版单位
ORDER BY SUM(单价),COUNT(*) DESC
8. 查询经济系是否还清所有图书。如果还清,显示该系所有读者的姓名、
所在单位和职称。
Select 姓名,单位,职称 From 读者
Where 单位='经济系' and not exists (select * from 读者,借阅
where 读者.借书证号=借阅.借书证号 and 单位='经济系')
因篇幅问题不能全部显示,请点此查看更多更全内容