目录
数据库介绍
图书借阅数据库books中现有3个表,各个表的创建语句如下:
#创建图书表 CREATE TABLE book(
bookno VARCHAR(10) PRIMARY KEY COMMENT '书号',
bookname VARCHAR(30) COMMENT '书名',
author VARCHAR(20) COMMENT '作者',
publisher VARCHAR(10) COMMENT '出版社',
publishyear YEAR COMMENT '出版年',
price DECIMAL(5,1) COMMENT '定价',
state CHAR(2) DEFAULT '可借' COMMENT '状态'
)COMMENT='图书表';
#创建读者表 CREATE TABLE reader(
readerno VARCHAR(10) PRIMARY KEY COMMENT '读者编号',
readertype CHAR(2) NOT NULL COMMENT '读者类型',
readername VARCHAR(15) COMMENT '读者姓名',
readerdept VARCHAR(15) COMMENT '所属学院' )COMMENT='读者表';
#创建借阅表 CREATE TABLE borrow(
readerno VARCHAR(10) NOT NULL COMMENT '读者编号',
bookno VARCHAR(10) PRIMARY KEY COMMENT '书号',
borrowdate DATE COMMENT '借出日期',
returndate DATE COMMENT '应还书日期',
FOREIGN KEY (readerno) REFERENCES reader(readerno), FOREIGN KEY (bookno) REFERENCES book(bookno) )COMMENT='借阅表';
#各表现有数据如下表所示: books:
reader:
borrow:
#说明:books数据库是对实际图书借阅信息的简化和模拟,图书表中假定所有图书都只有一本,书号是指条码号,是图书的唯一标识。借阅表中记录当前借阅情况,一旦归还某图书,将删除其借阅记录。
第1关:内连接查询1
本关任务
查询借出图书(名)“朝花夕拾”的读者的读者编号、姓名、所属学院。
USE books;
#请在以下Begin End之间补充代码
#注意:评测环境下,数据库名、表名、字段名区分大小写
########## Begin ##########
select borrow.readerno ,readername ,readerdept
from reader , book, borrow
where reader.readerno = borrow.readerno and borrow.bookno = book.bookno and book.bookname = '朝花夕拾';
########## End ##########
第2关:内连接查询2
本关任务
查询“计算机”学院的同学和老师借出了哪些书,要求查询结果中包括读者编号、姓名、读者类型、书号、书名,并按读者编号升序排序。
USE books;
#请在以下Begin End之间补充代码
#注意:评测环境下,数据库名、表名、字段名区分大小写
########## Begin ##########
select distinct reader.readerno , reader.readername , reader.readertype , borrow.bookno , book.bookname
from book , reader , borrow
where reader.readerdept = '计算机' and reader.readerno = borrow.readerno and borrow.bookno = book.bookno
order by readerno;
########## End ##########
第3关:内连接和聚合函数应用
本关任务
查询读者“王小明”共借出了几本书,要求查询结果中的列标题为借书数量。
USE books;
#请在以下Begin End之间补充代码
#注意:评测环境下,数据库名、表名、字段名区分大小写
########## Begin ##########
select count(borrow.readerno) as '借书数量'
from book , borrow , reader
where borrow.bookno = book.bookno and reader.readername = '王小明' and borrow.readerno = reader.readerno ;
########## End ##########
第4关:内连接和分组查询
本关任务
查询统计目前在借图书中学生和教师各借书的总数,要求查询结果中的列标题依次为读者类型、借书总数。
USE books;
#请在以下Begin End之间补充代码
#注意:评测环境下,数据库名、表名、字段名区分大小写
########## Begin ##########
select reader.readertype as '读者类型',count(borrow.readerno) as '借书总数'
from book , reader , borrow
where book.bookno = borrow.bookno and reader.readerno = borrow.readerno
group by reader.readertype;
########## End ##########
第5关:消除连接结果中重复行
本关任务
查询目前借有图书(即未还书)的读者的读者编号、姓名、读者类型,所属学院,要求查询结果中读者信息不重复。
USE books;
#请在以下Begin End之间补充代码
#注意:评测环境下,数据库名、表名、字段名区分大小写
########## Begin ##########
select distinct reader.readerno , readertype , readername , readerdept
from book , reader , borrow
where book.state = '借出' and borrow.readerno = reader.readerno and book.bookno = borrow.bookno
order by reader.readerno;
########## End ##########
第6关:外连接查询
本关任务
查询目前没有借书的读者的读者编号、读者类型、姓名、所属学院。
USE books;
#请在以下Begin End之间补充代码
#注意:评测环境下,数据库名、表名、字段名区分大小写
########## Begin ##########
select reader.readerno , readertype , readername , readerdept
from reader
where not exists(select *
from borrow
where borrow.readerno = reader.readerno);
########## End ##########