mysql数据库练习题(涵盖几乎所有知识点)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: mysql数据库练习题(涵盖几乎所有知识点)

一、根据表结构或者表数据创建表并填充数据

创建数据库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 = "借出";
 
 
 
 
 


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 分布式计算 大数据
HBase分布式数据库关键技术与实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析了HBase的核心技术,包括数据模型、分布式架构、访问模式和一致性保证,并探讨了其实战应用,如大规模数据存储、实时数据分析及与Hadoop、Spark集成。同时,分享了面试经验,对比了HBase与其他数据库的差异,提出了应对挑战的解决方案,展望了HBase的未来趋势。通过Java API代码示例,帮助读者巩固理解。全面了解和掌握HBase,能为面试和实际工作中的大数据处理提供坚实基础。
391 3
|
6月前
|
关系型数据库 MySQL
【MySQL】——Select查询语句知识点练习(其一)
【MySQL】——Select查询语句知识点练习(其一)
|
15天前
|
存储 Oracle 关系型数据库
[MySQL]知识点
本文详细介绍了MySQL中int族和char族数据类型的特点、存储范围及使用建议,以及text、blob类型和内置字符处理函数。文章强调了数据类型选择的重要性,并提供了多个实例帮助理解。
30 0
[MySQL]知识点
|
17天前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
37 2
|
1月前
|
关系型数据库 MySQL 数据库
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
59 5
|
6月前
|
SQL 存储 Java
Java数据库编程知识点总结
【4月更文挑战第6天】Java数据库编程涉及使用JDBC API与关系型数据库交互。关键知识点包括:JDBC作为标准API用于数据库访问;加载驱动并用DriverManager建立数据库连接;掌握SQL语句的编写与执行;使用PreparedStatement和CallableStatement执行预编译SQL及存储过程;ResultSet处理查询结果;理解事务管理确保数据一致性;批处理优化多SQL执行;连接池提升性能稳定性;以及异常处理如SQLException和ClassNotFoundException的捕获。
48 6
|
3月前
|
存储 关系型数据库 MySQL
mysql锁的知识点简述
了解和合理应用MySQL中的锁机制,对于设计高并发、高可用的数据库应用至关重要。在系统设计初期就要考量锁策略,根据实际使用场景灵活调整,以最小化锁竞争,提高事务处理速度。
57 0
|
5月前
|
关系型数据库 MySQL 数据库
MySQL SELECT查询实战:练习题精选,提升你的数据库查询技能
MySQL SELECT查询实战:练习题精选,提升你的数据库查询技能
|
5月前
|
SQL 关系型数据库 MySQL
Mysql从入门到精通——Mysql知识点总结(基础篇)
Mysql从入门到精通——Mysql知识点总结(基础篇)
|
5月前
|
SQL 数据库
sql数据库练习题(涵盖大部分知识点)
sql数据库练习题(涵盖大部分知识点)