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

数据库实践题目:在线书店管理系统

完整的数据库实践题目:在线书店管理系统

数据库表结构及示例数据

  1. 书籍表(books)

CREATE TABLE books (
book_id INT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(50) NOT NULL,
publisher VARCHAR(50),
publish_year INT,
category VARCHAR(30),
price DECIMAL(10,2),
stock INT DEFAULT 0
);

INSERT INTO books VALUES
(1001, ‘三体’, ‘刘慈欣’, ‘重庆出版社’, 2008, ‘科幻’, 45.00, 50),
(1002, ‘活着’, ‘余华’, ‘作家出版社’, 2012, ‘文学’, 39.00, 30),
(1003, ‘平凡的世界’, ‘路遥’, ‘人民文学出版社’, 2005, ‘文学’, 89.00, 20),
(1004, ‘Python编程从入门到实践’, ‘Eric Matthes’, ‘人民邮电出版社’, 2020, ‘计算机’, 89.00, 100),
(1005, ‘人类简史’, ‘尤瓦尔·赫拉利’, ‘中信出版社’, 2017, ‘历史’, 68.00, 40),
(1006, ‘围城’, ‘钱钟书’, ‘人民文学出版社’, 1991, ‘文学’, 36.00, 25),
(1007, ‘算法导论’, ‘Thomas H.Cormen’, ‘机械工业出版社’, 2013, ‘计算机’, 128.00, 15),
(1008, ‘百年孤独’, ‘加西亚·马尔克斯’, ‘南海出版公司’, 2011, ‘文学’, 55.00, 35),
(1009, ‘时间简史’, ‘史蒂芬·霍金’, ‘湖南科技出版社’, 2010, ‘科普’, 45.00, 20),
(1010, ‘小王子’, ‘圣埃克苏佩里’, ‘人民文学出版社’, 2003, ‘童话’, 25.00, 60);

  1. 客户表(customers)

CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
phone VARCHAR(20),
address VARCHAR(200),
register_date DATE
);

INSERT INTO customers VALUES
(2001, ‘张三’, ‘zhangsan@example.com’, ‘13800138001’, ‘北京市海淀区’, ‘2022-01-15’),
(2002, ‘李四’, ‘lisi@example.com’, ‘13800138002’, ‘上海市浦东新区’, ‘2022-03-10’),
(2003, ‘王五’, ‘wangwu@example.com’, ‘13800138003’, ‘广州市天河区’, ‘2022-05-20’),
(2004, ‘赵六’, ‘zhaoliu@example.com’, ‘13800138004’, ‘深圳市南山区’, ‘2022-07-05’),
(2005, ‘钱七’, ‘qianqi@example.com’, ‘13800138005’, ‘成都市武侯区’, ‘2022-09-18’);

  1. 订单表(orders)

CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
total_amount DECIMAL(12,2),
status VARCHAR(20) CHECK(status IN (‘待付款’,‘已付款’,‘已发货’,‘已完成’,‘已取消’)),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

INSERT INTO orders VALUES
(3001, 2001, ‘2023-01-05’, 84.00, ‘已完成’),
(3002, 2002, ‘2023-01-12’, 133.00, ‘已发货’),
(3003, 2003, ‘2023-01-18’, 178.00, ‘已付款’),
(3004, 2001, ‘2023-02-03’, 45.00, ‘已完成’),
(3005, 2004, ‘2023-02-15’, 113.00, ‘已完成’),
(3006, 2005, ‘2023-03-01’, 89.00, ‘已取消’),
(3007, 2002, ‘2023-03-10’, 68.00, ‘已完成’),
(3008, 2003, ‘2023-03-20’, 164.00, ‘已发货’),
(3009, 2001, ‘2023-04-05’, 55.00, ‘已付款’),
(3010, 2005, ‘2023-04-18’, 25.00, ‘已完成’);

  1. 订单明细表(order_items)

CREATE TABLE order_items (
item_id INT PRIMARY KEY,
order_id INT,
book_id INT,
quantity INT,
price DECIMAL(10,2),
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (book_id) REFERENCES books(book_id)
);

INSERT INTO order_items VALUES
(4001, 3001, 1001, 1, 45.00),
(4002, 3001, 1006, 1, 36.00),
(4003, 3002, 1003, 1, 89.00),
(4004, 3002, 1010, 1, 25.00),
(4005, 3003, 1005, 2, 68.00),
(4006, 3003, 1009, 1, 45.00),
(4007, 3004, 1001, 1, 45.00),
(4008, 3005, 1004, 1, 89.00),
(4009, 3005, 1006, 1, 36.00),
(4010, 3006, 1003, 1, 89.00),
(4011, 3007, 1005, 1, 68.00),
(4012, 3008, 1008, 2, 55.00),
(4013, 3008, 1010, 1, 25.00),
(4014, 3009, 1008, 1, 55.00),
(4015, 3010, 1010, 1, 25.00);

十个业务问题及SQL查询

问题1:查询库存不足30本的书籍信息

SELECT book_id, title, author, price, stock
FROM books
WHERE stock < 30
ORDER BY stock;

问题2:统计每个图书类别的书籍数量和平均价格

SELECT category, COUNT(*) AS book_count,
ROUND(AVG(price),2) AS avg_price
FROM books
GROUP BY category
ORDER BY book_count DESC;

问题3:查询2023年第一季度(1-3月)的订单总金额

SELECT SUM(total_amount) AS q1_sales
FROM orders
WHERE order_date BETWEEN ‘2023-01-01’ AND ‘2023-03-31’;

问题4:找出购买金额最高的前3名客户

SELECT c.customer_id, c.name, SUM(o.total_amount) AS total_spent
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.name
ORDER BY total_spent DESC
LIMIT 3;

问题5:查询每本书的销售数量和销售总额

SELECT b.book_id, b.title,
SUM(oi.quantity) AS sales_quantity,
SUM(oi.quantity * oi.price) AS sales_amount
FROM books b
LEFT JOIN order_items oi ON b.book_id = oi.book_id
GROUP BY b.book_id, b.title
ORDER BY sales_amount DESC;

问题6:找出购买了"文学"类书籍的客户信息

SELECT DISTINCT c.customer_id, c.name, c.email
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
JOIN order_items oi ON o.order_id = oi.order_id
JOIN books b ON oi.book_id = b.book_id
WHERE b.category = ‘文学’;

问题7:计算每个月的订单数量和销售总额

SELECT DATE_FORMAT(order_date, ‘%Y-%m’) AS month,
COUNT(*) AS order_count,
SUM(total_amount) AS monthly_sales
FROM orders
GROUP BY DATE_FORMAT(order_date, ‘%Y-%m’)
ORDER BY month;

问题8:查询购买了超过1本书的订单详情

SELECT o.order_id, o.order_date, c.name,
SUM(oi.quantity) AS total_books,
o.total_amount
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
JOIN order_items oi ON o.order_id = oi.order_id
GROUP BY o.order_id, o.order_date, c.name, o.total_amount
HAVING SUM(oi.quantity) > 1
ORDER BY total_books DESC;

问题9:找出最受欢迎的图书(按销售数量排名)

SELECT b.book_id, b.title, b.author,
SUM(oi.quantity) AS total_sold
FROM books b
JOIN order_items oi ON b.book_id = oi.book_id
GROUP BY b.book_id, b.title, b.author
ORDER BY total_sold DESC
LIMIT 5;

问题10:查询客户购买历史(包含客户信息和购买的所有书籍)

SELECT c.customer_id, c.name,
GROUP_CONCAT(b.title SEPARATOR ', ') AS purchased_books,
COUNT(DISTINCT o.order_id) AS order_count,
SUM(o.total_amount) AS total_spent
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
JOIN order_items oi ON o.order_id = oi.order_id
JOIN books b ON oi.book_id = b.book_id
GROUP BY c.customer_id, c.name
ORDER BY total_spent DESC;

这个完整的在线书店管理系统题目包含了:

  1. 完整的四张表结构设计

  2. 每张表的示例数据

  3. 十个从简单到复杂的业务问题

  4. 每个问题对应的SQL查询解决方案

  5. 涵盖了SELECT查询、聚合函数、多表连接、分组统计、排序等常见SQL操作

学生可以通过这个完整的案例练习各种SQL查询技巧,理解数据库在实际业务中的应用。

http://www.dtcms.com/a/121824.html

相关文章:

  • 高性能服务开发利器:redis+lua
  • Spring 框架的核心基础:IoC 和 AOP
  • 【算法竞赛】回文字符串+思维模拟(蓝桥杯真题·回文字符串·代码清晰易懂)
  • 巧记英语四级单词 Unit3-上【晓艳老师版】
  • 【SpringCloud】从入门到精通(下)
  • TCP 与 UDP
  • Qt 开发时可以在函数内引用的头文件
  • 国网B接口协议调阅实时视频接口流程详解以及检索失败原因(电网B接口)
  • 蓝桥杯刷题总结 + 应赛技巧
  • MySQL表的增删查改(基础)
  • python学智能算法(九)|决策树深入理解
  • [前端]从人体结构看网页三要素:HTML、CSS 与 JavaScript
  • C#.NET模拟用户点击按钮button1.PerformClick自动化测试
  • 动手人形机器人(RL)
  • 去除Mysql表中的空格、回车、换行符和特殊字符
  • 淘宝API与小程序深度联动:商品详情页“一键转卖”功能开发
  • NO.83十六届蓝桥杯备战|动态规划-基础线性DP|台阶问题|最大子段和|传球游戏|乌龟棋(C++)
  • Elasticsearch 集群搭建
  • Vue3+Vite+TypeScript+Element Plus开发-10.多用户动态加载菜单
  • Hi Robot——大脑加强版的π0:基于「VLM的高层次推理+ VLA低层次任务执行」的复杂指令跟随及交互式反馈
  • Python标准库-copy
  • FairMOT复现过程中cython_bbox库问题
  • go游戏后端开发32:自摸杠处理逻辑
  • Elasticsearch中的基本全文搜索和过滤
  • Spring Boot应用中可能出现的Full GC问题
  • 滑动窗口(2)—最⼤连续1的个数III
  • git 查看某一文件夹下所有文件 修改记录
  • 深度学习总结(4)
  • LVGL开发指南
  • 如何构建并优化提示词?