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

创建数据库library

创建数据表

  1. 图书类别表(booktype)

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

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

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

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

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

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

为创建的表插入如下数据

  1. 图书类别表(booktype)

typeidtypename
1自然科学
2数学
3计算机
4建筑水利
5旅游地理
6励志/自我实现
7工业技术
8基础医学
9室内设计
10人文景观
  1. 图书信息表(book)

bookidbooknametypeidbookauthorbookpublisherbookpriceborrowsum
TP39/1712Java程序设计3陈永红机械工业出版社35.530
013452离散数学2张小新机械工业出版社45.510
TP/3452JSP程序设计案例3刘城清电子工业出版社42.88
TH/2345机械设计手册7黄明凡人民邮电出版社4010
R/345677中医的故事8李奇德国防工业出版社20.05
  1. 图书存储信息表(bookstorage)

bookbarcodebookidbookintimebookstatus
132782TP39/17122009-08-10 00:00:00在馆
132789TP39/17122009-08-10 00:00:00借出
1452340134522008-12-06 00:00:00借出
145321TP/34522007-11-04 00:00:00借出
156833TH/23452009-12-04 00:00:00借出
345214R/3456772008-11-03 00:00:00在馆
  1. 读者类别表(readertype)

retypeidtypenameborrowquantityborrowday
1学生1030
2教师2060
3管理员1530
4职工1520
  1. 读者信息表(reader)

readeridreadernamereaderpassretypeidreaderdatereaderstatus
0016苏小东12345611999-09-09 00:00:00有效
0017张明12345612010-09-10 00:00:00有效
0018梁君红12345612010-09-10 00:00:00有效
0021赵清远12345622010-07-01 00:00:00有效
0034李瑞清12345632009-08-03 00:00:00有效
0042张明月12345641997-04-23 00:00:00有效
  1. 图书借阅表(bookborrow)

borrowidbookbarcodereaderidborrowtimereturntimeborrowstatus
00132813278900172011-01-24 00:00:002011-02-28 00:00:00已还
00135614523400182011-02-12 00:00:002011-02-27 00:00:00已还
00143213278200162011-03-04 00:00:002011-04-05 00:00:00已还
00143514532100212011-08-09 00:00:002011-09-02 00:00:00已还
00157815683300342011-10-01 00:00:002011-11-01 00:00:00未还
00167934521400422011-02-21 00:00:002011-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

没有表结构, 根据数据, 自己决定使用哪种数据类型

  1. 学生表(student)

sidsnamesexagedept
1001宋江25计算机系
3002张明23生物系
1003李小鹏26计算机系
1004郑冬25计算机系
4005李晓红27工商管理
5006赵紫月24外语系
  1. 教师表(teacher)

tidtnametitlesalarydeptcid
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)

cidcnamecbookctestdept
C1计算机基础b12312009-4-6计算机系
C2工商管理基础b12322009-7-16工商管理
C3生物科学b12332010-3-6生物系
C4大学物理b12342009-4-26物理系
C5数据库原理b12352010-2-6计算机系
  1. 选课表(scourse)

sidscorecidtid
100187C13102
100177C24105
100163C33108
100156C45102
300278C33108
300278C45102
100389C19103
100456C23106
400587C45102
5006nullC17101
  1. 教材表(bookinfo)

bidbnamebpublishbpricequantity
b1231Image Processing人民大学出版社34.568
b1212Signal Processing清华大学出版社51.7510
b1233Digital Signal Processing邮电出版社48.511
b1234The Logic Circuit北大出版社49.240
b1235SQL Techniques邮电出版社65.420

查询数据

  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 != '李明';
    复制代码

快速跳转

转载于:https://juejin.im/post/5c9b301f518825529a0c78ff

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值