知用网
柔彩主题三 · 更轻盈的阅读体验

5个适合新手的SQL练手项目,边做边提升

发布时间:2025-12-09 04:25:27 阅读:506 次

刚学完SQL基础语法,却不知道怎么下手实战?光看教程不练手,遇到真实问题还是不会写查询。其实最好的学习方式就是“边做边改”,找几个贴近实际场景的小项目来练,比刷十道理论题都管用。

1. 学生成绩管理系统

这个项目模拟一个班级的成绩记录场景。你可以建三张表:学生表(student)、课程表(course)、成绩表(score)。试着查出每个学生的平均分、找出挂科超过两门的学生、或者统计每门课的最高分。

比如,想查出平均分高于80的学生姓名:

SELECT s.name, AVG(sc.score) as avg_score
FROM student s
JOIN score sc ON s.id = sc.student_id
GROUP BY s.id, s.name
HAVING AVG(sc.score) > 80;

2. 网店订单数据分析

假设你朋友开了个小网店,想分析销售数据。你可以设计用户表(users)、订单表(orders)、商品表(products)。然后练习一些常见业务查询,比如:上个月销量最高的商品、复购率高的客户、客单价分布。

查出上个月销售额前五的商品:

SELECT p.name, SUM(o.amount) as total_sales
FROM products p
JOIN orders o ON p.id = o.product_id
WHERE o.order_date BETWEEN '2024-06-01' AND '2024-06-30'
GROUP BY p.id, p.name
ORDER BY total_sales DESC
LIMIT 5;

3. 图书馆借阅系统

建个图书管理的小系统,包含图书表、读者表、借阅记录表。可以查哪些书被借得最多,哪些读者长期未还书,或者统计每月借阅量变化。

找出当前逾期未还的读者和书名:

SELECT r.name, b.title, l.borrow_date, l.due_date
FROM lending l
JOIN readers r ON l.reader_id = r.id
JOIN books b ON l.book_id = b.id
WHERE l.return_date IS NULL AND l.due_date < CURRENT_DATE;

4. 员工与部门信息查询

这是经典的多表关联场景。有员工表(employee)和部门表(department),练习按部门统计人数、找出工资高于部门平均值的员工、或者查出没有员工的空闲部门。

查出每个部门中工资排前三的员工:

SELECT dept_name, name, salary
FROM (
  SELECT d.name as dept_name, e.name, e.salary,
    ROW_NUMBER() OVER (PARTITION BY e.dept_id ORDER BY e.salary DESC) as rn
  FROM employee e
  JOIN department d ON e.dept_id = d.id
) t
WHERE rn <= 3;

5. 博客文章与评论分析

做一个简单的博客系统后台,包含文章表(posts)、评论表(comments)。可以统计每篇文章的评论数、找出最活跃的评论用户、或者筛选出没有评论的“冷门”文章。

列出评论数最多的五篇文章标题:

SELECT p.title, COUNT(c.id) as comment_count
FROM posts p
LEFT JOIN comments c ON p.id = c.post_id
GROUP BY p.id, p.title
ORDER BY comment_count DESC
LIMIT 5;

这些项目不需要真的上线运行,本地用SQLite或MySQL搭个环境就能玩起来。数据可以自己编几十条,重点是写出能解决问题的SQL语句。做多了就会发现,很多公司面试题其实就来自这些日常场景。

别等“完全学会”再动手,边查文档边写才是真实工作状态。哪怕一开始写的SQL又长又慢,改几次就顺了。