數據庫實踐題目:在線書店管理系統

完整的數據庫實踐題目:在線書店管理系統

數據庫表結構及示例數據

  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.pswp.cn/bicheng/76209.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76209.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76209.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 入門指令(1)

&#xff08;1&#xff09;ls指令 ls -l可以縮寫成 ll 同時一個ls可以加多個后綴 比如 ll -at (2)pwd指令 &#xff08;3&#xff09;cd指令 cd .是當前目錄 &#xff08;4&#xff09;touch指令 &#xff08;5&#xff09;mkdir指令 &#xff08;6&#xff09;rmdir和rm…

圖靈逆向——題七-千山鳥飛絕

目錄列表 過程分析headers頭部M參數分析載荷x參數分析響應數據解密分析 代碼實現 一進來還是一個無限debugger&#xff0c;前面有講怎么過&#xff0c;這里直接過掉~ 老規矩&#xff0c;養成習慣&#xff0c;先看請求頭里有沒有加密參數發現好像是有個M&#xff0c;它是個32位…

上門預約洗鞋店小程序都具備哪些功能?

現在大家對洗鞋子的清洗條件越來越高&#xff0c;在家里不想去&#xff0c;那就要拿去洗鞋店去洗。如果有的客戶沒時間去洗鞋店&#xff0c;這個時候&#xff0c;有個洗鞋店小程序就可以進行上門取件&#xff0c;幫助沒時間的客戶去取需要清洗的鞋子&#xff0c;這樣豈不是既幫…

Node.js EventEmitter 深入解析

Node.js EventEmitter 深入解析 概述 Node.js 作為一種強大的 JavaScript 運行環境&#xff0c;以其異步、事件驅動特性在服務器端編程中占據了重要地位。EventEmitter 是 Node.js 中處理事件的一種機制&#xff0c;它允許對象&#xff08;稱為“發射器”&#xff09;發出事件…

C++11QT復習 (十九)

文章目錄 Day13 C 時間庫和線程庫學習筆記&#xff08;Chrono 與 Thread&#xff09;一、時間庫 <chrono>1.1 基本概念1.2 使用示例1.3 duration 字面量單位 二、線程庫 <thread>2.1 基本用法2.2 數據競爭&#xff08;Race Condition&#xff09;2.3 加鎖&#xff…

C++初階-C++的講解1

目錄 1.缺省(sheng)參數 2.函數重載 3.引用 3.1引用的概念和定義 3.2引用的特性 3.3引用的使用 3.4const引用 3.5.指針和引用的關系 4.nullptr 5.總結 1.缺省(sheng)參數 &#xff08;1&#xff09;缺省參數是聲明或定義是為函數的參數指定一個缺省值。在調用該函數是…

Redisson 實現分布式鎖

在平常的開發工作中&#xff0c;我們經常會用到鎖&#xff0c;那么鎖有什么用呢&#xff1f;鎖主要是控制對共享資源的訪問順序&#xff0c;防止多個線程并發操作導致數據不一致的問題。經常可能會聽到樂觀鎖、悲觀鎖、分布式鎖、行鎖、表鎖等等&#xff0c;那么我們今天總結下…

環境—Ubuntu24(py3.12)安裝streamlit(虛擬環境py3.9)

請盡可能不用Ubuntu24請直接跳7.查看解決方案 Action Log 在Ubuntu 24.04中更換為清華源的步驟【Bug】Python 3.12 on Ubuntu 24.04 is Externally Managed - PIP is broken 相關解決方案 從 Ubuntu 24.04 開始&#xff0c;有兩個選項&#xff1a; 1. install python pacakg…

【C++進階】關聯容器:set類型

目錄 一、set 基本概念 1.1 定義與特點 1.2 頭文件與聲明 1.3 核心特性解析 二、set 底層實現 2.1 紅黑樹簡介 2.2 紅黑樹在 set 中的應用 三、set 常用操作 3.1 插入元素 3.2 刪除元素 3.3 查找元素 3.4 遍歷元素 3.5 性能特征 四、set 高級應用 4.1 自定義比較…

[漏洞篇]SSRF漏洞詳解

[漏洞篇]SSRF漏洞詳解 免責聲明&#xff1a; 本文主要講解漏洞原理&#xff0c;以及防御手段&#xff0c;旨在幫助大家更好的了解漏洞危害&#xff0c;以及開發中所需要的點&#xff0c;切勿拿來做違法事情&#xff0c;否則后果自負。 一、介紹 概念 SSRF&#xff1a;服務端請…

nuscenes數據集分析

nuscenes數據集分析 標注與總體介紹 nuscenes包含有相機、激光雷達、毫米波雷達、IMU與GPS等設備提供的數據。它的數據采集了1000個場景&#xff0c;每個場景大約有20s&#xff0c;針對目標檢測任務&#xff0c;對23類物體進行標注&#xff0c;且以2Hz的頻率提供精確的三維目標…

JavaScript學習教程,從入門到精通,JavaScript 運算符及語法知識點詳解(8)

JavaScript 運算符及語法知識點詳解 一、JavaScript 運算符 1. 算術運算符 用于執行數學運算&#xff1a; 加法- 減法* 乘法/ 除法% 取模&#xff08;余數&#xff09; 遞增-- 遞減** 冪運算&#xff08;ES6&#xff09; let a 10, b 3; console.log(a b); // 13 conso…

Shell腳本的學習

編寫腳本文件 定義以開頭&#xff1a;#!/bin/bash #!用來聲明腳本由什么shell解釋&#xff0c;否則使用默認shel 第一步&#xff1a;編寫腳本文件 #!/bin/bash #注釋 echo "這是輸出" 第二步&#xff1a;加上執行權限&#xff1a;chmod x 腳本文件名.sh 第三步&…

在線PDF文件拆分工具,小白工具功能實用操作簡單,無需安裝的文檔處理工具

小白工具中的在線 PDF 文件拆分工具是一款功能實用、操作便捷的文檔處理工具&#xff0c;以下是其具體介紹&#xff1a; 操作流程 上傳 PDF 文檔&#xff1a;打開小白工具在線PDF文件拆分工具 - 快速、免費拆分PDF文檔 - 小白工具的在線 PDF 文件拆分頁面&#xff0c;通過點擊 …

數字的乘階運算

求數字的乘階&#xff1a; 例如&#xff1a;6的乘階運算&#xff1a;6*5*4*3*2*1 例如&#xff1a;3的乘階運算&#xff1a;3*2*1 class Program{static void Main(string[] args){Console.WriteLine("請輸入數字&#xff1a;");int num_01 Convert.ToInt32 (Con…

tcp/ip攻擊及防范

作為高防工程師&#xff0c;我每天攔截數以萬計的惡意流量&#xff0c;其中TCP/IP協議層攻擊是最隱蔽、最具破壞性的威脅之一。常見的攻擊手法包括&#xff1a; 1. SYN Flood攻擊&#xff1a;攻擊者發送大量偽造的SYN包&#xff0c;耗盡服務器連接資源&#xff0c;導致正常用…

C++類成員內存分布詳解

本文將探討C類中成員變量的內存分布情況&#xff0c;包括普通成員、靜態成員、虛函數等不同情況下的內存布局。 一、基本成員內存布局 1. 普通成員變量 普通成員變量按照聲明順序在內存中連續排列&#xff08;受訪問修飾符和內存對齊影響&#xff09;&#xff1a; class Nor…

計算機視覺——為什么 mAP 是目標檢測的黃金標準

概述 在目標檢測領域&#xff0c;有一個指標被廣泛認為是衡量模型性能的“黃金標準”&#xff0c;它就是 mAP&#xff08;Mean Average Precision&#xff0c;平均精確率均值&#xff09;。如果你曾經接觸過目標檢測模型&#xff08;如 YOLO、Faster R-CNN 或 SSD&#xff09;…

C語言單鏈表的增刪改補

目錄 &#xff08;一&#xff09;單鏈表的結構定義及初始化 (二)單鏈表的尾插&#xff0c;頭插 (三)單鏈表的尾刪&#xff0c;頭刪 (四)單鏈表的查找&#xff0c;刪除&#xff0c;銷毀 單鏈表是數據結構課程里的第二個數據結構。單鏈表在邏輯結構是連續的&#xff0c;在物理…

Android10.0 framework第三方無源碼APP讀寫斷電后數據丟失問題解決

1.前言 在10.0中rom定制化開發中,在某些產品開發中,在某些情況下在App用FileOutputStream讀寫完畢后,突然斷電 會出現寫完的數據丟失的問題,接下來就需要分析下關于使用FileOutputStream讀寫數據的相關流程,來實現相關 功能 2.framework第三方無源碼APP讀寫斷電后數據丟…