[MySQL光速入门]007 做业解答

建立数据库library

建立数据表

  1. 图书类别表(booktype)

序号 属性名称 含义 数据类型 是否为空 备注
1 typeid 类别编号 int not null 主键
2 typename 类别名称 varchar(20) null
  1. 图书信息表(book)

序号 属性名称 含义 数据类型 是否为空 备注
1 bookid 图书编号 char(10) not null 主键
2 bookname 图书名称 varchar(20) not null
3 typeid 类别编号 int null 外键
4 bookauthor 图书做者 varchar(20) null
5 bookpublisher 出版社 varchar(50) null
6 bookprice 图书价格 doublue null
7 borrowsum 借阅次数 int null
  1. 图书存储信息表(bookstorage)

序号 属性名称 含义 数据类型 是否为空 备注
1 bookbarcode 图书条码 char(20) not null 主键
2 bookid 图书编号 char(10) not null 外键
3 bookintime 图书入馆时间 datetime null
4 bookstatus 图书状态 varchar(4) null
  1. 读者类别表(readertype)

序号 属性名称 含义 数据类型 是否为空 备注
1 retypeid 类别编号 int not null
2 typename 类别名称 varchar(20) not null
3 borrowquantity 可借数量 int not null
4 borrowday 可借天数 int null
  1. 读者信息表(reader)

序号 属性名称 含义 数据类型 是否为空 备注
1 readerid 读者编号 char(10) not null 主键
2 readername 读者姓名 varchar(20) not null
3 readerpass 读者密码 varchar(20) not null
4 retypeid 类别编号 int null 外键
5 readerdate 发证日期 datetime null
6 readerstatus 借书证状态 varchar(4) null
  1. 图书借阅表(bookborrow)

序号 属性名称 含义 数据类型 是否为空 备注
1 borrowid 借阅号 char(10) not null 主键
2 bookbarcode 图书条码 char(20) not null 外键
3 readerid 读者编号 char(10) not null 外键
4 borrowtime 借书日期 datetime null
5 returntime 还书日期 datetime null
6 borrowstatus 借阅状态 varchar(4) null

为建立的表插入以下数据

  1. 图书类别表(booktype)

typeid typename
1 天然科学
2 数学
3 计算机
4 建筑水利
5 旅游地理
6 励志/自我实现
7 工业技术
8 基础医学
9 室内设计
10 人文景观
  1. 图书信息表(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
  1. 图书存储信息表(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 在馆
  1. 读者类别表(readertype)

retypeid typename borrowquantity borrowday
1 学生 10 30
2 教师 20 60
3 管理员 15 30
4 职工 15 20
  1. 读者信息表(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 有效
  1. 图书借阅表(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 未还

查询数据

1 查询book表的书号, 书名借出数量mysql

select `bookid`,`bookname`,`borrowsum` from book;
复制代码

2 用别名查询book表的书号, 书名借出数量git

select `bookid` as 书号,`bookname` as 书名,`borrowsum` as 借出数量 from book;
复制代码

3 查询类型是学生的全部读者的信息sql

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日以前的图书post

select * from bookborrow where borrowtime >= '2011-3-1' and returntime <= '2011-10-1';
复制代码

6 in关键字查询类型是老师或者学生的读者信息ui

select * from reader where retypeid in (1,2);
复制代码

7 查询书名包含程序的图书信息spa

select * from book where bookname like '%程序%';
复制代码

8 查询借出数量排名前3的图书设计

select * from book order by borrowsum desc limit 3;
复制代码

9 按图书借出数量从高到低查询, 若是借出数量相同, 再按价格高低排序3d

select * from book order by borrowsum desc,bookprice desc;
复制代码

10 查找图书表中从第2条记录开始的5条记录的名称和价格code

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

没有表结构, 根据数据, 本身决定使用哪一种数据类型

  1. 学生表(student)

sid sname sex age dept
1001 宋江 25 计算机系
3002 张明 23 生物系
1003 李小鹏 26 计算机系
1004 郑冬 25 计算机系
4005 李晓红 27 工商管理
5006 赵紫月 24 外语系
  1. 教师表(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
  1. 课程表(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 计算机系
  1. 选课表(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
  1. 教材表(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

查询数据

  1. 查询全体学生的学号, 姓名年龄

    select sid,sname,age from student;
    复制代码
  2. 查询选修了课程的学生号

    select sid from student where sid in (select sid from scourse);
    复制代码
  3. 查询选修课程号c3学号成绩

    select sid, score from scourse where cid = 'C3';
    复制代码
  4. 查询成绩高于85分的学生的学号课程号成绩

    SELECT
    	sid,
    	score,
    	cid 
    FROM
    	scourse 
    WHERE
    	score > 85;
    复制代码
  5. 查询没有选修C1也没有选修C2学生学号课程号成绩

    SELECT
    	sid,
    	score,
    	cid 
    FROM
    	scourse 
    WHERE
    	cid NOT IN ( 'c1', 'c2' );
    复制代码
  6. 查询工资在1500~2000之间的教师的教师号姓名职称

    SELECT
    	tid,
    	tname,
    	title
    FROM
    	teacher 
    WHERE
    	salary BETWEEN 1500 
    	AND 2000;
    复制代码
  7. 查询选修C1C2的学生的学号课程号成绩

    SELECT
    	sid,
    	score,
    	cid 
    FROM
    	scourse 
    WHERE
    	cid IN ( 'c1', 'c2' );
    复制代码
  8. 查询全部姓张的教师的教师号姓名

    SELECT
    	teacher.tid,
    	teacher.tname 
    FROM
    	teacher 
    WHERE
    	teacher.tname LIKE '张%';
    复制代码
  9. 查询姓名中第2个汉字是教师号姓名

    SELECT
    	teacher.tid,
    	teacher.tname 
    FROM
    	teacher 
    WHERE
    	teacher.tname LIKE '_力%';
    复制代码
  10. 查询全部没有成绩的学生的学号和相应的课程号

    SELECT
    	sid,
    	cid 
    FROM
    	scourse 
    WHERE
    	score IS NULL;
    复制代码
  11. 查询选修C1学生学号成绩,并按照成绩降序排列

    SELECT
    	sid,
    	score 
    FROM
    	scourse 
    WHERE
    	cid = 'C1' 
    ORDER BY
    	score DESC;
    复制代码
  12. 查询选修C2,或者C3,或者C4,或者C5课程的学号课程号成绩, 查询结果按学号升序排列,学号相同,再按成绩降序排列

    SELECT
    	sid,
    	cid,
    	score 
    FROM
    	scourse 
    WHERE
    	cid IN ( 'C2', 'C3', 'C4', 'C5' ) 
    ORDER BY
    	sid,
    	score DESC;
    复制代码
  13. 查询选修C1学生学号成绩,并显示成绩前三的学生

    SELECT
    	sid,
    	score 
    FROM
    	scourse 
    WHERE
    	cid = 'C1' 
    ORDER BY
    	score DESC 
    	LIMIT 3;
    复制代码
  14. 查询计算机系学生的总数

    SELECT
    	count( * ) 
    FROM
    	student 
    WHERE
    	dept = '计算机系';
    复制代码
  15. 查询每位学生的学号及其选修课的门数

    SELECT
    	sid,
    	count( * ) 
    FROM
    	scourse 
    GROUP BY
    	sid;
    复制代码
  16. 在分组查询中使用having条件查询,平均成绩大于85的学生学号平均成绩

    SELECT
    	sid,
    	avg( score ) 
    FROM
    	scourse 
    GROUP BY
    	sid 
    HAVING
    	avg( score ) > 85;
    复制代码
  17. 查询选课在两门以上且各门课均及格的学生的学号及其总成绩, 查询结果按总成绩降序列出

    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;
    复制代码
  18. 查询全部选课学生的学号姓名选课名称成绩

    SELECT
    	student.sid,
    	student.sname,
    	scourse.cid,
    	scourse.score 
    FROM
    	scourse,
    	student 
    WHERE
    	student.sid = scourse.sid;
    复制代码
  19. 查询选修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;
    复制代码
  20. 查询与李明教师职称相同的教师号, 姓名

    SELECT
    	teacher.tid,
    	teacher.tname,
    	teacher.title 
    FROM
    	teacher 
    WHERE
    	teacher.title = ( SELECT title FROM teacher WHERE tname = '李明' ) 
    	AND teacher.tname != '李明';
    复制代码

快速跳转

相关文章
相关标签/搜索