数据库sql课后练习题及答案解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
先创建下面三个表:
(book表)
(borrow表)
(reader表)
1) 找出姓李的读者姓名(NAME)和所在单位(COMPANY)。
2) 列出图书库中所有藏书的书名(BOOK_NAME)及出版单位(OUTPUT)。
3) 查找“高等教育出版社”的所有图书名称(BOOK_NAME)及单价(PRICE),结果按单价降序排序。
4) 查找价格介于10元和20元之间的图书种类(SORT),结果按出版单位(OU TPUT)和单价(PRICE)升序排序。
5) 查找书名以”计算机”开头的所有图书和作者(WRITER)。
6) 检索同时借阅了总编号(BOOK_ID)为和两本书的借书证号(READER_ID)。
##7)* 查找所有借了书的读者的姓名(NAME)及所在单位(COMPANY)。
8)* 找出李某所借所有图书的书名及借书日期(BORROW_DATE)。
9)* 无重复地查询2006年10月以后借书的读者借书证号(READER_ID)、姓名和单位。
##10)* 找出借阅了<FoxPro大全>一书的借书证号。
11) 找出与”赵正义”在同一天借书的读者姓名、所在单位及借书日期。
12) 查询2006年7月以后没有借书的读者借书证号、姓名及单位。
#13) 求”科学出版社”图书的最高单价、最低单价、平均单价。
##14)* 求”信息系”当前借阅图书的读者人次数。
#15) 求出各个出版社图书的最高价格、最低价格和总册数。
#16) 分别找出各单位当前借阅图书的读者人数及所在单位。
17)* 找出当前至少借阅了2本图书(大于等于2本)的读者姓名及其所在单位。
18) 分别找出借书人次数多于1人次的单位及人次数。
19) 找出藏书中各个出版单位的名称、每个出版社的书籍的总册数(每种可能有多册)、书的价值总额。
20) 查询经济系是否还清所有图书。
如果已经还清,显示该系所有读者的姓名、所在单位和职称。
附录:建表语句
创建图书管理库的图书、读者和借阅三个基本表的表结构:
创建BOOK:(图书表)
CREATE TABLE BOOK (
BOOK_ID int,
SORT VARCHAR(10),
BOOK_NAME VARCHAR(50),
WRITER VARCHAR(10),
OUTPUT VARCHAR(50),
PRICE int);
创建READER:(读者表)
CREATE TABLE READER (
READER_ID int,
COMPANY VARCHAR(10),
NAME VARCHAR(10),
SEX VARCHAR(2),
GRADE VARCHAR(10),
ADDR VARCHAR(50));
创建BORROW:(借阅表)
CREATE TABLE BORROW (
READER_ID int,
BOOK_ID int,
BORROW_DATE datetime)
插入数据:
BOOK表:
insert into BOOK values(,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into BOOK values(,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into BOOK values(,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into BOOK values(,'TP5/10','计算机基础','李伟','高等教育出版社
',18.00);
insert into BOOK values(,'TP3/12','FoxBASE','张三','电子工业出版社
',23.60);
insert into BOOK values(,'TS7/21','高等数学','刘明','高等教育出版社
',20.00);
insert into BOOK values(,'TR9/12','线性代数','孙业','北京大学出版社
',20.80);
insert into BOOK values(,'TR7/90','大学英语','胡玲','清华大学出版社
',12.50);
insert into BOOK values(,'TP4/13','数据库基础','马凌云','人民邮电出版社
',22.50);
insert into BOOK values(,'TP4/13','数据库基础','马凌云','人民邮电出版社
',22.50);
insert into BOOK values(,'TP4/13','数据库基础','马凌云','人民邮电出版社
',22.50);
insert into BOOK values(,'TP4/14','FoxPro大全','周虹','科学出版社
',32.70);
insert into BOOK values(,'TP4/14','FoxPro大全','周虹','科学出版社
',32.70);
insert into BOOK values(,'TP4/15','计算机网络','黄力钧','高等教育出版社
',21.80);
insert into BOOK values(,'TP4/15','计算机网络','黄力钧','高等教育出版社',2 1.80);
READER表:
insert into reader values(111,'信息系','王维利','女','教授','1号楼424'); insert into reader values(112,'财会系','李立','男','副教授','2号楼316 ');
insert into reader values(113,'经济系','张三','男','讲师','3号楼105'); insert into reader values(114,'信息系','周华发','男','讲师','1号楼316'); insert into reader values(115,'信息系','赵正义','男','工程师','1号楼224 ');
insert into reader values(116,'信息系','李明','男','副教授','1号楼318 ');
insert into reader values(117,'计算机系','李小峰','男','助教','1号楼214 ');
insert into reader values(118,'计算机系','许鹏飞','男','助工','1号楼216 ');
insert into reader values(119,'计算机系','刘大龙','男','教授','1号楼318 ');
insert into reader values(120,'国际贸易','李雪','男','副教授','4号楼50
6');
insert into reader values(121,'国际贸易','李爽','女','讲师','4号楼510 ');
insert into reader values(122,'国际贸易','王纯','女','讲师','4号楼512 ');
insert into reader values(123,'财会系','沈小霞','女','助教','2号楼202'); insert into reader values(124,'财会系','朱海','男','讲师','2号楼210'); insert into reader values(125,'财会系','马英明','男','副教授','2号楼212 ');
BORROW表:
insert into borrow values(112,,'3-19-2006');
insert into borrow values(125,,'2-12-2006');
insert into borrow values(111,,'8-21-2006');
insert into borrow values(112,,'3-14-2006');
insert into borrow values(114,,'10-21-2006');
insert into borrow values(120,,'11-2-2006');
insert into borrow values(120,,'10-18-2006');
insert into borrow values(119,,'11-12-2006');
insert into borrow values(112,,'10-23-2006');
insert into borrow values(115,,'8-21-2006');
insert into borrow values(118,,'9-10-2006');
现有关系数据库如下:
数据库名:图书借阅管理系统
读者表(读者编号 char(6),姓名,性别,年龄,单位,身份证号,职称)
图书表(图书编号char(6),图书名称,出版社,作者)
借阅表(读者编号,图书编号,借阅时间)
用SQL语言实现下列功能的sql语句代码。
(1)创建数据表book;
book表(图书编号 char(6),图书名称,出版社,作者)
要求使用:主键(图书编号)、非空(图书名称),非空(作者)
(2)创建数据表reader表;
学生信息表(reader编号 char(8),姓名,性别,年龄,工作单位,身份证号,职称) 要求使用:主键(reader编号)、默认(职称)、非空(工作单位,姓名)、唯一(身份证号)、检查(性别),检查(年龄)
(3)创建借书表borrow;
borrow (ID,读者编号,图书编号,借书日期)
要求使用:外键(学号,课号)
(4)将下列课程信息添加到book表的代码
图书编号名称
数据库原理
数据结构
修改课号为的图书名称:数据结构与算法
删除课号为的图书信息
(5)创建视图读者借书信息的代码;
读者借书信息视图(读者编号,姓名,图书编号,图书名称,借书日期)
(6)从读者表book中查询姓李的女读者的情况:姓名、性别、工作单位。
(7)查询统计出借书量超过5本的单位平均年龄
(8)创建带参数的存储过程[借某图书的读者高低均年龄]、执行该过程的代码存储过程功能:查询借阅某图书的的读者最高年龄、最低年龄、平均年龄;
执行该过程,查询所有借阅’数据库基础’这本书的读者的最高年龄、最低年龄、平均年龄;
1) 找出姓李的读者姓名(NAME)和所在单位(COMPANY)。
SELECT NAME,COMPANY FROM READER
WHERE NAME LIKE'李%'
2) 列出图书库中所有藏书的书名(BOOK_NAME)及出版单位(OUTPUT)。
SELECT BOOK_NAME,OUTPUT FROM BOOK
3) 查找“高等教育出版社”的所有图书名称(BOOK_NAME)及单价(PRICE),结果按单价降序排序。
SELECT BOOK_NAME,PRICE FROM BOOK
WHERE OUTPUT='高等教育出版社'
ORDER BY PRICE DESC
4) 查找价格介于10元和20元之间的图书种类(SORT),结果按出版单位(OU TPUT)和单价(PRICE)升序排序。
SELECT SORT,OUTPUT,PRICE FROM BOOK
WHERE PRICE BETWEEN 10 AND 20
ORDER BY OUTPUT,PRICE
5) 查找书名以”计算机”开头的所有图书和作者(WRITER)。
SELECT BOOK_NAME,WRITER FROM BOOK
WHERE BOOK_NAME LIKE'计算机%'
6) 检索同时借阅了总编号(BOOK_ID)为和两本书的借书证号(READER_ID)。
SELECT A.READER_ID FROM BORROW A,BORROW B
WHERE A.BOOK_ID=''AND B.BOOK_ID=''
AND A.READER_ID=B.READER_ID
##7)* 查找所有借了书的读者的姓名(NAME)及所在单位(COMPANY)。
SELECT DISTINCT NAME,COMPANY FROM READER,BORROW
WHERE BORROW.READER_ID=READER.READER_ID
8)* 找出李某所借所有图书的书名及借书日期(BORROW_DATE)。
SELECT BOOK.BOOK_NAME,BORROW.BORROW_DATE
FROM BOOK,BORROW,READER
WHERE BOOK.BOOK_ID=BORROW.BOOK_ID AND
READER.READER_ID=BORROW.READER_ID AND LIKE'李%'
9)* 无重复地查询2006年10月以后借书的读者借书证号(READER_ID)、姓名和单位。
SELECT READER_ID,NAME,COMPANY FROM READER
WHERE READER_ID IN(SELECT READER_ID FROM BORROW WHERE BORROW_DATE
>='2006-10-1')
##10)* 找出借阅了<FoxPro大全>一书的借书证号。
SELECT DISTINCT READER_ID FROM BORROW,BOOK
WHERE BORROW.BOOK_ID=BOOK.BOOK_ID
AND BOOK.BOOK_NAME LIKE'FoxPro大全'
11)找出与”赵正义”在同一天借书的读者姓名、所在单位及借书日期。
SELECT NAME,COMPANY,BORROW_DATE FROM READER,BORROW
WHERE BORROW.READER_ID=READER.READER_ID
AND BORROW_DATE IN(SELECT BORROW_DATE FROM BORROW,READER WHERE BORROW.READER_ID=READER.READER_ID AND NAME='赵正义')
12) 查询2006年7月以后没有借书的读者借书证号、姓名及单位。
SELECT READER_ID,NAME,COMPANY FROM READER
WHERE READER_ID NOT IN(SELECT READER_ID FROM BORROW
WHERE BORROW_DATE>='2006-7-1')
#13) 求”科学出版社”图书的最高单价、最低单价、平均单价。
SELECT MAX(PRICE)最高单价,MIN(PRICE)最低单价,AVG(PRICE)平均单价FROM BOOK
WHERE OUTPUT='科学出版社'
##14)* 求”信息系”当前借阅图书的读者人次数。
SELECT COUNT(DISTINCT READER_ID)当前借阅图书的读者人次数FROM BORROW WHERE READER_ID IN(SELECT READER_ID FROM READER
WHERE COMPANY IN('信息系'))
#15) 求出各个出版社图书的最高价格、最低价格和总册数。
SELECT MAX(PRICE)最高价格,MIN(PRICE)最低价格,COUNT(PRICE)总册数FROM BOOK
GROUP BY OUTPUT
#16) 分别找出各单位当前借阅图书的读者人数及所在单位。
SELECT COUNT(COMPANY)读者人数,COMPANY FROM BORROW,READER
WHERE BORROW.READER_ID=READER.READER_ID
GROUP BY COMPANY
17)* 找出当前至少借阅了2本图书(大于等于2本)的读者姓名及其所在单位。
SELECT NAME读者姓名,COMPANY 单位FROM READER
WHERE READER_ID IN(SELECT READER_ID FROM BORROW
GROUP BY READER_ID
HAVING COUNT(*)>=2 )
18) 分别找出借书人次数多于1人次的单位及人次数。
SELECT COMPANY,COUNT(*)人次数FROM READER,BORROW
WHERE BORROW.READER_ID=READER.READER_ID
GROUP BY COMPANY
HAVING COUNT(*)>1
19) 找出藏书中各个出版单位的名称、每个出版社的书籍的总册数(每种可能有多册)、书的价值总额。
SELECT OUTPUT,COUNT(*)书籍的总册数,SUM(PRICE)书的价值总额FROM BOOK
GROUP BY OUTPUT
20) 查询经济系是否还清所有图书。
如果已经还清,显示该系所有读者的姓名、所在单位和职称。
SELECT NAME,COMPANY FROM READER
WHERE NOT EXISTS(SELECT*FROM READER,BORROW
WHERE READER.READER_ID=BORROW.READER_ID AND COMPANY='经济系')。