一、前言
该项目非常适合MySQL入门学习的小伙伴,博主提供了源码、数据和一些查询语句,供大家学习和参考,代码和表设计有什么不恰当还请各位大佬多多指点。
所需环境
- MySQL可视化工具:navicat;
- 数据库:MySql 5.7/8.0等版本均可;
需求:
1:每个书店有多家供应商,每家供应商给多个书店供货。
2:每个书店聘用多名员工,每个员工只属于一个书店每个书店存放多本图书,多本图书存放在一家书店。
4: 每本图书可以被任何会员购买,一名会员可以购买任意一本图书。
备注:
书店包含下列属性: 编号,地址,书店名字,老板电话;
员工包含下列属性: 身份证,名字,性别,年龄;
图书包含下列属性: 编号,书名,价格,库存量;
会员包含下列属性: 编号,姓名,电话,积分;
关于某供应商给书店供货要描述供货日期;
关于书店聘用员工要描述聘用日期:
关于会员购买图书需要描述购买数量;
关于书店存放图书需要描述存放位置。
二、E-R图
三、关系模式
供应商:(供应商编号,供应商地址,供应商联系人,供应商联系电话,供应商名字,供应商备注)。
书店:(书店编号,书店地址,书店名字,书店老板电话)
员工:(身份证,员工名字,员工性别,员工年龄,书店编号,聘用时期)
图书:(图书编号,书名,价格,库存量,书店编号,存放位置)
会员:(会员编号,会员姓名,会员电话,积分)。
供应信息:(供应商编号,书店编号,供应时间)
购买信息:(会员编号,图书编号,购买数量)
备注:
下划线为主键,红色字为外键;
四、数据表的设计
表1 供应商
字段 | 数据类型 | 长度 | 备注 |
|
供应商编号 | varchar | 50 | 主键 |
|
供应商地址 | varchar | 50 |
|
|
供应商联系人 | varchar | 50 |
|
|
供应商联系电话 | varchar | 50 |
|
|
供应商名字 | varchar | 50 | Not null |
|
供应商备注 | varchar | 50 |
|
|
表2 书店
字段 | 数据类型 | 长度 | 备注 |
|
书店编号 | varchar | 50 | 主键 |
|
书店地址 | varchar | 50 |
|
|
书店名字 | varchar | 50 | Not null |
|
书店老板电话 | Varchar | 50 |
|
|
表3 员工
字段 | 数据类型 | 长度 | 备注 |
|
身份证 | varchar | 20 | 主键 |
|
员工性别 | varchar | 50 |
|
|
员工年龄 | Int | 3 |
|
|
员工名字 | varchar | 50 | Not null |
|
书店编号 | varchar | 50 | 外键 |
|
聘用时间 | date |
| Not null |
|
表4 图书
字段 | 数据类型 | 长度 | 备注 |
|
图书编号 | varchar | 50 | 主键 |
|
书名 | varchar | 50 | Not null |
|
价格 | float | 8 |
|
|
库存量 | int | 8 |
|
|
书店编号 | varchar | 50 | 外键 |
|
存放位置 | varchar | 50 | Not null |
|
表5 会员
字段 | 数据类型 | 长度 | 备注 |
|
会员编号 | varchar | 50 | 主键 |
|
会员姓名 | varchar | 50 | Not null |
|
会员电话 | varchar | 50 |
|
|
积分 | int | 50 |
|
|
表6 供应信息
字段 | 数据类型 | 长度 | 备注 |
|
供应商编号 | varchar | 50 | 主键 |
|
书店编号 | varchar | 50 | 主键 |
|
供货时间 | date |
| Not null |
|
表7 购买信息
字段 | 数据类型 | 长度 | 备注 |
|
图书编号 | varchar | 50 | 主键 |
|
会员编号 | varchar | 50 | 主键 |
|
购买数量 | int | 8 | Not null |
|
五、创建数据库
Create database 书店图书进销存管理系统 character set utf8 collate utf8_general_ci
-- 在新建表前选择数据库
Use 书店图书进销存管理系统
创建各实体表:
1. 供应商
create table 供应商
(供应商编号 VARCHAR(50) PRIMARY KEY,供应商地址 VARCHAR(50),供应商联系人 VARCHAR(50),供应商联系电话 VARCHAR(50),供应商名字 VARCHAR(50) NOT NULL,供应商备注 VARCHAR(50)
)
2.书店
CREATE TABLE 书店
(书店编号 varchar(50) PRIMARY KEY,书店地址 VARCHAR(50),书店名字 VARCHAR(50) NOT NULL,书店老板电话 VARCHAR(50)
)
3.员工
CREATE TABLE 员工
(身份证 VARCHAR(50) PRIMARY KEY,员工姓名 VARCHAR(50) NOT NULL,员工性别 VARCHAR(50),员工年龄 int(3),书店编号 VARCHAR(50),聘用时间 DATE NOT NULL,CONSTRAINT FK书店编号 FOREIGN KEY(书店编号) REFERENCES 书店(书店编号)
)
4.图书
CREATE TABLE 图书
(图书编号 VARCHAR(50) PRIMARY KEY,书名 VARCHAR(50) NOT NULL,价格 FLOAT(8),库存量 INT(8),书店编号 VARCHAR(50),存放位置 VARCHAR(50) NOT NULL,CONSTRAINT FK_书店编号 FOREIGN KEY (书店编号) REFERENCES 书店(书店编号)
)
5.会员
CREATE TABLE 会员
(会员编号 VARCHAR(50) PRIMARY KEY,会员姓名 VARCHAR(50) NOT NULL,会员电话 VARCHAR(50),积分 INT(5)
)
6. 供应信息
CREATE TABLE 供应信息
(供应商编号 VARCHAR(50),书店编号 VARCHAR(50),供应时间 DATE NOT NULL,PRIMARY KEY(供应商编号,书店编号)
)
7. 购买信息
CREATE TABLE 购买信息
(图书编号 VARCHAR(50),会员编号 VARCHAR(50),购买数量 INT(8) NOT NULL,PRIMARY KEY(图书编号,会员编号)
)
插入数据:
1. 供应商
INSERT INTO 供应商 VALUES ('G001','春熙路12号','李明','13123451234','邮电出版社','优等')
INSERT INTO 供应商 VALUES ('G002','天府路85号','薛鹏','15198762347','工业出版社','良好')
INSERT INTO 供应商 VALUES ('G003','太升路35号','林波','15823140987','机械出版社','良好')
INSERT INTO 供应商 VALUES ('G004','民航路94号','苏珊','18078651234','民航出版社','优等')
INSERT INTO 供应商 VALUES ('G005','芙蓉路53号','林达','18698704563','商务出版社','良好')
INSERT INTO 供应商 VALUES ('G006','天府三街6号','小野','19382069330','三街出版社','优等')
INSERT INTO 供应商 VALUES ('G007','十三区43号','成龙','17865989988','符咒出版社','优等')
INSERT INTO 供应商 VALUES ('G008','成华大道66号','谭警官','16666666666','成华出版社','良好')
INSERT INTO 供应商 VALUES ('G009','天益街83号','橙汁','18765498596','橙汁出版社','优等')
INSERT INTO 供应商 VALUES ('G0010','二仙桥23号','二大爷','15465989586','大爷版社','优等')
2.书店
INSERT INTO 书店 VALUES ('S001', '长城路5号', '求实书店', '13612345678')
INSERT INTO 书店 VALUES ('S002', '长江路64号', '上进书店', '13703456784')
INSERT INTO 书店 VALUES ('S003', '黄河路93号', '梦想书店', '13882346743')
INSERT INTO 书店 VALUES ('S004', '泰山路59路', '书虫书店', '13998762345')
INSERT INTO 书店 VALUES ('S005', '青城山路23号', '创业书店', '13976543214')
INSERT INTO 书店 VALUES ('S006', '春熙路13号', '邮电书店', '13598657412')
INSERT INTO 书店 VALUES ('S007', '天府路86号', '工业书店', '15146523698')
INSERT INTO 书店 VALUES ('S008', '太升路36号', '机械书店', '14756329833')
INSERT INTO 书店 VALUES ('S009', '民航路95号', '民航书店', '16654233322')
INSERT INTO 书店 VALUES ('S010', '芙蓉路54号', '商务书店', '13322336655')
3.员工
INSERT INTO 员工 VALUES ('511001199001011234', '张三', '男', 33, 'S001', '2009-07-01')
INSERT INTO 员工 VALUES ('510102199102032345', '李四', '男', 32, 'S002', '2008-03-01')
INSERT INTO 员工 VALUES ('510101199203033456', '王丽', '女', 31, 'S003', '2007-04-01')
INSERT INTO 员工 VALUES ('510101199303033456', '王宝玉', '男', 30, 'S004', '2007-04-01')
INSERT INTO 员工 VALUES ('510104199408095678', '秦松', '男', 29, 'S005', '2006-08-01')
INSERT INTO 员工 VALUES ('510001199105079965', '丁真', '男', 32, 'S006', '2010-06-28')
INSERT INTO 员工 VALUES ('510011199304261355', '李明', '男', 30, 'S007', '2009-01-15')
INSERT INTO 员工 VALUES ('510010199512140932', '李华', '女', 28, 'S008', '2012-05-29')
INSERT INTO 员工 VALUES ('510110199811230623', '王明', '男', 25, 'S009', '2013-04-30')
INSERT INTO 员工 VALUES ('510023199407112556', '林琬茹', '女', 29, 'S010', '2009-09-01')
4.图书
INSERT INTO 图书 VALUES ('T001', '围城', 58, 31, 'S001', '一楼')
INSERT INTO 图书 VALUES ('T002', '边城', 46, 12, 'S002', '二楼')
INSERT INTO 图书 VALUES ('T003', '平凡的世界', 32, 87, 'S003', '三楼')
INSERT INTO 图书 VALUES ('T004', '撒野', 36, 67, 'S004', '二楼')
INSERT INTO 图书 VALUES ('T005', '人间失格', 28, 28, 'S005', '二楼')
INSERT INTO 图书 VALUES ('T006', '狂人日记', 99, 16, 'S006', '三楼')
INSERT INTO 图书 VALUES ('T007', '乌合之众', 32, 86, 'S007', '一楼')
INSERT INTO 图书 VALUES ('T008', '自卑与超越', 42, 66, 'S008', '二楼')
INSERT INTO 图书 VALUES ('T009', '人生', 66, 74, 'S009', '三楼')
INSERT INTO 图书 VALUES ('T010', '活着', 78, 33, 'S010', '一楼')
5.会员
INSERT INTO 会员 VALUES ('V001', '林丹', '17109872345', 654)
INSERT INTO 会员 VALUES ('V002', '十三', '17209874321', 1368)
INSERT INTO 会员 VALUES ('V003', '陈羽', '17308763456', 69)
INSERT INTO 会员 VALUES ('V004', '杨帆', '17408765467', 743)
INSERT INTO 会员 VALUES ('V005', '小白', '17567431298', 475)
INSERT INTO 会员 VALUES ('V006', '小黑', '17632684456', 216)
INSERT INTO 会员 VALUES ('V007', '黑大帅', '17698978445', 448)
INSERT INTO 会员 VALUES ('V008', '潇洒哥', '17544748596', 666)
INSERT INTO 会员 VALUES ('V009', '格林', '17488932254', 1473)
INSERT INTO 会员 VALUES ('V010', '路遥', '17588141121', 187)
6. 供应信息
INSERT INTO 供应信息 VALUES ('G001', 'S001', '2020-04-21')
INSERT INTO 供应信息 VALUES ('G002', 'S002', '2020-04-22')
INSERT INTO 供应信息 VALUES ('G003', 'S003', '2020-04-23')
INSERT INTO 供应信息 VALUES ('G004', 'S004', '2020-04-20')
INSERT INTO 供应信息 VALUES ('G005', 'S005', '2020-04-21')
INSERT INTO 供应信息 VALUES ('G006', 'S006', '2020-04-22')
INSERT INTO 供应信息 VALUES ('G007', 'S007', '2020-04-22')
INSERT INTO 供应信息 VALUES ('G008', 'S008', '2020-04-21')
INSERT INTO 供应信息 VALUES ('G009', 'S009', '2020-04-24')
INSERT INTO 供应信息 VALUES ('G010', 'S010', '2020-04-23')
7. 购买信息
INSERT INTO 购买信息 VALUES ('T001', 'V010', 2)
INSERT INTO 购买信息 VALUES ('T002', 'V009', 4)
INSERT INTO 购买信息 VALUES ('T003', 'V008', 5)
INSERT INTO 购买信息 VALUES ('T004', 'V007', 2)
INSERT INTO 购买信息 VALUES ('T005', 'V006', 1)
INSERT INTO 购买信息 VALUES ('T006', 'V005', 6)
INSERT INTO 购买信息 VALUES ('T007', 'V004', 7)
INSERT INTO 购买信息 VALUES ('T008', 'V003', 3)
INSERT INTO 购买信息 VALUES ('T009', 'V002', 2)
INSERT INTO 购买信息 VALUES ('T010', 'V001', 1)
六、主要查询命令
-
查询所有书店地址信息结果
select 书店地址 from 书店
-
查询四月所有供应商中哪些供应过书籍。(查看供应商编号)
select DISTINCT 供应商编号 from 供应信息 where 供应时间 like '2020-04%'
-
查询所有书店中年龄最大的男员工姓名。
select 员工姓名 from 员工 where 员工性别 = '男' ORDER BY 员工年龄 desc limit 1
-
查询书店老板电话为139开头的书店名字。
select 书店名字 from 书店 where 书店老板电话 like '139%'
-
查询价格低于平均价格的书籍名字。
SELECT 书名 FROM 图书 WHERE 价格 < (SELECT AVG(价格) FROM 图书)
-
查询购买书籍数量最多的会员名字。
SELECT 会员姓名 FROM 会员 WHERE 会员编号 = (select 会员编号 from 购买信息 GROUP BY 会员编号 ORDER BY(购买数量) desc limit 1)
-
查询员工人数最少的书店所在地址。
select 书店地址 from 书店 where 书店编号 = (select 书店编号 from 员工 GROUP BY 书店编号 ORDER BY count(*) asc limit 1)
-
查询优等供应商给哪些书店供货过,并按照供货时间从早到晚排序。
select * from 供应信息 where 供应商编号 in (select 供应商编号 from 供应商 where 供应商备注 = '优等') ORDER BY 供应时间
-
查询价格最贵的三种图书,存放在哪些书店里。(查看书店名字)。
select 书店名字 from 书店 where 书店编号 = (select 书店编号 from 图书 ORDER BY 价格 desc limit 1) or 书店编号 = (select 书店编号 from 图书 ORDER BY 价格 desc limit 1,1)or 书店编号 = (select 书店编号 from 图书 ORDER BY 价格 desc limit 2,1)
-
查询人生这本书,被哪些会员购买过。
select 会员姓名 from 会员 where 会员编号 in (select 会员编号 from 购买信息 where 图书编号 in (select 图书编号 from 图书 where 书名 = '人生'))
七、答疑解惑
代码有问题或需要其他的查询语句,都可以随时评论留言或联系博主。
还多请各位小伙伴多多点赞支持,你们的支持是我最大的动力。
博主VX:18884281851
谢谢各位的支持~~