一、根据表结构或者表数据创建表并填充数据
创建数据库library
创建数据表
图书类别表(booktype
)
属性名称 | 含义 | 数据类型 | 是否为空 | 备注 |
typeid |
类别编号 | int |
not null |
主键 |
typename |
类别名称 | varchar(20) |
null |
图书信息表(book
)
属性名称 | 含义 | 数据类型 | 是否为空 | 备注 |
bookid |
图书编号 | char(10) |
not null |
主键 |
bookname |
图书名称 | varchar(20) |
not null |
|
typeid |
类别编号 | int |
null |
外键 |
bookauthor |
图书作者 | varchar(20) |
null |
|
bookpublisher |
出版社 | varchar(50) |
null |
|
bookprice |
图书价格 | doublue |
null |
|
borrowsum |
借阅次数 | int |
null |
图书存储信息表(bookstorage
)
属性名称 | 含义 | 数据类型 | 是否为空 | 备注 |
bookbarcode |
图书条码 | char(20) |
not null |
主键 |
bookid |
图书编号 | char(10) |
not null |
外键 |
bookintime |
图书入馆时间 | datetime |
null |
|
bookstatus |
图书状态 | varchar(4) |
null |
读者类别表(readertype
)
属性名称 | 含义 | 数据类型 | 是否为空 | 备注 |
retypeid |
类别编号 | int |
not null |
|
typename |
类别名称 | varchar(20) |
not null |
|
borrowquantity |
可借数量 | int |
not null |
|
borrowday |
可借天数 | int |
null |
读者信息表(reader
)
属性名称 | 含义 | 数据类型 | 是否为空 | 备注 |
readerid |
读者编号 | char(10) |
not null |
主键 |
readername |
读者姓名 | varchar(20) |
not null |
|
readerpass |
读者密码 | varchar(20) |
not null |
|
retypeid |
类别编号 | int |
null |
外键 |
readerdate |
发证日期 | datetime |
null |
|
readerstatus |
借书证状态 | varchar(4) |
null |
图书借阅表(bookborrow
)
属性名称 | 含义 | 数据类型 | 是否为空 | 备注 |
borrowid |
借阅号 | char(10) |
not null |
主键 |
bookbarcode |
图书条码 | char(20) |
not null |
外键 |
readerid |
读者编号 | char(10) |
not null |
外键 |
borrowtime |
借书日期 | datetime |
null |
|
returntime |
还书日期 | datetime |
null |
|
borrowstatus |
借阅状态 | varchar(4) |
null |
二、为创建的表插入如下数据
图书类别表(booktype
)
typeid |
typename |
1 | 自然科学 |
2 | 数学 |
3 | 计算机 |
4 | 建筑水利 |
5 | 旅游地理 |
6 | 励志/自我实现 |
7 | 工业技术 |
8 | 基础医学 |
9 | 室内设计 |
10 | 人文景观 |
图书信息表(book
)
bookid |
bookname |
typeid |
bookauthor |
bookpublisher |
bookprice |
borrowsum |
TP39/1712 | Java程序设计 | 3 | 陈永红 | 机械工业出版社 | 35.5 | 30 |
013452 | 离散数学 | 2 | 张小新 | 机械工业出版社 | 45.5 | 10 |
TP/3452 | JSP程序设计案例 | 3 | 刘城清 | 电子工业出版社 | 42.8 | 8 |
TH/2345 | 机械设计手册 | 7 | 黄明凡 | 人民邮电出版社 | 40 | 10 |
R/345677 | 中医的故事 | 8 | 李奇德 | 国防工业出版社 | 20.0 | 5 |
图书存储信息表(bookstorage
)
bookbarcode |
bookid |
bookintime |
bookstatus |
132782 | TP39/1712 | 2009-08-10 00:00:00 | 在馆 |
132789 | TP39/1712 | 2009-08-10 00:00:00 | 借出 |
145234 | 013452 | 2008-12-06 00:00:00 | 借出 |
145321 | TP/3452 | 2007-11-04 00:00:00 | 借出 |
156833 | TH/2345 | 2009-12-04 00:00:00 | 借出 |
345214 | R/345677 | 2008-11-03 00:00:00 | 在馆 |
读者类别表(readertype
)
retypeid |
typename |
borrowquantity |
borrowday |
1 | 学生 | 10 | 30 |
2 | 教师 | 20 | 60 |
3 | 管理员 | 15 | 30 |
4 | 职工 | 15 | 20 |
读者信息表(reader
)
readerid |
readername |
readerpass |
retypeid |
readerdate |
readerstatus |
0016 | 苏小东 | 123456 | 1 | 1999-09-09 00:00:00 | 有效 |
0017 | 张明 | 123456 | 1 | 2010-09-10 00:00:00 | 有效 |
0018 | 梁君红 | 123456 | 1 | 2010-09-10 00:00:00 | 有效 |
0021 | 赵清远 | 123456 | 2 | 2010-07-01 00:00:00 | 有效 |
0034 | 李瑞清 | 123456 | 3 | 2009-08-03 00:00:00 | 有效 |
0042 | 张明月 | 123456 | 4 | 1997-04-23 00:00:00 | 有效 |
图书借阅表(bookborrow
)
borrowid |
bookbarcode |
readerid |
borrowtime |
returntime |
borrowstatus |
001328 | 132789 | 0017 | 2011-01-24 00:00:00 | 2011-02-28 00:00:00 | 已还 |
001356 | 145234 | 0018 | 2011-02-12 00:00:00 | 2011-02-27 00:00:00 | 已还 |
001432 | 132782 | 0016 | 2011-03-04 00:00:00 | 2011-04-05 00:00:00 | 已还 |
001435 | 145321 | 0021 | 2011-08-09 00:00:00 | 2011-09-02 00:00:00 | 已还 |
001578 | 156833 | 0034 | 2011-10-01 00:00:00 | 2011-11-01 00:00:00 | 未还 |
001679 | 345214 | 0042 | 2011-02-21 00:00:00 | 2011-03-05 00:00:00 | 未还 |
创建数据库stucourse
没有表结构, 根据数据, 自己决定使用哪种数据类型
学生表(student
)
sid |
sname |
sex |
age |
dept |
1001 | 宋江 | 男 | 25 | 计算机系 |
3002 | 张明 | 男 | 23 | 生物系 |
1003 | 李小鹏 | 男 | 26 | 计算机系 |
1004 | 郑冬 | 女 | 25 | 计算机系 |
4005 | 李晓红 | 女 | 27 | 工商管理 |
5006 | 赵紫月 | 女 | 24 | 外语系 |
教师表(teacher
)
tid |
tname |
title |
salary |
dept |
cid |
3102 | 李明 | 初级 | 2500 | 计算机系 | C1 |
3108 | 黄晓明 | 初级 | 4000 | 生物系 | C3 |
4105 | 张晓红 | 中级 | 3500 | 工商管理 | C2 |
5102 | 宋力跃 | 高级 | 3500 | 物理系 | C4 |
3106 | 赵明阳 | 初级 | 1500 | 地理系 | C2 |
7108 | 张丽 | 高级 | 3500 | 生物系 | C3 |
9103 | 王彬 | 高级 | 3500 | 计算机系 | C1 |
7101 | 王力号 | 初级 | 1800 | 生物系 | C1 |
课程表(courseinfo
)
cid |
cname |
cbook |
ctest |
dept |
C1 |
计算机基础 | b1231 |
2009-4-6 | 计算机系 |
C2 |
工商管理基础 | b1232 |
2009-7-16 | 工商管理 |
C3 |
生物科学 | b1233 |
2010-3-6 | 生物系 |
C4 |
大学物理 | b1234 |
2009-4-26 | 物理系 |
C5 |
数据库原理 | b1235 |
2010-2-6 | 计算机系 |
选课表(scourse
)
sid |
score |
cid |
tid |
1001 | 87 | C1 |
3102 |
1001 | 77 | C2 |
4105 |
1001 | 63 | C3 |
3108 |
1001 | 56 | C4 |
5102 |
3002 | 78 | C3 |
3108 |
3002 | 78 | C4 |
5102 |
1003 | 89 | C1 |
9103 |
1004 | 56 | C2 |
3106 |
4005 | 87 | C4 |
5102 |
5006 | null |
C1 |
7101 |
教材表(bookinfo
)
bid |
bname |
bpublish |
bprice |
quantity |
b1231 |
Image Processing |
人民大学出版社 | 34.56 | 8 |
b1212 |
Signal Processing |
清华大学出版社 | 51.75 | 10 |
b1233 |
Digital Signal Processing |
邮电出版社 | 48.5 | 11 |
b1234 |
The Logic Circuit |
北大出版社 | 49.2 | 40 |
b1235 |
SQL Techniques |
邮电出版社 | 65.4 | 20 |
二、查询问题
# 根据上面的表格进行创建以及插入该数值
-- 查询数据library
-- 1.查询book表的书号, 书名和借出数量
-- 2.用别名查询book表的书号, 书名和借出数量
-- 3.查询类型是学生的所有读者的信息
-- 4.查询借出时间在2011年3月1日和2011年10月1日之间的图书
-- 5.查询借出时间在2011年3月1日之后并且还书时间在2011年10月1日之前的图书
-- 6.in关键字查询类型是老师或者学生的读者信息
-- 7.查询书名包含程序的图书信息
-- 8.查询借出数量排名前3的图书
-- 9.按图书借出数量从高到低查询, 如果借出数量相同, 再按价格高低排序
-- 10.查找图书表中从第2条记录开始的5条记录的名称和价格
-- 11.按照读者类型分组查询借出图书的数量
-- 12.查询各个出版社的图书的平均价格
-- 13.查询读者编号是0021的读者借书的信息,包括读者名, 图书号, 借出时间和归还时间
-- 14.查询所有读者的借书信息, 包括读者名, 图书名, 借出时间和归还时间
-- 15.查询借出数量大于书籍编号为TP/3452的借出数量的图书信息
-- 16.查询已借了图书的读者信息
-- 查询数据stucourse
-- 1.查询全体学生的学号, 姓名和年龄
-- 2.查询选修了课程的学生号
-- 3.查询选修课程号c3的学号和成绩
-- 4.查询成绩高于85分的学生的学号,课程号和成绩
-- 5.查询没有选修C1也没有选修C2的学生学号,课程号和成绩
-- 6.查询工资在1500~2000之间的教师的教师号,姓名和职称
-- 7.查询选修C1或C2的学生的学号,课程号和成绩
-- 8.查询所有姓张的教师的教师号和姓名
-- 9.查询姓名中第2个汉字是力的教师号和姓名
-- 10.查询所有没有成绩的学生的学号和相应的课程号
-- 11.查询选修C1的学生学号和成绩,并按照成绩降序排列
-- 12.查询选修C2,或者C3,或者C4,或者C5课程的学号,课程号和成绩, 查询结果按学号升序排列,学号相同,再按成绩降序排列
-- 13.查询选修C1的学生学号和成绩,并显示成绩前三的学生
-- 14.查询计算机系学生的总数
-- 15.查询每位学生的学号及其选修课的门数
-- 16.在分组查询中使用having条件查询,平均成绩大于85的学生学号及平均成绩
-- 17.查询选课在两门以上且各门课均及格的学生的学号及其总成绩, 查询结果按总成绩降序列出
-- 18.查询所有选课学生的学号,姓名,选课名称及成绩
-- 19.查询选修C1课程且成绩在60以上的所有学生的学号, 姓名和分数
-- 20.查询与李明教师职称相同的教师号, 姓名
三.答案
1.表建立与数据插入
# 建立表 create database library; use library; create table booktype( typeid int primary key, typename varchar(20) ); create table readerType( # 如果这个字段需要进行链接外键,那么这个也没有要求主键约束,那么我们只能弄一个唯一约束 retypeid int unique not null, readerName varchar(20) not null, borrowquantity int not null, borrowDay int ); create table book( bookid char(10) PRIMARY key, bookName varchar(20) not null, typeid int, bookauthor varchar(20), bookPublisher varchar(20), bookPrice double, borrowsum int, FOREIGN key (typeid) REFERENCES booktype(typeid) ); create table bookstorage( bookbarcode char(20) PRIMARY key, bookId char(10) not null, bookInTime datetime, bookStatus varchar(4), FOREIGN key (bookId) REFERENCES book(bookId) ); create table reader( readerId char(10) PRIMARY key, readerName varchar(20) not null, readerPass varchar(20) not null, retypeId int not null, readerDate dateTime, readerStatus varchar(4), FOREIGN key (reTypeId) REFERENCES readerType(reTypeId) ); create table bookBorrow( borrowId char(10) PRIMARY key, bookBarCode char(20) not null, readerId char(10) not null, borrowTime datetime, returnTime datetime, borrowStatus varchar(4), FOREIGN key (bookBarCode) REFERENCES bookStorage(bookBarCode), Foreign key (readerId) REFERENCES reader(readerId) ); # 插入数据 insert into booktype VALUES (1, "自然科学"), (2, "数学"), (3, "计算机"), (4, "建筑水利"), (5, "旅游地理"), (6, "励志/自我实现"), (7, "工业技术"), (8, "基础医学"), (9, "室内设计"), (10, "人文景观"); insert into book values ('TP39/1712','Java程序设计',3,'陈永红','机械工业出版社',35.5,30), ('013452','离散数学',2,'张小新','机械工业出版社',45.5,10), ('TP/3452','JSP程序设计案例',3,'刘城清','电子工业出版社',42.8,8), ('TH/2345','机械设计手册',7,'黄明凡','人民邮电出版社',40,10), ('R/345677','中医的故事',8,'李奇德','国防工业出版社',20.0,5); insert into bookstorage values ('132782','TP39/1712','2009-08-10 00:00:00','在馆'), ('132789','TP39/1712','2009-08-10 00:00:00','借出'), ('145234','013452','2008-12-06 00:00:00','借出'), ('145321','TP/3452','2007-11-04 00:00:00','借出'), ('156833','TH/2345','2009-12-04 00:00:00','借出'), ('345214','R/345677','2008-11-03 00:00:00','在馆'); insert into readertype values (1,'学生',10,30), (2,'教师',20,60), (3,'管理员',15,30), (4,'职工',15,20); insert into reader values ('0016','苏小东',123456,1,'1999-09-09 00:00:00','有效'), ('0017','张明',123456,1,'2010-09-10 00:00:00','有效'), ('0018','梁君红',123456,1,'2010-09-10 00:00:00','有效'), ('0021','赵清远',123456,2,'2010-07-01 00:00:00','有效'), ('0034','李瑞清',123456,3,'2009-08-03 00:00:00','有效'), ('0042','张明月',123456,4,'1997-04-23 00:00:00','有效'); insert into bookborrow values ('001328','132789','0017','2011-01-24 00:00:00','2011-02-28 00:00:00','已还'), ('001356','145234','0018','2011-02-12 00:00:00','2011-02-27 00:00:00','已还'), ('001432','132782','0016','2011-03-04 00:00:00','2011-04-05 00:00:00','已还'), ('001435','145321','0021','2011-08-09 00:00:00','2011-09-02 00:00:00','已还'), ('001578','156833','0034','2011-10-01 00:00:00','2011-11-01 00:00:00','未还'), ('001679','345214','0042','2011-02-21 00:00:00','2011-03-05 00:00:00','未还');
2.查询数据library
use library ; -- 查询数据library show create database library ; -- 1.查询book表的书号, 书名和借出数量 select bookid, bookname , borrowsum from book; -- 2.用别名查询book表的书号, 书名和借出数量 select bookid as "书号" ,bookname as "书名" , borrowsum as "借出数量" from book; -- 3.查询类型是学生的所有读者的信息 select * from reader where retypeid = (select retypeid from readertype where readername = '学生'); -- 4.查询借出时间在2011年3月1日和2011年10月1日之间的图书 select * from bookborrow where borrowtime between '2011-01-01' and '2011-10-01'; -- 5.查询借出时间在2011年3月1日之后并且还书时间在2011年10月1日之前的图书 # select bookBarcode from bookborrow where borrowTime >= "2011-03-01" and returnTime <= "2011-10-01"; --6. in关键字查询类型是老师或者学生的读者信息 # select * from reader where retypeid in ((select retypeid from readertype where readerName = "学生"),(select retypeid from readertype where readerName = "教师")); --7. 查询书名包含程序的图书信息 # select * from book where bookName like "%程序%"; -- 8.查询借出数量排名前3的图书 # select * from book order by borrowSum desc limit 3; --9. 按图书借出数量从高到低查询, 如果借出数量相同, 再按价格高低排序 # select * from book order by borrowSum desc, bookprice desc; --10. 查找图书表中从第2条记录开始的5条记录的名称和价格 # select bookname, bookprice from book limit 1,5; -- 11.按照读者类型分组查询借出图书的数量 # select * from bookborrow as b1 left join reader as b2 on b1.readerid = b2.readerid ; # select count(bookBarcode) as sumbook from bookborrow as b1 left join reader as b2 on b1.readerid = b2.readerid GROUP BY retypeid; --12. 查询各个出版社的图书的平均价格 # select avg(bookprice) as "平均价格" from book GROUP BY bookpublisher; -- 13.查询读者编号是0021的读者借书的信息,包括读者名, 图书号, 借出时间和归还时间 # reader, bookborrow, bookstorage # 把三张表全部链接在一起 # select readerName, bookid, borrowTime, returnTime from bookborrow as b1 left join reader as b2 on b1.readerid = b2.readerid LEFT JOIN bookstorage as b3 on b1.bookbarcode = b3.bookbarcode where b1.readerId = "0021"; --14. 查询所有读者的借书信息, 包括读者名, 图书名, 借出时间和归还时间 # select readername, bookname, borrowTime, returnTime from bookborrow as b1 left join reader as b2 on b1.readerid = b2.readerid LEFT JOIN bookstorage as b3 on b1.bookbarcode = b3.bookbarcode LEFT JOIN book as b4 on b3.bookid = b4.bookid; --15. 查询借出数量大于书籍编号为TP/3452的借出数量的图书信息 select readername, bookname, borrowTime, returnTime from bookborrow as b1 left join reader as b2 on b1.readerid = b2.readerid LEFT JOIN bookstorage as b3 on b1.bookbarcode = b3.bookbarcode LEFT JOIN book as b4 on b3.bookid = b4.bookid where borrowsum > (select borrowsum from book where bookid = TP/3452); -- 16.查询已借了图书的读者信息 # bookborrow, reader, bookstorage select * from bookstorage as a1 LEFT JOIN bookborrow as a2 on a1.bookbarcode = a2.bookbarcode LEFT JOIN reader as a3 on a2.readerid = a3.readerid where bookstatus = "借出";