跳到内容
当前位置:首页>面试真题>2025年mysql面试真题(附所有答案,以及运行结果)

2025年mysql面试真题(附所有答案,以及运行结果)

  • 2026-09-16 15:22:05
2025年mysql面试真题(附所有答案,以及运行结果)

sql部分:

基于以下数据库表结构,用mysql数据库解答下列题目:

表结构

CREATEDATABASE sales_report;USE sales_report;-- 产品类别表CREATETABLE categories (idINT PRIMARY KEY,nameVARCHAR(50NOTNULL);-- 产品表CREATETABLE products (idINT PRIMARY KEY,nameVARCHAR(100NOTNULL,    category_id INT,    price DECIMAL(10,2),FOREIGNKEY (category_id) REFERENCES categories(id));-- 订单表CREATETABLE orders (idINT PRIMARY KEY,    product_id INT,    quantity INT,    order_date DATE,FOREIGNKEY (product_id) REFERENCES products(id));-- 示例数据INSERTINTO categories (idnameVALUES(1'Electronics'),(2'Clothing'),(3'Books');INSERTINTO products (idname, category_id, price) VALUES(101'Laptop'11200.00),(102'T-Shirt'225.50),(103'Novel'315.99),(104'Headphones'189.99);INSERTINTO orders (id, product_id, quantity, order_date) VALUES(10011012'2025-01-15'),(100210210'2025-02-20'),(10031035'2025-04-10'),(10041011'2025-07-22'),(10051048'2025-03-05'),(100610215'2025-10-30');

1. 基础查询

题目查询所有产品信息,并显示对应的类别名称(包括没有类别的产品)。

SELECT p.id, p.name, p.price, c.name AS category_nameFROM products pLEFTJOIN categories c ON p.category_id = c.id;

答案

id
name
price
category_name
101
Laptop
1200.00
Electronics
102
T-Shirt
25.50
Clothing
103
Novel
15.99
Books
104
Headphones
89.99
Electronics

2. 聚合函数

题目统计每个类别的产品数量,按数量降序排序。

SELECT c.name, COUNT(p.id) AS product_countFROM categories cLEFTJOIN products p ON c.id = p.category_idGROUPBY c.nameORDERBY product_count DESC;

答案

name
product_count
Electronics
2
Clothing
1
Books
1

3. 子查询

题目找出价格高于类别平均价的产品。

SELECT p.name, p.price, c.name AScategoryFROM products pJOIN categories c ON p.category_id = c.idWHERE p.price > (SELECTAVG(price) FROM products WHERE category_id = p.category_id);

答案

name
price
category
Laptop
1200.00
Electronics

4. 日期函数

题目计算2025年Q1季度(1月-3月)的总销售额。

SELECTSUM(p.price * o.quantity) AS q1_salesFROM orders oJOIN products p ON o.product_id = p.idWHERE o.order_date BETWEEN'2025-01-01'AND'2025-03-31';

答案

q1_sales
3374.92

5. HAVING筛选

题目查询总销售额超过1000的类别。

SELECT c.name, SUM(p.price * o.quantity) AS total_salesFROM orders oJOIN products p ON o.product_id = p.idJOIN categories c ON p.category_id = c.idGROUPBY c.id, c.nameHAVING total_sales > 1000;

答案

name
total_sales
Electronics
4319.92

6. 联合查询

题目列出所有被订购的产品。

SELECT    p.id,    p.name,SUM(o.quantity) AS total_ordered_quantityFROM products pINNERJOIN orders o ON p.id = o.product_idGROUPBY p.id, p.nameORDERBY p.id;

说明:

  • 使用 INNER JOIN 确保只包含有订单记录的产品(即“被订购过”的产品)。
  • SUM(o.quantity) 汇总每个产品的总订购数量。
  • GROUP BY p.id, p.name 按产品分组。
  • ORDER BY p.id 使结果按产品 ID 排序,便于阅读。

基于你提供的示例数据,结果应为:

id
name
total_ordered_quantity
101
Laptop
3
102
T-Shirt
25
103
Novel
5
104
Headphones
8

所有产品在示例中都被订购过,因此全部列出。


补充:如果你想要列出产品信息 + 类别 + 总数量,可以加上类别名:

SELECT    p.id,    p.name,    c.name AScategory,SUM(o.quantity) AS total_ordered_quantityFROM products pINNERJOIN orders o ON p.id = o.product_idINNERJOIN categories c ON p.category_id = c.idGROUPBY p.id, p.name, c.nameORDERBY p.id;

答案:

id
name
category
total_ordered_quantity
101
Laptop
Electronics
3
102
T-Shirt
Clothing
25
103
Novel
Books
5
104
Headphones
Electronics
8

7. 窗口函数

题目对每个类别的产品按价格排名。

SELECTname    price,     category_id,RANK() OVER (PARTITIONBY category_id ORDERBY price DESCAS price_rankFROM products;

答案

name
price
category_id
price_rank
Laptop
1200.00
1
1
Headphones
89.99
1
2
T-Shirt
25.50
2
1
Novel
15.99
3
1

8. 视图创建

题目创建视图显示每个类别的产品均价。

CREATEVIEW CategoryAvgPrice ASSELECT c.name, COALESCE(AVG(p.price), 0AS avg_priceFROM categories cLEFTJOIN products p ON c.id = p.category_idGROUPBY c.name;-- 查询视图SELECT * FROM CategoryAvgPrice;

答案

name
avg_price
Electronics
644.995
Clothing
25.50
Books
15.99

9. 查询每个产品的总销售额(价格 × 总订购数量)

SELECT    p.name AS product_name,    c.name AScategory,    p.price * SUM(o.quantity) AS total_revenueFROM products pJOIN orders o ON p.id = o.product_idJOIN categories c ON p.category_id = c.idGROUPBY p.id, p.name, p.price, c.nameORDERBY total_revenue DESC;

预期结果(基于原始示例数据,未执行涨价前)

product_name
category
total_revenue
Laptop
Electronics
3600.00
T-Shirt
Clothing
637.50
Headphones
Electronics
719.92
Novel
Books
79.95

计算说明:

  • Laptop: 1200.00 × (2 + 1) = 3600.00
  • Headphones: 89.99 × 8 = 719.92
  • T-Shirt: 25.50 × 25 = 637.50
  • Novel: 15.99 × 5 = 79.95

10. 数据操作

题目将所有电子类产品(Electronics)价格提高10%。

UPDATE productsSET price = price * 1.1WHERE category_id = (SELECTidFROM categories WHEREname = 'Electronics');-- 验证更新SELECT * FROM products WHERE category_id = 1;

答案

id
name
price
101
Laptop
1320.00
104
Headphones
98.989

为了能随时获取最新动态,大家可以动动小手将公众号添加到“星标⭐”哦,点赞 + 关注,用时不迷路!!!!

关注公众号:IT小本本 👇

用时不迷路!!