创建数据库library
创建数据表
图书类别表(booktype
)
序号 | 属性名称 | 含义 | 数据类型 | 是否为空 | 备注 |
1 |
| 类别编号 |
|
| 主键 |
2 |
| 类别名称 |
|
|
图书信息表(book
)
序号 | 属性名称 | 含义 | 数据类型 | 是否为空 | 备注 |
1 |
| 图书编号 |
|
| 主键 |
2 |
| 图书名称 |
|
| |
3 |
| 类别编号 |
|
| 外键 |
4 |
| 图书作者 |
|
| |
5 |
| 出版社 |
|
| |
6 |
| 图书价格 |
|
| |
7 |
| 借阅次数 |
|
|
图书存储信息表(bookstorage
)
序号 | 属性名称 | 含义 | 数据类型 | 是否为空 | 备注 |
1 |
| 图书条码 |
|
| 主键 |
2 |
| 图书编号 |
|
| 外键 |
3 |
| 图书入馆时间 |
|
| |
4 |
| 图书状态 |
|
|
读者类别表(readertype
)
序号 | 属性名称 | 含义 | 数据类型 | 是否为空 | 备注 |
1 |
| 类别编号 |
|
| |
2 |
| 类别名称 |
|
| |
3 |
| 可借数量 |
|
| |
4 |
| 可借天数 |
|
|
读者信息表(reader
)
序号 | 属性名称 | 含义 | 数据类型 | 是否为空 | 备注 |
1 |
| 读者编号 |
|
| 主键 |
2 |
| 读者姓名 |
|
| |
3 |
| 读者密码 |
|
| |
4 |
| 类别编号 |
|
| 外键 |
5 |
| 发证日期 |
|
| |
6 |
| 借书证状态 |
|
|
图书借阅表(bookborrow
)
序号 | 属性名称 | 含义 | 数据类型 | 是否为空 | 备注 |
1 |
| 借阅号 |
|
| 主键 |
2 |
| 图书条码 |
|
| 外键 |
3 |
| 读者编号 |
|
| 外键 |
4 |
| 借书日期 |
|
| |
5 |
| 还书日期 |
|
| |
6 |
| 借阅状态 |
|
|
为创建的表插入如下数据
图书类别表(booktype
)
|
|
1 | 自然科学 |
2 | 数学 |
3 | 计算机 |
4 | 建筑水利 |
5 | 旅游地理 |
6 | 励志/自我实现 |
7 | 工业技术 |
8 | 基础医学 |
9 | 室内设计 |
10 | 人文景观 |
图书信息表(book
)
|
|
|
|
|
|
|
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
)
|
|
|
|
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
)
|
|
|
|
1 | 学生 | 10 | 30 |
2 | 教师 | 20 | 60 |
3 | 管理员 | 15 | 30 |
4 | 职工 | 15 | 20 |
读者信息表(reader
)
|
|
|
|
|
|
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
)
|
|
|
|
|
|
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 | 未还 |
查询数据
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 = 1;
复制代码
4 查询借出时间在2011年3月1日
和2011年10月1日
之间的图书
select * from bookborrow where borrowtime >= '2011-3-1' and borrowtime <= '2011-10-1';
复制代码
5 查询借出时间在2011年3月1日
之后并且还书时间在2011年10月1日
之前的图书
select * from bookborrow where borrowtime >= '2011-3-1' and returntime <= '2011-10-1';
复制代码
6 in
关键字查询类型是老师
或者学生
的读者信息
select * from reader where retypeid in (1,2);
复制代码
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
reader.retypeid,
count( * )
FROM
bookborrow
JOIN reader ON reader.readerid = bookborrow.readerid
GROUP BY
reader.retypeid;
复制代码
12 查询各个出版社
的图书的平均价格
select bookpublisher,avg(bookprice) from book group by bookpublisher;
复制代码
13 查询读者编号是0021
的读者借书的信息,包括读者名, 图书号, 借出时间和归还时间
SELECT
reader.readername,
bookstorage.bookid,
bookborrow.borrowtime,
bookborrow.returntime
FROM
reader
JOIN bookborrow ON bookborrow.readerid = reader.readerid
JOIN bookstorage ON bookstorage.bookbarcode = bookborrow.bookbarcode
WHERE
reader.readerid = '0021';
复制代码
14 查询所有读者的借书信息, 包括读者名, 图书名, 借出时间和归还时间
SELECT
reader.readername,
book.bookname,
bookstorage.bookid,
bookborrow.borrowtime,
bookborrow.returntime
FROM
reader
JOIN bookborrow ON bookborrow.readerid = reader.readerid
JOIN bookstorage ON bookstorage.bookbarcode = bookborrow.bookbarcode
JOIN book ON book.bookid = bookstorage.bookid;
复制代码
15 查询借出数量大于书籍编号为TP/3452
的借出数量的图书信息
select * from book where borrowsum > (select borrowsum from book where bookid = 'TP/3452');
复制代码
16 查询已借了图书的读者信息
select * from reader where readerid in (select readerid from bookborrow WHERE borrowstatus = '未还');
复制代码
创建数据库stucourse
没有表结构, 根据数据, 自己决定使用哪种数据类型
学生表(student
)
|
|
|
|
|
1001 | 宋江 | 男 | 25 | 计算机系 |
3002 | 张明 | 男 | 23 | 生物系 |
1003 | 李小鹏 | 男 | 26 | 计算机系 |
1004 | 郑冬 | 女 | 25 | 计算机系 |
4005 | 李晓红 | 女 | 27 | 工商管理 |
5006 | 赵紫月 | 女 | 24 | 外语系 |
教师表(teacher
)
|
|
|
|
|
|
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
)
|
|
|
|
|
| 计算机基础 |
| 2009-4-6 | 计算机系 |
| 工商管理基础 |
| 2009-7-16 | 工商管理 |
| 生物科学 |
| 2010-3-6 | 生物系 |
| 大学物理 |
| 2009-4-26 | 物理系 |
| 数据库原理 |
| 2010-2-6 | 计算机系 |
选课表(scourse
)
|
|
|
|
1001 | 87 |
| 3102 |
1001 | 77 |
| 4105 |
1001 | 63 |
| 3108 |
1001 | 56 |
| 5102 |
3002 | 78 |
| 3108 |
3002 | 78 |
| 5102 |
1003 | 89 |
| 9103 |
1004 | 56 |
| 3106 |
4005 | 87 |
| 5102 |
5006 |
|
| 7101 |
教材表(bookinfo
)
|
|
|
|
|
|
| 人民大学出版社 | 34.56 | 8 |
|
| 清华大学出版社 | 51.75 | 10 |
|
| 邮电出版社 | 48.5 | 11 |
|
| 北大出版社 | 49.2 | 40 |
|
| 邮电出版社 | 65.4 | 20 |
查询数据
- 查询全体学生的
学号
,姓名
和年龄
select sid,sname,age from student;
复制代码
- 查询选修了课程的
学生号
select sid from student where sid in (select sid from scourse);
复制代码
- 查询选修课程号
c3
的学号
和成绩
select sid, score from scourse where cid = 'C3';
复制代码
- 查询成绩高于
85分
的学生的学号
,课程号
和成绩
SELECT
sid,
score,
cid
FROM
scourse
WHERE
score > 85;
复制代码
- 查询没有选修
C1
也没有选修C2
的学生学号
,课程号
和成绩
SELECT
sid,
score,
cid
FROM
scourse
WHERE
cid NOT IN ( 'c1', 'c2' );
复制代码
- 查询工资在1500~2000之间的教师的
教师号
,姓名
和职称
SELECT
tid,
tname,
title
FROM
teacher
WHERE
salary BETWEEN 1500
AND 2000;
复制代码
- 查询选修
C1
或C2
的学生的学号
,课程号
和成绩
SELECT
sid,
score,
cid
FROM
scourse
WHERE
cid IN ( 'c1', 'c2' );
复制代码
- 查询所有
姓张
的教师的教师号
和姓名
SELECT
teacher.tid,
teacher.tname
FROM
teacher
WHERE
teacher.tname LIKE '张%';
复制代码
- 查询姓名中第2个汉字是
力
的教师号
和姓名
SELECT
teacher.tid,
teacher.tname
FROM
teacher
WHERE
teacher.tname LIKE '_力%';
复制代码
- 查询所有没有成绩的学生的
学号
和相应的课程号
SELECT
sid,
cid
FROM
scourse
WHERE
score IS NULL;
复制代码
- 查询选修
C1
的学生学号
和成绩
,并按照成绩降序排列
SELECT
sid,
score
FROM
scourse
WHERE
cid = 'C1'
ORDER BY
score DESC;
复制代码
- 查询选修
C2
,或者C3
,或者C4
,或者C5
课程的学号
,课程号
和成绩
, 查询结果按学号升序
排列,学号相同,再按成绩降序排列
SELECT
sid,
cid,
score
FROM
scourse
WHERE
cid IN ( 'C2', 'C3', 'C4', 'C5' )
ORDER BY
sid,
score DESC;
复制代码
- 查询选修
C1
的学生学号
和成绩
,并显示成绩前三的学生
SELECT
sid,
score
FROM
scourse
WHERE
cid = 'C1'
ORDER BY
score DESC
LIMIT 3;
复制代码
- 查询计算机系学生的总数
SELECT
count( * )
FROM
student
WHERE
dept = '计算机系';
复制代码
- 查询每位学生的
学号
及其选修课的门数
SELECT
sid,
count( * )
FROM
scourse
GROUP BY
sid;
复制代码
- 在分组查询中使用
having
条件查询,平均成绩大于85的学生学号
及平均成绩
SELECT
sid,
avg( score )
FROM
scourse
GROUP BY
sid
HAVING
avg( score ) > 85;
复制代码
- 查询选课在两门以上且各门课均及格的学生的学号及其总成绩, 查询结果按总成绩
降序列出
SELECT
sid,
count( * ),
sum( score )
FROM
scourse
WHERE
score > 60
and sid not in (select sid from scourse where score < 60)
GROUP BY
sid
HAVING
count( * ) > 2
ORDER BY
sum( score ) DESC;
复制代码
- 查询所有选课学生的
学号
,姓名
,选课名称
及成绩
SELECT
student.sid,
student.sname,
scourse.cid,
scourse.score
FROM
scourse,
student
WHERE
student.sid = scourse.sid;
复制代码
- 查询选修
C1
课程且成绩在60以上的所有学生的学号
,姓名
和分数
SELECT
student.sid,
student.sname,
scourse.score,
scourse.cid
FROM
student
JOIN scourse ON scourse.sid = student.sid
WHERE
scourse.cid = 'C1'
AND scourse.score > 60;
复制代码
- 查询与
李明
教师职称相同的教师号
,姓名
SELECT
teacher.tid,
teacher.tname,
teacher.title
FROM
teacher
WHERE
teacher.title = ( SELECT title FROM teacher WHERE tname = '李明' )
AND teacher.tname != '李明';
复制代码