SQL基础课程

skillgohub.com 中文指南 | 中文版

SQL基础课程

每隔几年就有人宣布 SQL 已经"过时",可那些靠关系型数据库支撑的系统却一直在膨胀。从银行流水到淘宝购物车,再到医院的病历记录,SQL 一直是和这些数据对话的通用语言。如果你能写出一条干净的查询、能想得清楚表结构之间的关系,那么几乎在任何一家公司,你都能在几个星期内产生真实的价值——这也是为什么一门扎实的 数据工程基础 课程,是花费学习时间回报率最高的投资之一。

SQL 为什么能火四十多年还不过气

SQL 自上世纪 80 年代起就持续商用于生产环境。每年 Stack Overflow 的开发者调查里,它都稳居最常用语言前三,仅排在 JavaScript 和 Python 后面。原因不是它时髦,而是它足够耐用:关系型数据无处不在,而 SQL 是唯一能高效表述"表与表之间的关系"的语言。难得的是,虽然很多自学者能背下 SELECT、JOIN、GROUP BY 这些关键词,却往往在最关键的地方栽跟头——不是语法,而是"关系思维"。

sql-fundamentals-course illustration

大多数自学 SQL 的人失败在结构,而不是语法。你能默写查询语句,却依然会写出又慢又错又难维护的查询。这篇指南围绕一个核心差异展开:懂语法 vs. 用关系的方式思考。你会按照真实数据库要求的顺序学习核心语句、最容易踩坑的 JOIN 模式、如何不踩 NULL 和去重的雷,以及保持查询一直很快的习惯。

覆盖九成日常工作的五条核心语句

你不需要掌握 PostgreSQL 或 MySQL 的每一项功能才能上手工作。一个精简子集就能应付绝大多数日常的分析和业务:

sql-fundamentals-course illustration

把这五条练到滚瓜烂熟,你第一天就能干真活。关键在那些"能跑"和"跑得对"之间的细节。比如要牢记 SQL 的求值顺序,它不是你写的顺序:先 FROM,再 JOIN,再 WHERE,再 GROUP BY,再 HAVING,再 SELECT,最后 ORDER BY 和 LIMIT。一旦你把这套执行顺序装进脑子里,"为什么我的 COUNT 只返回了一行"、"为什么 WHERE 里不能引用别名"这类新手常见错误就会自然消失。

JOIN 是新手最容易交学费的地方

JOIN 是 SQL 思维和简单筛选真正分道扬镳的地方。INNER JOIN 只返回两边都匹配的行;LEFT JOIN 返回左表全部加上右表匹配的部分,没匹配到的补 NULL;RIGHT JOIN 正好相反;FULL OUTER JOIN 两边都返回。实战中最容易误读的是 LEFT JOIN 带来的重复行和大量 NULL,新手总以为这是报错。当 LEFT JOIN 把行数撑大时,多半是右表里同一个 key 有多条匹配——这时候你发现的不是 SQL 出了 bug,而是数据模型有基数问题。

sql-fundamentals-course illustration

几乎每门基础课程都会出经典陷阱:一张订单表和一张订单明细表,JOIN 后再聚合,因为每个订单对应多条明细,总额被放大。解决办法是在 JOIN 之前先聚合,或者在正确的层级用 DISTINCT。能一眼识别这种模式——无论脑筋里还是真实数据里——比死记 JOIN 语法更有价值,因为它在教你思考"行基数",这正是你日后设计所有数据模型的地基。

NULL、去重和聚合:错误高发区

大量 SQL bug 都能追溯到三个看似简单、实则要命的概念:NULL、DISTINCT 和聚合行为。NULL 不是 0,也不是空字符串,它是"未知";任何与 NULL 比较的结果都是"未知",这会悄悄把行过滤掉。要判断它得用 IS NULL 而不是 = NULL,要替换默认值则用 COALESCE。DISTINCT 只能去掉完全相同的重复行,对那些只在一个被忽略的列上不同的"伪重复"毫无办法——所以去重必须谨慎选择 key。

sql-fundamentals-course illustration

聚合函数 COUNT、SUM、AVG、MIN、MAX 在 NULL 面前的行为也和新手预期不同:COUNT(*) 数所有行(含 NULL),COUNT(列) 只数非 NULL 的值,而 AVG 默认直接忽略 NULL。搞错了这些,平均值会悄悄偏高,计数也会悄悄漏行。正规课程会用小数据集反复练这些场景,直到它们不再让你意外——因为在生产环境里,这种静默错误才是最危险的:查询返回了一个数,没人会去质疑它,可那个数其实是错的。

怎么选你的第一个数据库和练习环境

你用什么数据库练习,远不如你养成的纪律重要。但每种数据库在特性、价格上各有侧重,适合不同预算。挑一个,承诺用它练满一个月,别在还没搞懂 JOIN 之前就来回切换引擎。下面这张表帮你做选择(记得核实当前的免费额度):

sql-fundamentals-course illustration
平台 / 工具核心特性价格
SQLite单文件数据库、零配置,最适合学习免费开源
PostgreSQLACID、丰富数据类型、开源、生产级免费;Neon、Supabase 等托管有免费额度
MySQL部署广泛、简单、生态庞大免费 Community 版;托管版价格不定
SQL Server企业级功能、强 BI 集成、T-SQL 方言免费 Developer 版;Express 免费,Standard 收费
DataCamp / Mode交互式 SQL 课程与分析笔记本有免费档;付费约 95–280 元/月起

对纯新手,SQLite 完全免费且省去一切配置障碍,让你专注语言本身。如果目标是往生产或应用开发走,PostgreSQL 是最聪明的选择:免费、强大,还是现代技术栈的默认。如果你的团队或行业偏向微软体系,SQL Server 的免费 Developer 版也没问题,只是要意识到你在学 T-SQL 方言。DataCamp、Mode 这类交互平台用练习和即时反馈来组织你的训练,能以很低的成本加速第一个月。

让查询一直保持快速度的性能习惯

写出"正确"的 SQL 只完成了一半,写出"快"的 SQL 才是在真实代码库里赢得尊重。性能基本功不需要深入底层原理,只要默认应用几条规则:尽早、尽量把过滤条件前推,让数据库少干活;避免 SELECT *,只列出你需要的列,既省 I/O 又让意图清晰;学会读查询计划,因为告诉你时间到底花在哪的是计划,而不是你的猜测;还要理解索引何时真能帮上忙——索引加速 WHERE 和 ON 里用到的列上的过滤与连接,但会拖慢写入并占存储,所以要有的放矢,而不是处处建索引。

要分辨"因为 SQL 写得差而慢"和"因为缺索引或表太大而慢",使用 PostgreSQL 的 EXPLAIN 或 EXPLAIN ANALYZE 看实际执行即可。一门触及查询计划和索引的课程,给你的是从"能跑"走向"它不是系统里的瓶颈"的能力。这也和 数据库设计原理 密不可分,正是因为你在一门基础课程里先练出来的查询技能,决定了后续调优的上限。

把 SQL 基本功变成能长期保值的能力

SQL 不时髦,而这恰恰是它安全的原因。每一类分析、数据、后端和产品岗位都要靠它,它打开的门还能不断叠加:从数据分析师到数据工程师再到后端开发,这门语言始终在场。对想往工程侧深入的朋友,数据工程基础 能让你看清 SQL 在真实数据管线里的位置。让它真正长进身体最快的方式是刻意练习真实问题——不只是跟着例子抄,而是从提示出发写查询,并跑在你自己关心的数据上。多问"哪 20% 的客户贡献了 80% 的收入?""订单量如何按星期变化?",让你的好奇心反过来倒逼你去搭需要的表结构。

把 SQL 和相邻的基础能力配在一起,效果会放大。入门阶段建议先补上 数据库设计基础,它能直接提升你的查询质量;再搭配 2026 年数据分析学习路径,把 SQL 放进一个完整的技能栈里。理解了数据库怎么设计,你的查询会更有力;能想清楚承载数据的那套系统,你就是最有价值的那种人。无论你是要进入数据行业,还是想给自己加一件趁手工具,SQL 都会比你这季度能学的几乎所有东西都更确定地回报你投入的时间。它很无聊,它六十岁了,它哪里也不会去——所以,认真学好这一遍,很值。

常见问题

学多久 SQL 才能应聘数据分析师岗位?

多数人持续学习 4 到 8 周就能达到面试水平的及格线,掌握核心五条语句、JOIN、聚合和窗口函数。一门带动手练习的结构化课程能压缩这个过程,因为它帮你筛选出该练的题。真正的岗位胜任力还取决于你解读结果、写出干净查询的能力,而不仅是语法。

应该先学 SQL 还是 Python?

它们用途不同。如果目标是查询和分析关系型数据,SQL 是最好的第一步,因为几乎所有数据岗都要求它,而且它比 Python 更小、更聚焦。之后再学 Python 做更深入的分析、自动化和机器学习。很多岗位两者都要,但 SQL 的入门曲线更平缓。

新手学 MySQL 还是 PostgreSQL 更好?

对多数新手更推荐 PostgreSQL,因为它免费、强大、标准合规,且是现代技术栈的默认选择,技能可迁移性强。MySQL 也很不错,部署极广。如果你已经知道自己或目标公司用哪个,就先学那个——两者的核心语法大部分是相通的。

2026 年数据库和 SQL 还有用吗?NoSQL 是不是要取代它?

两者都有用,但 SQL 不会被取代。NoSQL 系统是配合关系型数据库、用于文档存储和高并发缓存等特定场景的。而生态里的工具越来越支持用 SQL 接口去查非关系型数据。关系思维仍是地基,理解它还能让你把 NoSQL 设计得更好。

📌 Pinterest 🐦 Twitter 📘 Facebook