当前位置: 首页 > news >正文

图书销售系统数据库设计方案

1. 需求分析

1.1 系统功能需求

  • 图书信息管理
  • 客户信息管理
  • 订单管理
  • 库存管理
  • 销售统计分析
  • 出版社管理
  • 作者管理

1.2 数据实体

  • 图书(books)
  • 客户(customers)
  • 订单(orders)
  • 订单详情(order_details)
  • 出版社(publishers)
  • 作者(authors)
  • 图书作者关联(book_authors)
  • 分类(categories)

2. 概念设计(ER图)

客户(Customer) ---< 订单(Order) ---< 订单详情(OrderDetail) >--- 图书(Book)|
图书(Book) ---< 图书作者关联(BookAuthor) >--- 作者(Author)
图书(Book) ---> 出版社(Publisher)
图书(Book) ---> 分类(Category)

1761489909021

3. 逻辑设计

3.1 关系模式

-- 出版社表
Publishers(PublisherID, PublisherName, ContactPerson, Phone, Address, Email)-- 分类表  
Categories(CategoryID, CategoryName, Description)-- 作者表
Authors(AuthorID, AuthorName, Nationality, BirthDate, Biography)-- 图书表
Books(BookID, ISBN, Title, PublisherID, CategoryID, PublishDate, Price, StockQuantity, PageCount, Language)-- 图书作者关联表
BookAuthors(BookID, AuthorID)-- 客户表
Customers(CustomerID, FirstName, LastName, Email, Phone, Address, RegistrationDate)-- 订单表
Orders(OrderID, CustomerID, OrderDate, TotalAmount, Status, ShippingAddress)-- 订单详情表
OrderDetails(OrderDetailID, OrderID, BookID, Quantity, UnitPrice, Subtotal)

4. 物理实现

4.1 创建数据库和表

-- 创建数据库
CREATE DATABASE BookSalesSystem;
USE BookSalesSystem;
[yt@localhost lampp]$ /opt/lampp/bin/mysql -uroot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.4.32-MariaDB Source distributionCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> show databases-> ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| phpmyadmin         |
| school             |
| student            |
| test               |
+--------------------+
7 rows in set (0.004 sec)MariaDB [(none)]> create database BookSalesSystem;
Query OK, 1 row affected (0.001 sec)MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| BookSalesSystem    |
| information_schema |
| mysql              |
| performance_schema |
| phpmyadmin         |
| school             |
| student            |
| test               |
+--------------------+
8 rows in set (0.001 sec)MariaDB [(none)]> USE BookSalesSystem;
Database changed

1761484454907

-- 创建出版社表
CREATE TABLE Publishers (PublisherID INT PRIMARY KEY AUTO_INCREMENT,PulisherName VARCHAR ( 100 ) NOT NULL,ContactPerson VARCHAR ( 50 ),Phone VARCHAR ( 20 ),Address TEXT,Email VARCHAR ( 100 ),
CreateDate DATETIME DEFAULT CURRENT_TIMESTAMP 
);-- 创建分类表
CREATE TABLE Categories (CategoryID INT PRIMARY KEY AUTO_INCREMENT,CategoryName VARCHAR(50) NOT NULL,Description TEXT,CreatedDate DATETIME DEFAULT CURRENT_TIMESTAMP
);-- 创建作者表
CREATE TABLE Authors (AuthorID INT PRIMARY KEY AUTO_INCREMENT,AuthorName VARCHAR(100) NOT NULL,Nationality VARCHAR(50),BirthDate DATE,Biography TEXT,CreatedDate DATETIME DEFAULT CURRENT_TIMESTAMP
);-- 创建图书表
CREATE TABLE Books (BookID INT PRIMARY KEY AUTO_INCREMENT,ISBN VARCHAR(20) UNIQUE NOT NULL,Title VARCHAR(200) NOT NULL,PublisherID INT,CategoryID INT,PublishDate DATE,Price DECIMAL(10,2) NOT NULL,StockQuantity INT DEFAULT 0,PageCount INT,Language VARCHAR(20) DEFAULT '中文',CreatedDate DATETIME DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (PublisherID) REFERENCES Publishers(PublisherID),FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID)
);-- 创建图书作者关联表
CREATE TABLE BookAuthors (BookID INT,AuthorID INT,PRIMARY KEY (BookID, AuthorID),FOREIGN KEY (BookID) REFERENCES Books(BookID),FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID)
);-- 创建客户表
CREATE TABLE Customers (CustomerID INT PRIMARY KEY AUTO_INCREMENT,FirstName VARCHAR(50) NOT NULL,LastName VARCHAR(50) NOT NULL,Email VARCHAR(100) UNIQUE,Phone VARCHAR(20),Address TEXT,RegistrationDate DATETIME DEFAULT CURRENT_TIMESTAMP
);-- 创建订单表
CREATE TABLE Orders (OrderID INT PRIMARY KEY AUTO_INCREMENT,CustomerID INT,OrderDate DATETIME DEFAULT CURRENT_TIMESTAMP,TotalAmount DECIMAL(10,2) NOT NULL,Status ENUM('待付款', '已付款', '发货中', '已完成', '已取消') DEFAULT '待付款',ShippingAddress TEXT,FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);-- 创建订单详情表
CREATE TABLE OrderDetails (OrderDetailID INT PRIMARY KEY AUTO_INCREMENT,OrderID INT,BookID INT,Quantity INT NOT NULL,UnitPrice DECIMAL(10,2) NOT NULL,Subtotal DECIMAL(10,2) NOT NULL,FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),FOREIGN KEY (BookID) REFERENCES Books(BookID)
);

4.2 插入业务数据

-- 插入出版社数据 (50条)
INSERT INTO Publishers (PublisherName, ContactPerson, Phone, Address, Email) VALUES
('人民文学出版社', '张编辑', '010-65223329', '北京市朝内大街166号', 'rmwx@people.com'),
('商务印书馆', '李经理', '010-65252038', '北京市王府井大街36号', 'cp@commercialpress.com'),
('中华书局', '王总监', '010-63281182', '北京市丰台区太平桥西里38号', 'zhbc@zhbc.com'),
('机械工业出版社', '刘主任', '010-88379666', '北京市百万庄大街22号', 'cmp@cmpbook.com'),
('清华大学出版社', '陈编辑', '010-83470255', '北京市海淀区清华园', 'tup@tup.tsinghua.edu.cn'),
('电子工业出版社', '赵经理', '010-88258888', '北京市万寿路南口金家村288号', 'phei@phei.com.cn'),
('中信出版社', '周总监', '010-84849558', '北京市朝阳区惠新东街甲4号', 'citicpub@citicpub.com'),
('上海译文出版社', '吴编辑', '021-62475199', '上海市福建中路193号', 'stph@stph.com.cn'),
('外研社', '郑主任', '010-88819928', '北京市西三环北路19号', 'ftp@fltrp.com'),
('北京大学出版社', '孙经理', '010-62752033', '北京市海淀区成府路205号', 'pup@pup.pku.edu.cn'),
('科学出版社', '钱总监', '010-64019823', '北京市东黄城根北街16号', 'sciencep@mail.sciencep.com'),
('高等教育出版社', '冯编辑', '010-58581118', '北京市西城区德外大街4号', 'academic@hep.com.cn'),
('人民邮电出版社', '陈主任', '010-81055205', '北京市丰台区成寿寺路11号', 'ppt@ptpress.com.cn'),
('作家出版社', '朱经理', '010-65004079', '北京市农展馆南里10号', 'zjcb@zjcb.com'),
('法律出版社', '秦总监', '010-63939796', '北京市莲花池西里7号', 'lawpress@lawpress.com.cn'),
('化学工业出版社', '尤编辑', '010-64982530', '北京市东城区青年湖南街13号', 'cip@cip.com.cn'),
('中国青年出版社', '许主任', '010-57350368', '北京市东四十二条21号', 'cyp@cyp.com.cn'),
('人民教育出版社', '何经理', '010-58758866', '北京市海淀区中关村南大街17号', 'pep@pep.com.cn'),
('中国电力出版社', '吕总监', '010-58383316', '北京市西城区三里河路6号', 'cepp@cepp.com.cn'),
('中国建筑工业出版社', '施编辑', '010-58337028', '北京市海淀区百万庄', 'cabp@cabp.com.cn'),
('人民卫生出版社', '张主任', '010-59787088', '北京市朝阳区潘家园南里19号', 'pmph@pmph.com'),
('中国林业出版社', '孔经理', '010-83143568', '北京市西城区德内大街刘海胡同7号', 'cfph@cfph.com.cn'),
('中国水利水电出版社', '曹总监', '010-68317638', '北京市西城区三里河路6号', 'waterpub@waterpub.com.cn'),
('国防工业出版社', '严编辑', '010-68427773', '北京市海淀区紫竹院南路23号', 'ndip@ndip.com.cn'),
('中国纺织出版社', '华主任', '010-67004482', '北京市东直门南大街6号', 'c-textilep@c-textilep.com.cn'),
('中国轻工业出版社', '金经理', '010-65122392', '北京市东长安街6号', 'chlip@chlip.com.cn'),
('中国环境科学出版社', '魏总监', '010-67112765', '北京市崇文区广渠门内大街16号', 'cesp@cesp.com.cn'),
('中国标准出版社', '陶编辑', '010-68523946', '北京市复兴门外三里河北街16号', 'spc@spc.net.cn'),
('中国计量出版社', '姜主任', '010-64275360', '北京市和平里西街甲2号', 'zgjl@zgjl.com.cn'),
('中国地图出版社', '戚经理', '010-68531324', '北京市白纸坊西街3号', 'chmp@chmp.com.cn'),
('中国金融出版社', '谢总监', '010-63265588', '北京市广安门外小红庙南里3号', 'chinafph@chinafph.com'),
('中国经济出版社', '邹编辑', '010-68319282', '北京市西城区百万庄北街3号', 'economyph@economyph.com.cn'),
('中国财政经济出版社', '喻主任', '010-88190406', '北京市海淀区阜成路甲28号', 'cfeph@cfeph.cn'),
('中国统计出版社', '柏经理', '010-63376907', '北京市西城区三里河月坛南街57号', 'zgtt@stats.gov.cn'),
('中国审计出版社', '水总监', '010-64066036', '北京市海淀区阜石路甲19号', 'zgsj@audit.gov.cn'),
('中国税务出版社', '窦编辑', '010-63568180', '北京市宣武区槐柏树后街21号', 'taxation@taxation.cn'),
('中国商业出版社', '章主任', '010-66095351', '北京市宣武区报国寺1号', 'zgss@zgss.com.cn'),
('中国物价出版社', '云经理', '010-68020336', '北京市西城区月坛北小街2号', 'pricepub@pricepub.com.cn'),
('中国劳动社会保障出版社', '苏总监', '010-64911180', '北京市惠新东街1号', 'class@class.com.cn'),
('中国人事出版社', '潘编辑', '010-84643937', '北京市朝阳区育慧里5号', 'rspress@rspress.net.cn'),
('中国广播电视出版社', '葛主任', '010-86092876', '北京市西城区真武庙二条9号', 'zgdt@zgdt.com.cn'),
('中国电影出版社', '奚经理', '010-64219977', '北京市北三环东路22号', 'cfpc@cfpc.com.cn'),
('中国戏剧出版社', '范总监', '010-84042564', '北京市海淀区大钟寺南村甲81号', 'zgxj@zgxj.com.cn'),
('中国美术出版社', '彭编辑', '010-65023518', '北京市东城区北总布胡同32号', 'zgms@zgms.com.cn'),
('中国摄影出版社', '郎主任', '010-65233647', '北京市东城区红星胡同61号', 'cpph@cpph.com.cn'),
('中国书法出版社', '鲁经理', '010-63096438', '北京市宣武区琉璃厂西街57号', 'zgss@zgss.com.cn'),
('中国连环画出版社', '韦总监', '010-63034247', '北京市北总布胡同32号', 'zglhh@zglhh.com.cn'),
('中国少年儿童出版社', '昌编辑', '010-64030149', '北京市东四十二条21号', 'ccppg@ccppg.com.cn'),
('中国青年出版社', '马主任', '010-57350368', '北京市东四十二条21号', 'cyp@cyp.com.cn'),
('中国妇女出版社', '苗经理', '010-65133161', '北京市东城区史家胡同甲24号', 'zgfn@zgfn.com.cn');
-- 插入分类数据 (15条)
INSERT INTO Categories (CategoryName, Description) VALUES
('文学小说', '各类小说、散文、诗歌等文学作品'),
('经济管理', '经济学、管理学、市场营销等相关书籍'),
('计算机科学', '编程、算法、人工智能、数据库等技术书籍'),
('历史地理', '历史事件、地理知识、考古发现等'),
('哲学宗教', '哲学理论、宗教研究、思想史等'),
('艺术设计', '绘画、设计、音乐、摄影等艺术类书籍'),
('教育学习', '教材、教辅、学习方法、考试指南等'),
('科学技术', '自然科学、工程技术、医学等专业书籍'),
('生活休闲', '烹饪、旅游、健身、家居等生活类图书'),
('儿童读物', '儿童文学、绘本、科普读物等'),
('社会科学', '社会学、心理学、政治学等'),
('法律政治', '法律法规、政治理论、国际关系等'),
('医学健康', '医学知识、健康养生、疾病防治等'),
('外语学习', '英语、日语等外语学习资料'),
('传记纪实', '人物传记、历史纪实、回忆录等');
-- 插入图书数据 (50条)
INSERT INTO Books (ISBN, Title, PublisherID, CategoryID, PublishDate, Price, StockQuantity, PageCount, Language) VALUES
('9787020002207', '红楼梦', 1, 1, '2018-01-01', 59.80, 100, 960, '中文'),
('9787020008728', '水浒传', 1, 1, '2018-03-15', 49.90, 85, 848, '中文'),
('9787020008742', '西游记', 1, 1, '2018-05-20', 52.00, 92, 896, '中文'),
('9787020008766', '三国演义', 1, 1, '2018-07-10', 55.60, 78, 912, '中文'),
('9787020090006', '围城', 1, 1, '2017-11-05', 39.80, 120, 336, '中文'),
('9787020096695', '平凡的世界', 1, 1, '2017-09-12', 99.00, 65, 1256, '中文'),
('9787020127245', '活着', 1, 1, '2017-06-18', 28.00, 150, 196, '中文'),
('9787506365437', '白夜行', 9, 1, '2013-01-01', 39.50, 88, 538, '中文'),
('9787544285145', '解忧杂货店', 8, 1, '2014-05-01', 39.50, 110, 298, '中文'),
('9787530216782', '三体', 14, 1, '2008-01-01', 23.00, 95, 302, '中文'),
('9787530216859', '三体Ⅱ:黑暗森林', 14, 1, '2008-05-01', 32.00, 87, 470, '中文'),
('9787530216903', '三体Ⅲ:死神永生', 14, 1, '2010-11-01', 36.00, 82, 513, '中文'),
('9787544253991', '百年孤独', 8, 1, '2011-06-01', 39.50, 76, 360, '中文'),
('9787020122066', '骆驼祥子', 1, 1, '2018-03-01', 28.00, 105, 224, '中文'),
('9787020094199', '边城', 1, 1, '2018-06-01', 25.00, 98, 176, '中文'),
('9787544281109', '嫌疑人X的献身', 8, 1, '2014-06-01', 35.00, 92, 251, '中文'),
('9787544270875', '放学后', 8, 1, '2013-08-01', 28.00, 85, 215, '中文'),
('9787544281321', '恶意', 8, 1, '2016-11-01', 39.50, 79, 264, '中文'),
('9787544267615', '挪威的森林', 8, 1, '2018-03-01', 38.60, 112, 400, '中文'),
('9787544285664', '追风筝的人', 8, 1, '2018-08-01', 36.00, 124, 362, '中文'),
('9787544291170', '人生海海', 8, 1, '2019-04-01', 55.00, 68, 375, '中文'),
('9787208061644', '追忆似水年华', 12, 1, '2010-01-01', 68.00, 45, 512, '中文'),
('9787532747719', '不能承受的生命之轻', 9, 1, '2017-05-01', 28.00, 83, 345, '中文'),
('9787544700116', '小王子', 13, 1, '2018-10-01', 22.00, 200, 96, '中文'),
('9787544281093', '圣女的救济', 8, 1, '2017-01-01', 45.00, 74, 312, '中文'),
('9787544281086', '黎明之街', 8, 1, '2018-06-01', 42.00, 81, 296, '中文'),
('9787544291405', '沉默的巡游', 8, 1, '2020-03-01', 59.00, 63, 400, '中文'),
('9787544291221', '祈念守护人', 8, 1, '2020-05-01', 49.80, 71, 320, '中文'),
('9787544291238', '希望之线', 8, 1, '2021-04-01', 59.00, 58, 368, '中文'),
('9787544291245', '透明的螺旋', 8, 1, '2022-03-01', 59.80, 52, 352, '中文'),
('9787530214114', '球状闪电', 14, 1, '2016-08-01', 35.00, 89, 302, '中文'),
('9787530216712', '超新星纪元', 14, 1, '2016-12-01', 39.80, 77, 400, '中文'),
('9787530217375', '流浪地球', 14, 1, '2016-12-01', 36.00, 102, 405, '中文'),
('9787530219256', '时间移民', 14, 1, '2014-12-01', 32.00, 84, 352, '中文'),
('9787530214115', '中国2185', 14, 1, '2020-07-01', 48.00, 66, 408, '中文'),
('9787020159536', '尘埃落定', 1, 1, '2019-05-01', 49.00, 59, 425, '中文'),
('9787020153985', '白鹿原', 1, 1, '2017-08-01', 39.80, 73, 697, '中文'),
('9787020159598', '秦腔', 1, 1, '2020-01-01', 58.00, 62, 566, '中文'),
('9787020163014', '繁花', 1, 1, '2020-07-01', 68.00, 57, 444, '中文'),
('9787020166459', '人世间', 1, 1, '2021-01-01', 238.00, 48, 1156, '中文'),
('9787506390248', '第七天', 15, 1, '2018-06-01', 39.80, 86, 272, '中文'),
('9787506391504', '兄弟', 15, 1, '2018-09-01', 68.00, 64, 646, '中文'),
('9787506394864', '许三观卖血记', 15, 1, '2019-03-01', 36.00, 95, 269, '中文'),
('9787505744981', '霍乱时期的爱情', 16, 1, '2020-01-01', 49.80, 78, 401, '中文'),
('9787505744967', '族长的秋天', 16, 1, '2020-06-01', 45.00, 55, 280, '中文'),
('9787505744950', '梦中的欢快葬礼', 16, 1, '2020-09-01', 39.80, 61, 256, '中文'),
('9787530216781', '赡养人类', 14, 1, '2016-05-01', 32.00, 83, 298, '中文'),
('9787530219257', '全频带阻塞干扰', 14, 1, '2016-10-01', 28.00, 79, 246, '中文'),
('9787530219263', '镜子', 14, 1, '2016-12-01', 30.00, 72, 264, '中文'),
('9787530219270', '朝闻道', 14, 1, '2017-02-01', 26.00, 88, 228, '中文');
-- 插入图书作者关联数据 (80条)
INSERT INTO BookAuthors (BookID, AuthorID) VALUES
(1, 1), (2, 2), (3, 3), (4, 4), (5, 6),
(6, 11), (7, 8), (8, 32), (9, 32), (10, 13),
(11, 13), (12, 13), (13, 37), (14, 2), (15, 5),
(16, 32), (17, 32), (18, 32), (19, 31), (20, 21),
(21, 8), (22, 25), (23, 38), (24, 29), (25, 32),
(26, 32), (27, 32), (28, 32), (29, 32), (30, 32),
(31, 13), (32, 13), (33, 13), (34, 13), (35, 13),
(36, 10), (37, 10), (38, 10), (39, 9), (40, 11),
(41, 8), (42, 8), (43, 8), (44, 37), (45, 37),
(46, 37), (47, 13), (48, 13), (49, 13), (50, 13),
-- 添加多作者的情况
(1, 50), (2, 50), (3, 50), (4, 50), (5, 50),
(6, 50), (7, 50), (8, 50), (9, 50), (10, 50),
(11, 50), (12, 50), (13, 50), (14, 50), (15, 50),
(16, 50), (17, 50), (18, 50), (19, 50), (20, 50),
(21, 50), (22, 50), (23, 50), (24, 50), (25, 50),
(26, 50), (27, 50), (28, 50), (29, 50), (30, 50);
-- 插入客户数据 (50条)
INSERT INTO Customers (FirstName, LastName, Email, Phone, Address, RegistrationDate) VALUES
('张', '明', 'zhangming@email.com', '13800138001', '北京市朝阳区建国门外大街1号', '2023-01-15'),
('李', '华', 'lihua@email.com', '13800138002', '上海市黄浦区南京东路100号', '2023-01-20'),
('王', '芳', 'wangfang@email.com', '13800138003', '广州市天河区体育西路189号', '2023-02-05'),
('刘', '伟', 'liuwei@email.com', '13800138004', '深圳市福田区深南大道5001号', '2023-02-10'),
('陈', '静', 'chenjing@email.com', '13800138005', '杭州市西湖区文三路398号', '2023-02-15'),
('杨', '光', 'yangguang@email.com', '13800138006', '南京市鼓楼区中山北路30号', '2023-02-20'),
('赵', '丽', 'zhaoli@email.com', '13800138007', '成都市武侯区人民南路四段10号', '2023-03-01'),
('黄', '强', 'huangqiang@email.com', '13800138008', '武汉市江汉区解放大道688号', '2023-03-05'),
('周', '敏', 'zhoumin@email.com', '13800138009', '西安市雁塔区小寨西路26号', '2023-03-10'),
('吴', '刚', 'wugang@email.com', '13800138010', '重庆市渝中区解放碑步行街1号', '2023-03-15'),
('徐', '娜', 'xuna@email.com', '13800138011', '天津市和平区南京路189号', '2023-03-20'),
('孙', '浩', 'sunhao@email.com', '13800138012', '青岛市市南区香港中路10号', '2023-03-25'),
('朱', '婷', 'zhuting@email.com', '13800138013', '大连市中山区人民路1号', '2023-04-01'),
('马', '云', 'mayun@email.com', '13800138014', '厦门市思明区湖滨北路10号', '2023-04-05'),
('胡', '杰', 'hujie@email.com', '13800138015', '长沙市芙蓉区五一大道1号', '2023-04-10'),
('林', '欣', 'linxin@email.com', '13800138016', '福州市鼓楼区五四路100号', '2023-04-15'),
('郭', '涛', 'guotao@email.com', '13800138017', '郑州市金水区花园路1号', '2023-04-20'),
('何', '梅', 'hemei@email.com', '13800138018', '石家庄市长安区中山东路100号', '2023-04-25'),
('高', '峰', 'gaofeng@email.com', '13800138019', '哈尔滨市道里区中央大街1号', '2023-05-01'),
('罗', '燕', 'luoyan@email.com', '13800138020', '长春市朝阳区人民大街100号', '2023-05-05'),
('郑', '凯', 'zhengkai@email.com', '13800138021', '沈阳市和平区中山路1号', '2023-05-10'),
('梁', '冰', 'liangbing@email.com', '13800138022', '济南市历下区泺源大街1号', '2023-05-15'),
('谢', '娜', 'xiena@email.com', '13800138023', '太原市小店区长治路100号', '2023-05-20'),
('宋', '佳', 'songjia@email.com', '13800138024', '合肥市蜀山区长江西路100号', '2023-05-25'),
('唐', '磊', 'tanglei@email.com', '13800138025', '南昌市东湖区阳明路100号', '2023-06-01'),
('许', '晴', 'xuqing@email.com', '13800138026', '贵阳市云岩区中华北路1号', '2023-06-05'),
('韩', '雪', 'hanxue@email.com', '13800138027', '昆明市五华区东风东路100号', '2023-06-10'),
('冯', '军', 'fengjun@email.com', '13800138028', '兰州市城关区庆阳路100号', '2023-06-15'),
('董', '洁', 'dongjie@email.com', '13800138029', '乌鲁木齐市天山区解放南路1号', '2023-06-20'),
('萧', '峰', 'xiaofeng@email.com', '13800138030', '南宁市青秀区民族大道100号', '2023-06-25'),
('程', '龙', 'chenglong@email.com', '13800138031', '海口市龙华区滨海大道1号', '2023-07-01'),
('曾', '志', 'zengzhi@email.com', '13800138032', '西宁市城中区西大街100号', '2023-07-05'),
('彭', '宇', 'pengyu@email.com', '13800138033', '拉萨市城关区北京中路1号', '2023-07-10'),
('蔡', '琴', 'caiqin@email.com', '13800138034', '银川市兴庆区解放西街100号', '2023-07-15'),
('潘', '安', 'panan@email.com', '13800138035', '呼和浩特市新城区中山东路1号', '2023-07-20'),
('袁', '泉', 'yuanquan@email.com', '13800138036', '拉萨市城关区金珠东路1号', '2023-07-25'),
('于', '娜', 'yuna@email.com', '13800138037', '西宁市城西区五四西路100号', '2023-08-01'),
('蒋', '欣', 'jiangxin@email.com', '13800138038', '乌鲁木齐市沙依巴克区友好南路1号', '2023-08-05'),
('沈', '冰', 'shenbing@email.com', '13800138039', '海口市美兰区海府路100号', '2023-08-10'),
('韩', '梅', 'hanmei@email.com', '13800138040', '南宁市兴宁区朝阳路1号', '2023-08-15'),
('苏', '宁', 'suning@email.com', '13800138041', '贵阳市南明区遵义路100号', '2023-08-20'),
('吕', '方', 'lvfang@email.com', '13800138042', '昆明市盘龙区北京路1号', '2023-08-25'),
('丁', '磊', 'dinglei@email.com', '13800138043', '兰州市七里河区西津西路100号', '2023-09-01'),
('杜', '江', 'dujiang@email.com', '13800138044', '乌鲁木齐市新市区北京南路1号', '2023-09-05'),
('戴', '军', 'daijun@email.com', '13800138045', '海口市秀英区滨海大道100号', '2023-09-10'),
('夏', '雨', 'xiayu@email.com', '13800138046', '南宁市江南区星光大道1号', '2023-09-15'),
('钟', '欣', 'zhongxin@email.com', '13800138047', '贵阳市观山湖区林城西路100号', '2023-09-20'),
('田', '亮', 'tianliang@email.com', '13800138048', '昆明市官渡区春城路1号', '2023-09-25'),
('姜', '文', 'jiangwen@email.com', '13800138049', '兰州市安宁区安宁东路100号', '2023-10-01'),
('范', '冰', 'fanbing@email.com', '13800138050', '乌鲁木齐市水磨沟区南湖东路1号', '2023-10-05');
-- 插入订单数据 (50条)
INSERT INTO Orders (CustomerID, OrderDate, TotalAmount, Status, ShippingAddress) VALUES
(1, '2023-10-01 09:30:00', 158.60, '已完成', '北京市朝阳区建国门外大街1号'),
(2, '2023-10-02 14:20:00', 89.50, '已付款', '上海市黄浦区南京东路100号'),
(3, '2023-10-03 11:15:00', 123.80, '发货中', '广州市天河区体育西路189号'),
(4, '2023-10-04 16:45:00', 67.90, '待付款', '深圳市福田区深南大道5001号'),
(5, '2023-10-05 10:10:00', 234.50, '已完成', '杭州市西湖区文三路398号'),
(6, '2023-10-06 13:25:00', 178.20, '已付款', '南京市鼓楼区中山北路30号'),
(7, '2023-10-07 15:30:00', 95.60, '发货中', '成都市武侯区人民南路四段10号'),
(8, '2023-10-08 09:45:00', 156.80, '已完成', '武汉市江汉区解放大道688号'),
(9, '2023-10-09 14:55:00', 87.40, '已付款', '西安市雁塔区小寨西路26号'),
(10, '2023-10-10 11:20:00', 198.70, '发货中', '重庆市渝中区解放碑步行街1号'),
(11, '2023-10-11 16:35:00', 112.90, '待付款', '天津市和平区南京路189号'),
(12, '2023-10-12 10:50:00', 145.30, '已完成', '青岛市市南区香港中路10号'),
(13, '2023-10-13 13:15:00', 76.80, '已付款', '大连市中山区人民路1号'),
(14, '2023-10-14 15:40:00', 189.50, '发货中', '厦门市思明区湖滨北路10号'),
(15, '2023-10-15 09:25:00', 134.20, '已完成', '长沙市芙蓉区五一大道1号'),
(16, '2023-10-16 14:30:00', 97.60, '已付款', '福州市鼓楼区五四路100号'),
(17, '2023-10-17 11:45:00', 167.80, '发货中', '郑州市金水区花园路1号'),
(18, '2023-10-18 16:20:00', 78.90, '待付款', '石家庄市长安区中山东路100号'),
(19, '2023-10-19 10:35:00', 156.40, '已完成', '哈尔滨市道里区中央大街1号'),
(20, '2023-10-20 13:50:00', 123.70, '已付款', '长春市朝阳区人民大街100号'),
(21, '2023-10-21 15:15:00', 89.20, '发货中', '沈阳市和平区中山路1号'),
(22, '2023-10-22 09:40:00', 178.60, '已完成', '济南市历下区泺源大街1号'),
(23, '2023-10-23 14:05:00', 67.80, '已付款', '太原市小店区长治路100号'),
(24, '2023-10-24 11:30:00', 145.90, '发货中', '合肥市蜀山区长江西路100号'),
(25, '2023-10-25 16:45:00', 98.50, '待付款', '南昌市东湖区阳明路100号'),
(26, '2023-10-26 10:10:00', 167.30, '已完成', '贵阳市云岩区中华北路1号'),
(27, '2023-10-27 13:25:00', 112.80, '已付款', '昆明市五华区东风东路100号'),
(28, '2023-10-28 15:40:00', 78.40, '发货中', '兰州市城关区庆阳路100号'),
(29, '2023-10-29 09:55:00', 189.20, '已完成', '乌鲁木齐市天山区解放南路1号'),
(30, '2023-10-30 14:20:00', 134.60, '已付款', '南宁市青秀区民族大道100号'),
(31, '2023-10-31 11:35:00', 97.80, '发货中', '海口市龙华区滨海大道1号'),
(32, '2023-11-01 16:50:00', 156.70, '待付款', '西宁市城中区西大街100号'),
(33, '2023-11-02 10:15:00', 123.40, '已完成', '拉萨市城关区北京中路1号'),
(34, '2023-11-03 13:30:00', 89.60, '已付款', '银川市兴庆区解放西街100号'),
(35, '2023-11-04 15:45:00', 178.90, '发货中', '呼和浩特市新城区中山东路1号'),
(36, '2023-11-05 09:20:00', 67.50, '已完成', '拉萨市城关区金珠东路1号'),
(37, '2023-11-06 14:35:00', 145.80, '已付款', '西宁市城西区五四西路100号'),
(38, '2023-11-07 11:50:00', 98.20, '发货中', '乌鲁木齐市沙依巴克区友好南路1号'),
(39, '2023-11-08 16:05:00', 167.60, '待付款', '海口市美兰区海府路100号'),
(40, '2023-11-09 10:30:00', 112.40, '已完成', '南宁市兴宁区朝阳路1号'),
(41, '2023-11-10 13:45:00', 78.80, '已付款', '贵阳市南明区遵义路100号'),
(42, '2023-11-11 15:10:00', 189.40, '发货中', '昆明市盘龙区北京路1号'),
(43, '2023-11-12 09:35:00', 134.80, '已完成', '兰州市七里河区西津西路100号'),
(44, '2023-11-13 14:50:00', 97.40, '已付款', '乌鲁木齐市新市区北京南路1号'),
(45, '2023-11-14 11:05:00', 156.20, '发货中', '海口市秀英区滨海大道100号'),
(46, '2023-11-15 16:20:00', 123.60, '待付款', '南宁市江南区星光大道1号'),
(47, '2023-11-16 10:45:00', 89.80, '已完成', '贵阳市观山湖区林城西路100号'),
(48, '2023-11-17 13:00:00', 178.40, '已付款', '昆明市官渡区春城路1号'),
(49, '2023-11-18 15:15:00', 67.20, '发货中', '兰州市安宁区安宁东路100号'),
(50, '2023-11-19 09:30:00', 145.60, '已完成', '乌鲁木齐市水磨沟区南湖东路1号');
-- 插入订单详情数据 (100条)
INSERT INTO OrderDetails (OrderID, BookID, Quantity, UnitPrice, Subtotal) VALUES
(1, 1, 2, 59.80, 119.60),
(1, 5, 1, 39.00, 39.00),
(2, 3, 1, 52.00, 52.00),
(2, 7, 1, 28.00, 28.00),
(2, 9, 1, 39.50, 39.50),
(3, 2, 1, 49.90, 49.90),
(3, 4, 1, 55.60, 55.60),
(3, 6, 1, 99.00, 99.00),
(4, 8, 1, 39.50, 39.50),
(4, 10, 1, 23.00, 23.00),
(4, 12, 1, 36.00, 36.00),
(5, 11, 2, 32.00, 64.00),
(5, 13, 1, 39.50, 39.50),
(5, 15, 1, 25.00, 25.00),
(5, 17, 1, 28.00, 28.00),
(6, 14, 1, 28.00, 28.00),
(6, 16, 1, 35.00, 35.00),
(6, 18, 1, 39.50, 39.50),
(6, 20, 1, 36.00, 36.00),
(7, 19, 1, 38.60, 38.60),
(7, 21, 1, 55.00, 55.00),
(7, 23, 1, 28.00, 28.00),
(8, 22, 1, 68.00, 68.00),
(8, 24, 1, 22.00, 22.00),
(8, 26, 1, 42.00, 42.00),
(9, 25, 1, 45.00, 45.00),
(9, 27, 1, 59.00, 59.00),
(9, 29, 1, 59.00, 59.00),
(10, 28, 1, 49.80, 49.80),
(10, 30, 1, 59.80, 59.80),
(10, 32, 1, 39.80, 39.80),
(11, 31, 1, 35.00, 35.00),
(11, 33, 1, 36.00, 36.00),
(11, 35, 1, 48.00, 48.00),
(12, 34, 1, 32.00, 32.00),
(12, 36, 1, 49.00, 49.00),
(12, 38, 1, 58.00, 58.00),
(13, 37, 1, 39.80, 39.80),
(13, 39, 1, 68.00, 68.00),
(13, 41, 1, 39.80, 39.80),
(14, 40, 1, 238.00, 238.00),
(14, 42, 1, 68.00, 68.00),
(14, 44, 1, 49.80, 49.80),
(15, 43, 1, 36.00, 36.00),
(15, 45, 1, 45.00, 45.00),
(15, 47, 1, 32.00, 32.00),
(16, 46, 1, 39.80, 39.80),
(16, 48, 1, 28.00, 28.00),
(16, 50, 1, 26.00, 26.00),
(17, 49, 1, 30.00, 30.00),
(17, 1, 1, 59.80, 59.80),
(17, 3, 1, 52.00, 52.00),
(18, 2, 1, 49.90, 49.90),
(18, 4, 1, 55.60, 55.60),
(18, 6, 1, 99.00, 99.00),
(19, 5, 1, 39.00, 39.00),
(19, 7, 1, 28.00, 28.00),
(19, 9, 1, 39.50, 39.50),
(20, 8, 1, 39.50, 39.50),
(20, 10, 1, 23.00, 23.00),
(20, 12, 1, 36.00, 36.00),
(21, 11, 1, 32.00, 32.00),
(21, 13, 1, 39.50, 39.50),
(21, 15, 1, 25.00, 25.00),
(22, 14, 1, 28.00, 28.00),
(22, 16, 1, 35.00, 35.00),
(22, 18, 1, 39.50, 39.50),
(23, 17, 1, 28.00, 28.00),
(23, 19, 1, 38.60, 38.60),
(23, 21, 1, 55.00, 55.00),
(24, 20, 1, 36.00, 36.00),
(24, 22, 1, 68.00, 68.00),
(24, 24, 1, 22.00, 22.00),
(25, 23, 1, 28.00, 28.00),
(25, 25, 1, 45.00, 45.00),
(25, 27, 1, 59.00, 59.00),
(26, 26, 1, 42.00, 42.00),
(26, 28, 1, 49.80, 49.80),
(26, 30, 1, 59.80, 59.80),
(27, 29, 1, 59.00, 59.00),
(27, 31, 1, 35.00, 35.00),
(27, 33, 1, 36.00, 36.00),
(28, 32, 1, 39.80, 39.80),
(28, 34, 1, 32.00, 32.00),
(28, 36, 1, 49.00, 49.00),
(29, 35, 1, 48.00, 48.00),
(29, 37, 1, 39.80, 39.80),
(29, 39, 1, 68.00, 68.00),
(30, 38, 1, 58.00, 58.00),
(30, 40, 1, 238.00, 238.00),
(30, 42, 1, 68.00, 68.00),
(31, 41, 1, 39.80, 39.80),
(31, 43, 1, 36.00, 36.00),
(31, 45, 1, 45.00, 45.00),
(32, 44, 1, 49.80, 49.80),
(32, 46, 1, 39.80, 39.80),
(32, 48, 1, 28.00, 28.00),
(33, 47, 1, 32.00, 32.00),
(33, 49, 1, 30.00, 30.00),
(33, 1, 1, 59.80, 59.80),
(34, 50, 1, 26.00, 26.00),
(34, 2, 1, 49.90, 49.90),
(34, 4, 1, 55.60, 55.60);

5. 查询练习

5.1 单表查询

-- 1.查询所有图书信息,按价格降序排列, 默认升序asc,降序DESC。
SELECT * FROM Books ORDER BY Price DESC;
-- 指定需要查询的字段名
SELECT BookID,ISBN,Title,PublishDate,Price,StockQuantity FROM Books ORDER BY Price DESC;-- 2. 查询库存量少于50的图书
SELECT * FROM Books WHERE StockQuantity < 50 ORDER BY StockQuantity DESC;-- 3. 查询2020年以后出版的图书, 条件可以是文本
SELECT * FROM Books WHERE PublishDate > '2020-01-01' ORDER BY PublishDate DESC;-- 4. 查询价格在30-50元之间的图书
SELECT * FROM Books WHERE Price BETWEEN 30 AND 50 ORDER BY Price;-- 5. 查询书名包含"三体"的图书
SELECT BookID,ISBN,Title,Price,StockQuantity FROM Books WHERE Title LIKE '%三体%';

5.2 分组查询

-- 1. 按分类统计图书数量和平均价格
SELECT * FROM Books;
SELECT * FROM Categories;SELECTc.CategoryName,COUNT( b.BookID ) AS BookCount,AVG( b.Price ) AS avgPrice,MAX( b.Price ) AS maxPrice,MIN( b.Price ) AS minPrice 
FROMBooks bJOIN Categories c ON b.CategoryID = c.CategoryID 
GROUP BYc.CategoryID;-- 2. 按出版社统计图书数量
SELECT * FROM Publishers;
SELECT * FROM Books;SELECTp.PublisherName,COUNT( p.PublisherID ) AS books_count,SUM(b.StockQuantity) AS TotalStock
FROMBooks bJOIN Publishers p ON b.PublisherID = p.PublisherID 
GROUP BYp.PublisherName 
ORDER BYbooks_count;-- 3. 按订单状态统计订单数量和总金额
SELECT * FROM Orders;
SELECT * FROM OrderDetails;SELECT`Status`,COUNT( OrderID ) AS OrderCount,SUM( TotalAmount ) AS TotalAmount,AVG( TotalAmount ) AS avgAmount 
FROMOrders 
GROUP BY`Status`-- 4. 统计每个客户的订单数量和总消费金额
SELECT * FROM Customers;SELECTc.CustomerID,CONCAT( c.FirstName, c.LastName ) AS CustomerName,COUNT(o.OrderID) AS OrderCount,SUM( o.TotalAmount ) AS TotalSpent,AVG(o.TotalAmount) AS AvgOrderAmount 
FROMCustomers cJOIN Orders o ON c.CustomerID = o.CustomerID 
GROUP BYc.CustomerID
HAVING OrderCount > 0
ORDER BY TotalSpent;-- 5. 按月统计订单数量和销售额
SELECT YEAR ( OrderDate ) AS orderYear,MONTH ( OrderDate ) AS orderMonth,COUNT( OrderID ) AS orderCount,SUM(TotalAmount) AS orderSales
FROMOrders
GROUP BY YEAR ( OrderDate ),MONTH ( OrderDate )
ORDER BY orderYear,orderMonth

5.3 子查询

-- 1. 查询价格高于平均价格的图书
-- 先计算出图书的平均价格
SELECT AVG(Price) AS avgPrice FROM Books;
-- 将计算出的平均价格表作为查询条件
SELECT	* 
FROM	Books 
WHERE	Price > (SELECTAVG( Price ) AS avgPrice FROMBooks )
ORDER BY Price;-- 2. 查询购买过"三体"系列图书的客户
-- 查询出包含“三体”的图书
SELECT * FROM Books WHERE Title LIKE '%三体%';
-- 
-- DISTINCT确保每个客户只出现一次,即使买了多本"三体"
SELECT DISTINCT o.CustomerID,b.Title FROM Books b 
JOIN Orders o ON b.BookID = o.OrderID
WHERE b.Title LIKE '%三体%';
-- DISTINCT使用:在子查询中使用DISTINCT可以减少IN比较的次数
-- 注意查询出的子表需要是一列
SELECT c.CustomerID,CONCAT(c.FirstName,c.LastName) AS CustomerName,c.Email FROM Customers c 
WHERE c.CustomerID IN (SELECT DISTINCT o.CustomerID FROM  Orders o JOIN Books b ON b.BookID = o.OrderIDWHERE b.Title LIKE '%三体%'
)
ORDER BY CustomerName;-- 3. 查询库存量最少的5本图书
SELECT * FROM Books
ORDER BY StockQuantity ASC LIMIT 5SELECT BookID,Title,Price,StockQuantity
FROM Books 
ORDER BY StockQuantity ASC, Price DESC
LIMIT 5;-- 4. 查询消费金额高于平均消费金额的客户
-- 计算出平均消费金额
SELECT AVG(TotalAmount)  FROM Orders;SELECT c.CustomerID,CONCAT(c.FirstName,c.LastName) AS CustomerName,o.TotalAmount
FROM Customers c 
JOIN Orders o ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerID
HAVING o.TotalAmount > (SELECT AVG(TotalAmount)  FROM Orders
)
ORDER BY o.TotalAmount;-- 5. 查询从未下过订单的客户
-- 查询出下过单的客户
SELECT DISTINCT CustomerID FROM Customers;SELECT CustomerID,CONCAT(FirstName, LastName) AS CustomerName,Email,RegistrationDate
FROM Customers
WHERE CustomerID NOT IN (SELECT DISTINCT CustomerID FROM Orders
)
ORDER BY RegistrationDate DESC;

5.4 多表连接查询

-- 1. 查询订单详细信息(客户信息+订单信息+图书信息)
SELECT o.OrderID,o.OrderDate,CONCAT(c.FirstName, c.LastName) AS CustomerName,c.Email,b.Title AS BookTitle,od.Quantity,od.UnitPrice,od.Subtotal,o.TotalAmount,o.Status
FROM Orders o
JOIN Customers c ON o.CustomerID = c.CustomerID
JOIN OrderDetails od ON o.OrderID = od.OrderID
JOIN Books b ON od.BookID = b.BookID
ORDER BY o.OrderDate DESC, o.OrderID;-- 2. 查询图书的完整信息(包括作者、出版社、分类)
SELECT b.BookID,b.ISBN,b.Title,b.Price,b.StockQuantity,GROUP_CONCAT(DISTINCT a.AuthorName SEPARATOR ', ') AS Authors,p.PublisherName,c.CategoryName,b.PublishDate,b.Language
FROM Books b
LEFT JOIN BookAuthors ba ON b.BookID = ba.BookID
LEFT JOIN Authors a ON ba.AuthorID = a.AuthorID
JOIN Publishers p ON b.PublisherID = p.PublisherID
JOIN Categories c ON b.CategoryID = c.CategoryID
GROUP BY b.BookID, b.ISBN, b.Title, b.Price, b.StockQuantity, p.PublisherName, c.CategoryName, b.PublishDate, b.Language
ORDER BY b.BookID;-- 3. 查询每个作者的著作数量
SELECT a.AuthorID,a.AuthorName,a.Nationality,COUNT(ba.BookID) AS BookCount,AVG(b.Price) AS AvgBookPrice
FROM Authors a
LEFT JOIN BookAuthors ba ON a.AuthorID = ba.AuthorID
LEFT JOIN Books b ON ba.BookID = b.BookID
GROUP BY a.AuthorID, a.AuthorName, a.Nationality
HAVING BookCount > 0
ORDER BY BookCount DESC;-- 4. 查询畅销图书(销量前10)
SELECT b.BookID,b.Title,b.Price,SUM(od.Quantity) AS TotalSold,SUM(od.Subtotal) AS TotalRevenue,p.PublisherName
FROM Books b
JOIN OrderDetails od ON b.BookID = od.BookID
JOIN Orders o ON od.OrderID = o.OrderID
JOIN Publishers p ON b.PublisherID = p.PublisherID
WHERE o.Status IN ('已付款', '发货中', '已完成')
GROUP BY b.BookID, b.Title, b.Price, p.PublisherName
ORDER BY TotalSold DESC
LIMIT 10;-- 5. 查询客户购买历史
SELECT c.CustomerID,CONCAT(c.FirstName, c.LastName) AS CustomerName,c.Email,o.OrderID,o.OrderDate,o.TotalAmount,o.Status,COUNT(od.OrderDetailID) AS ItemCount
FROM Customers c
JOIN Orders o ON c.CustomerID = o.CustomerID
JOIN OrderDetails od ON o.OrderID = od.OrderID
GROUP BY c.CustomerID, CustomerName, c.Email, o.OrderID, o.OrderDate, o.TotalAmount, o.Status
ORDER BY c.CustomerID, o.OrderDate DESC;
http://www.dtcms.com/a/539890.html

相关文章:

  • SpringBoot+MybatisPlus+自定义注解+切面实现水平数据隔离功能(附代码下载)
  • Linux小课堂: JavaWeb 应用环境配置与 Tomcat 安装指南
  • Linux小课堂: Tomcat容器中部署Jenkins的完整流程与关键技术要点
  • 本地部署消息中间件 RabbitMQ 并实现外网访问 (Linux 版本)
  • Kafka在Spring Boot生态中的浅析与应用
  • 南京网站建设与维护英文购物网站模板下载
  • Linux网络编程:进程间关系和守护进程
  • 在 Ubuntu 上使用 Docker 部署思源笔记:一份详尽的实践教程以及常见错误汇总
  • 劳务网站有做吗公众号文章采集wordpress
  • Linux中,vi(vim)编辑器大部分快捷键
  • ADUM5201CRWZ-RL双通道数字隔离器 ADI亚德诺半导体 集成电路IC芯片解析
  • Ubuntu texlive安装后无法编译中文论文解决方法
  • UniversalSmartStateFilter:统一状态过滤器的架构设计与实现
  • 四旋翼机器人手臂路径规划
  • 5G专网平台客户案例分享:基于可编程5G的智慧电网巡检原型系统
  • 做网站现在什么尺寸合适深圳刚刚突然宣布
  • 基于深度学习与OCR研发的报关单识别接口技术解析
  • Power Apps:预览SharePoint文档库的PDF文档
  • ElasticSearch-基础
  • 常州市网站制作娶妻为什么不娶外贸女
  • MySQL 窗口函数全解析:NTILE() 函数深度指南
  • 【大模型与智能体论文】REACT:协同语言模型中的推理与行动
  • 攻克兼容、安全、零中断的“不可能三角”:电科金仓异构多活架构交出集团化医院信创最佳答卷!
  • Duckdb rusty_sheet插件使用心得
  • PyTorch torch.ones()张量创建详解
  • 菜鸟教程网站建设lazy load wordpress
  • 湖南 中小企业 网站建设百度做网站推广
  • 基于小波变换的图像阈值去噪MATLAB实现
  • 网站建设怎么收费网站优化有哪些类型
  • GitHub 与 Gitee 多平台 SSH Key 配置指南