一、图书管理系统
作业:设计图书管理系统,包含学生和图书信息,且图书可以进行分类,学生可以在一个时间范围内借阅
图书,并在这个时间范围内归还图书。
要求:
1. 涉及以上场景的数据库表,并建立表关系。
2. 查询某个分类下的图书借阅信息。
3. 查询在某个时间之后的图书借阅信息。
4. 查询图书借阅周期在某个时间范围内的图书借阅信息(图书借阅周期与查询时间范围有交集)。
思路:
①先建四张表:学生表、图书表、借阅表(记录表)、分类(待定)
②借阅表——中间表,实现学生和图书的多对多关系
③程序编写实现
1.图书表
create table book(
id int primary key,
name varchar(20),
author varchar(20),
price decimal(11,2),
category_id int,
foreign key(category_id) reference
category(id)
);
2.学生表
create table student(
id int primary key,
name varchar(20)
);
3.图书分类表 (一对多:图书分类表——图书表)
create table category(
id int primary key,
name varchar(20),
);
4.图书借阅信息表(多对多:学生,图书,时间)——中间表
create table borrow_info(
id int primary key,
start_time timestamp null,
end_time timestamp null,
book_id int,
student_id int,
foreign key(book_id) references book(id),
foreign key(student_id) references
student(id)
);
5.插入数据
6.查询
(1)查询在某个时间之后的图书借阅信息
(2)查询重复图书信息
SELECT
*
FROM
book
WHERE
( NAME, author ) IN ( SELECT NAME, author FROM book GROUP BY NAME,
author HAVING count( 0 ) > 1 );
(3)查询某个分类下的图书借阅信息
SELECT
bk.NAME book_name,
bk.author book_author,
s.NAME student_name,
bi.start_time,
bi.end_time
FROM
borrow_info bi
JOIN book bk ON bi.book_id = bk.id
JOIN category c ON bk.category_id = c.id
JOIN student s ON bi.student_id = s.id
WHERE
c.NAME = '计算机';
(4)查询图书借阅周期在某个时间范围内的图书借阅信息
SELECT
bk.NAME book_name,
bk.author book_author,
s.NAME student_name,
bi.start_time,
bi.end_time
FROM
borrow_info bi
JOIN book bk ON bi.book_id = bk.id
JOIN category c ON bk.category_id = c.id
JOIN student s ON bi.student_id = s.id
WHERE
bi.start_time<'2019-08-11 00:00:00' and bi.end_time>'2019-07-10 00:00:00';