|
学 SQL 最蠢的据库方法就是抱着《SQL必知必会》从第一页啃到最后一页。我见过太多人这样干,学习三周后还在纠结 `SELECT * FROM table` 里的网站星号到底什么意思。真正有效的据库路径是:打开一个能即时反馈的网站,把查询框当草稿纸用,学习边写边看结果。网站 SQLZoo 是据库我推荐给新人的第一个站点。它长得像上世纪90年代的学习产物,界面朴素到令人怀疑是网站否还活着。但它的据库交互设计直击要害——每个知识点配一道题,你写查询,学习它跑结果,网站错了立刻告诉你哪行报错。据库比如学 `JOIN` 那节,学习它给你两张表:一张是网站足球比赛结果,一张是球队信息。你要做的是找出所有主场比赛的比分和客队名称。写错了?它不会给你标准答案,只提示“你的结果少了三行”。这种挫败感反而逼你回去检查 `ON` 条件写没写对。 另一个极端是 LeetCode 的数据库题库。它的题目更接近面试场景,比如“查找每个部门工资最高的员工”。这里不教语法,直接把你扔进问题里。我见过有人用子查询嵌套三层才做出来,也有人用窗口函数一行搞定。区别在于:前者在 SQLZoo 上只练过基础 `GROUP BY`,后者已经翻过 PostgreSQL 官方文档的窗口函数章节。两者都没错,但 LeetCode 的讨论区会告诉你哪种写法在真实工作中更常见。 W3School 的 SQL 教程适合当字典用。它的“试一试”按钮能让你在浏览器里直接改示例代码,但题目太简单,比如“选取所有列”这种。我通常建议学员:遇到 `HAVING` 和 `WHERE` 分不清时,去 W3School 看对比示例;想练手时,回 SQLZoo 或 LeetCode。别指望一个网站解决所有问题。 有个细节值得注意:SQLZoo 的题目描述里藏着英式幽默。比如一道题问“哪部电影的主演人数超过10人”,提示写的是“别数手指头,用 `COUNT` 和 `GROUP BY`”。这种语气让学习过程不那么像考试。而 LeetCode 的题目描述则冷冰冰的,像在审阅工单。选哪个取决于你当天是想被逗笑还是想被虐。 我自己的习惯是:每周挑一个下午,打开 SQLZoo 的“评估”模式。它随机抽10道题,限时完成。做完后看正确率,低于80%就回去重做对应章节。这个习惯坚持了三个月后,我写 `LEFT JOIN` 时不再需要查语法图——手指比脑子先动。 最后说个反直觉的观察:那些在 SQLZoo 上刷完所有题的人,未必比只刷了前五章的人强。因为后者的时间花在了用真实数据练手上。比如拿一份 CSV 格式的销售记录,导入 SQLite,自己设计查询:哪个产品退货率最高?哪个地区的复购周期最短?这些问题没有标准答案,但会让你真正理解 `CASE WHEN` 和 `DATE` 函数怎么配合。 网站只是工具。SQL 的肌肉记忆来自反复敲键盘,不是反复看教程。现在就去 SQLZoo 写第一条 `SELECT` 语句,比读完这篇文章更有用。 |