YeSQL:用 24 个可运行查询,一次掌握一个 PostgreSQL 概念

2026-08-18 27 预计阅读时间: 1 分钟
来源: postgr.es AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

学习 PostgreSQL 时,真正困难的往往不是找到语法,而是把一个概念放进真实数据里运行,观察它解决了什么问题。YeSQL 正是围绕这个目标设计的:一套免费的 PostgreSQL 短课程,共 24 节,每节聚焦一个概念,配套一个可运行查询和真实数据,而且无需注册即可使用。

YeSQL 也不只是一个课程原型。它体现了一个更直接的学习方式:让《The Art of PostgreSQL》中的查询逐步变成页面上可以立即执行、修改和验证的实例。

把“学概念”变成“跑查询”

传统数据库教程经常按语法目录组织内容:SELECTJOINGROUP BY、窗口函数,再到索引和高级查询。这样的结构适合查阅,却不一定适合建立直觉。初学者看完语法,仍然可能不知道一个查询为什么这样写,以及结果如何随着数据变化。

YeSQL 采用了更小的学习单元:

  • 一个 PostgreSQL 概念;
  • 一个可以运行的查询;
  • 一组真实数据;
  • 一次立即验证结果的机会。

这种设计降低了开始学习的成本。读者不需要先搭建完整项目,也不需要填写注册表单,只要打开课程并运行查询,就能从结果反推语法的作用。

一个查询如何承载一个概念

下面的示例不是 YeSQL 课程的原文,而是一个可以自行实践的 PostgreSQL 小练习。假设我们要理解窗口函数:它可以在保留明细行的同时,计算每个分类中的排名。

运行前需要一个 PostgreSQL 数据库。可以在本地创建临时表并插入少量数据:

CREATE TEMP TABLE sales (
    product text,
    category text,
    amount numeric(10, 2)
);

INSERT INTO sales (product, category, amount) VALUES
    ('Keyboard', 'accessories', 89.00),
    ('Mouse', 'accessories', 45.00),
    ('Monitor', 'display', 329.00),
    ('Webcam', 'display', 129.00),
    ('Headset', 'accessories', 119.00);

SELECT
    category,
    product,
    amount,
    RANK() OVER (
        PARTITION BY category
        ORDER BY amount DESC
    ) AS category_rank
FROM sales
ORDER BY category, category_rank;

这个查询只引入一个核心概念:RANK() OVER (...)PARTITION BY category 将数据分成不同分类,ORDER BY amount DESC 决定每个分类内部的排序。与 GROUP BY 不同,窗口函数不会把多行压缩成一行,因此产品明细和分类排名可以同时保留。

学习时可以继续改造查询:

SELECT
    category,
    product,
    amount,
    SUM(amount) OVER (PARTITION BY category) AS category_total,
    ROUND(
        amount / SUM(amount) OVER (PARTITION BY category) * 100,
        2
    ) AS category_share_percent
FROM sales
ORDER BY category, amount DESC;

同一份数据、同一个概念,经过一次修改后就能观察窗口聚合和明细列之间的关系。这正是“一个概念、一个可运行查询”适合数据库学习的地方:反馈足够快,实验成本足够低。

为什么真实数据很重要

用抽象的 usersorders 表讲解语法当然简单,但真实数据通常会暴露更多问题:空值、重复记录、不同粒度、日期范围以及不均匀分布。查询一旦放进真实场景,开发者才会开始关注结果是否正确,而不只是语句能否执行。

真实数据还会迫使学习者思考查询的边界:

  • JOIN 是否意外放大了行数;
  • 聚合前是否需要去重;
  • NULL 是否改变了计算结果;
  • 排名和排序是否稳定;
  • 查询是否适合更大的数据量。

因此,YeSQL 的价值不只在于提供 24 个知识点,也在于把每个知识点放入可以验证的上下文中。对已经会写基础 SQL 的开发者来说,这种短小练习适合用来补齐 PostgreSQL 的查询思维;对初学者来说,它提供了一个比长篇理论更容易进入的起点。

适合怎样使用 YeSQL

可以把 24 节课程当作一组短实验,而不是一次性读完的章节。每完成一节,保留三个结果:原始查询、一次有意修改、对结果变化的解释。例如学习聚合时修改分组列,学习日期查询时改变时间范围,学习连接时检查连接前后的行数。

在团队内部,也可以把某一节查询带进代码评审或技术分享。让参与者先预测结果,再运行查询,最后讨论执行结果和业务含义。这个过程比单纯展示语法更容易发现对 NULL、重复行和数据粒度的误解。

需要注意的是,短课程不能替代完整的数据库工程实践。生产环境还需要继续学习执行计划、索引设计、事务隔离、权限控制和备份恢复。YeSQL 更适合作为快速建立查询直觉的入口,或者作为阅读《The Art of PostgreSQL》时的可执行 companion。

结语:让数据库学习从“阅读”进入“验证”

YeSQL 的核心变化并不复杂,却很实用:把 PostgreSQL 知识拆成小而完整的实验,让每个概念都能在真实数据和可运行查询中得到反馈。对于学习者,建议按自己的节奏完成 24 节,并主动改写每个查询;对于团队,可以把它作为 SQL 练习和评审讨论的素材。

开始之前可以使用这份检查清单:

  • 准备一个可连接的 PostgreSQL 环境;
  • 每次只学习一个查询概念;
  • 先预测结果,再执行查询;
  • 至少改写一次查询并比较差异;
  • 记录结果正确性和数据规模带来的影响;
  • 将短练习延伸到执行计划和生产约束。

当查询能够直接运行,学习 PostgreSQL 就不再只是记忆语法,而是持续提出问题、运行实验并解释结果。


相关推荐