学习 SQL 不一定要从生产数据开始。一个结构清晰、数据规模适中的示例数据库,足以帮助你练习 SELECT、过滤、连接、聚合和表结构设计。Northwind 原本来自 Microsoft 数据库生态,但借助现成的 PostgreSQL 脚本,可以很快在本地搭建出一套可查询的练习环境。
本文演示如何使用 DBeaver 打开并执行 northwind.sql,将表结构和示例数据加载到 PostgreSQL,然后运行第一条查询。
准备 PostgreSQL 和 DBeaver
开始前需要准备:
- 一个可连接的 PostgreSQL 实例,可以是本机安装、Docker 容器或远程开发库。
- DBeaver。示例使用 DBeaver Enterprise Edition 26.1.0,其他近期版本的操作方式通常类似。
- PostgreSQL 兼容的 Northwind SQL 文件。下载后应得到一个名为
northwind.sql的文本文件。
建议为练习单独创建数据库,避免把示例表和已有项目混在一起。例如,可以使用 PostgreSQL 客户端创建数据库:
createdb -U postgres northwind
如果 PostgreSQL 运行在其他主机或端口上,可以通过环境变量或连接参数指定目标:
PGHOST=127.0.0.1 PGPORT=5432 createdb -U postgres northwind
上面的命令假设当前用户已经拥有创建数据库的权限。如果数据库已经存在,跳过这一步即可。
在 DBeaver 中执行脚本
在 DBeaver 中创建一个指向 northwind 数据库的 PostgreSQL 连接,然后打开 northwind.sql 文件。脚本通常同时包含建表语句、约束定义和插入数据的语句,因此不需要手动逐张表创建。
打开脚本后,可以先浏览内容。对于刚接触 SQL 的开发者来说,这份文件本身就是一个小型数据建模案例:你可以观察表是如何定义的,主键和外键如何关联,以及数据是如何插入的。阅读脚本时,重点关注这些结构:
CREATE TABLE如何声明列类型和约束。- 主键如何保证一张表中的记录唯一。
- 外键如何表达客户、订单、产品和员工之间的关系。
INSERT语句如何批量填充示例数据。
确认当前 SQL 编辑器连接的是目标 PostgreSQL 数据库后,执行整个脚本。在 DBeaver 中可以使用 Alt + X 执行 SQL 脚本。执行完成后,查看脚本执行报告;如果没有错误,并且对象导航器中出现了 Northwind 相关表,说明加载基本成功。
也可以用 PostgreSQL 命令行完成同样的导入,适合自动化或排查 DBeaver 操作问题。请将路径替换成实际文件位置:
psql -U postgres -d northwind -f ./northwind.sql
如果脚本中途失败,不要只重复执行。先查看错误所在的语句,并确认数据库、用户权限以及脚本是否适用于 PostgreSQL。对于已经执行了一部分的脚本,使用一个全新的练习数据库重新导入,通常更容易得到干净、可重复的结果。
执行第一条查询
数据库加载完成后,可以在 DBeaver 中打开新的 SQL 编辑器,运行一个简单的筛选查询。下面的例子查找德国客户,并返回客户编号、公司名称、城市和国家:
SELECT
customer_id,
company_name,
city,
country
FROM customers
WHERE country = 'Germany';
这条查询包含 SQL 中最常见的几个组成部分:
SELECT指定要返回的列。FROM customers指定数据来源表。WHERE限制结果,只保留国家为 Germany 的记录。- 末尾的分号表示语句结束,便于客户端识别完整命令。
接下来可以逐步修改查询,观察结果如何变化。例如,按公司名称排序并限制返回数量:
SELECT
customer_id,
company_name,
city,
country
FROM customers
WHERE country = 'Germany'
ORDER BY company_name
LIMIT 10;
如果想进一步了解数据之间的关系,可以尝试把客户和订单连接起来。下面的查询统计每个客户的订单数量:
SELECT
c.customer_id,
c.company_name,
COUNT(o.order_id) AS order_count
FROM customers AS c
LEFT JOIN orders AS o
ON o.customer_id = c.customer_id
GROUP BY
c.customer_id,
c.company_name
ORDER BY order_count DESC;
这个例子同时展示了表别名、LEFT JOIN、COUNT、GROUP BY 和排序。使用 LEFT JOIN 的好处是,即使某个客户没有订单,也仍然可以出现在结果中,其订单数量会是 0。
把示例数据库用起来
Northwind 的价值不只是提供几张可以查询的表。它还适合用来练习完整的 SQL 工作流:先阅读模式,再验证关系,最后通过查询回答具体问题。
可以按下面的顺序练习:
- 查看各张表的列和数据类型。
- 找出订单表与客户表之间的外键关系。
- 查询某个国家的客户。
- 统计每个客户的订单数量。
- 连接订单明细和产品表,计算销售数量或金额。
- 为一个经常使用的过滤条件设计索引,并用执行计划验证影响。
练习时尽量从小查询开始,每次只增加一个新概念。这样既容易理解结果,也方便定位 SQL 错误。不要把示例数据库直接当作生产系统的设计模板;真实项目还需要考虑权限、迁移流程、数据质量、索引策略和备份恢复。
小结
使用 DBeaver 加载 Northwind 到 PostgreSQL,核心流程只有三步:准备数据库连接,打开并执行 northwind.sql,然后运行查询验证数据。对 SQL 初学者来说,脚本可以作为一份可阅读的数据模型;对有经验的开发者来说,它则是练习连接、聚合和查询优化的轻量数据集。
建议保留一个专门的练习数据库,并在每次实验前记录使用的 SQL。这样你不仅能快速重建环境,也能逐渐积累一套真正可复用的查询示例。