SQL 学不下去,多半是因为只读不写。这个站把练习做成了可以立刻验证的形式:67 道题,全部跑在一个虚构的乡村俱乐部数据库上,写完点运行,右边直接给出结果对不对。站点内容按 CC BY-SA 3.0 开放,作者 Alisdair Owens。
题库构成
| 分类 | 题量 | 主要考什么 |
| Basic | 12 | select、where、列运算、简单的排序与取别名 |
| Joins and Subqueries | 8 | 内连接、自连接、子查询、case 表达式 |
| Modifying data | 9 | insert、update、delete,以及带条件的批量修改 |
| Aggregates | 22 | 分组、having、窗口函数、排名与累计值 |
| Date | 6 | 日期加减、时间戳截断、按月按年汇总 |
| String | 7 | 拼接、截取、替换、正则匹配 |
| Recursive | 3 | 递归 CTE,用成员的推荐关系链做查询 |
| 合计 | 67 | — |
Aggregates 一档占了三分之一,这与实际工作里最常写的查询对得上:绝大多数分析型 SQL 最后都落在分组与窗口上。
数据库只有三张表
教材级的设计,但字段够用:
| 表 | 字段 | 说明 |
| cd.members | memid、surname、firstname、address、zipcode、telephone、recommendedby、joindate | recommendedby 自引用 members,用来做推荐链 |
| cd.facilities | facid、name、membercost、guestcost、initialoutlay、monthlymaintenance | 会员价与访客价分开,另有初始投入与月度维护成本 |
| cd.bookings | bookid、facid、memid、starttime、slots | slots 是半小时为一格的时长 |
bookings 只存"半小时格数"而不存结束时间,这个设计会让时间区间类查询变麻烦,作者在说明里也承认这是故意的:让你先体会真实库里的别扭。facilities 的两套价格加上 initialoutlay 与 monthlymaintenance,刚好够算设施的收入、使用率与回本周期,这也是题目的主线和"俱乐部想知道哪些设施划算"这个业务问题对得上。
一道题是什么样子
以 Basic 的第一题为例,页面给的是一次完整闭环:
- 问题:How can you retrieve all the information from the cd.facilities table?
- 期望结果:一张九行的结果表,facid 0 到 8,能看到 Tennis Court、Badminton Court、Massage Room 这些设施与对应价格;
- 作答区:可以直接写 SQL 并运行,页面会用同一份数据比对结果;
- Hint 与 Answers and Discussion:点开后给出参考写法 select * from cd.facilities;,下面还有一段解释,讲 schema 是什么、* 为什么可以代替列名;
- 快捷键:Alt-h 开关帮助、Alt-r 运行查询、Alt-x 运行选中文本、Alt-s 按光标位置运行。
这套设计对自学的人友好:先自己写,卡住看提示,写完再看解释,解释不是只给答案,还会说明这条语句为什么这样写。每一步的完成状态存在浏览器本地,下次打开能看到哪些题做过。
想在自己机器上跑
不想用在线环境的话,页面提供了建库脚本:
- 安装 PostgreSQL;
- 下载 dbfiles/clubdata.sql;
- 运行 psql -U <用户名> -f clubdata.sql,把三张表和示例数据一起建好。
之后就可以在 psql 或任何客户端里做题,只是没有在线版的自动比对。
作者自己标出的三个坑
第一,这个 schema 是故意有缺陷的。作者在 Getting Started 里写得很直白:数据库设计在若干方面并不好,不要把它当作好设计的范例。学查询可以,学着照抄建表会踩坑。
第二,数据是虚构的,地址完全编造,成员与设施也是编的。用来练手没问题,别拿去做任何真实业务推断。
第三,在线运行 SQL 有安全限制。作者在 About 里说明了做法:数据库账号对练习表只有只读权限、每条语句都设了 statement_timeout、连接经 pgbouncer 做语句级池化并在归还连接时执行 ABORT 清理设置。这解释了为什么在线版做不了建表、改结构这类操作,也说明在线环境适合练查询而不是练 DDL。
建议从 Basic 的第三题开始,跳过第一题那种一眼能答的;到 Aggregates 那 22 题时不要跳,窗口函数与累计值的手感只能靠这几道题练出来。
────────────────
回复本帖,可见站点首页与建库脚本的直达链接、七个分类的题目清单入口,以及许可与引用写法。
把经管之家装进你常用的 AI 智能体中 一键快捷安装经管之家 MCP/技能,让 AI 帮你查教程、找数据、读论坛帖子。 检索、阅读公开帖子不收费,安装可申请领取:3 通用积分+100 论坛币+3 元论坛资金 说明: AI 算力按所用平台规则计算;附件按原帖条件获取;福利领取条件以活动页面为准。 |


雷达卡


京公网安备 11010802022788号







