本节摘要:SQL 不是过时的技术,它是数据世界的通用语。本节从应用场景说清学 SQL 的实际价值,以及它和 NoSQL、编程语言查询库的分工。
阅读完本节,你应当能够:
几乎所有涉及"结构化数据"的地方都有 SQL 的身影:

NoSQL(MongoDB、Redis、Cassandra 等)兴起时有人喊"SQL 要过时了",事实证明没有。两者是分工关系:
很多公司是两者并用:核心交易用关系库,日志缓存用 NoSQL。学 SQL 不会因为 NoSQL 而贬值,反而是基础——理解了关系模型和 SQL,再学 NoSQL 会发现很多概念是相通的。
有人想:我用 Python/Java 写循环读数据不也行?为什么要 SQL?因为:
GROUP BY/JOIN 搞定,编程语言要写嵌套循环和哈希表。# 用 Python 算每个城市的客户数(啰嗦) from collections import Counter counts = Counter() for row in customers: counts[row['city']] += 1 # SQL 一句 # SELECT City, COUNT(*) FROM Customers GROUP BY City;
💡 关键直觉:SQL 的价值在"用声明式语法表达集合操作 + DBMS 自动优化"。能用 SQL 一句搞定的,别用编程语言写几十行循环。
| 角色 | SQL 深度 |
|---|---|
| 后端开发 | 熟练 DQL/DML/DDL,会调优 |
| 数据分析 | 熟练 DQL,会 JOIN/子查询/窗口函数 |
| 数据工程 | 精通,含性能调优 |
| 运维/DBA | 精通,含管理/权限/备份 |
| 偶尔用 | 会基础 SELECT 即可 |
本教程覆盖到"熟练"这一档,进阶调优和 DBA 内容点到为止。
第 1 章结束。下一章钻进关系型数据库的核心概念:关系模型、表、键。
Q1:现在有 ORM(如 SQLAlchemy、MyBatis),还有必要手写 SQL 吗?
非常有必要。ORM 帮你生成 SQL,但性能调优、排查慢查询、理解索引时,最终都要落到 SQL 层面。不懂 SQL 的人用 ORM,一旦出了问题只能干瞪眼。而且很多 ORM 写复杂查询反而不如 SQL 直接。SQL 是数据世界的通用语,ORM 只是它的方言翻译器。
Q2:SQL 会过时吗?NoSQL 不是更流行吗?
关系型数据库和 SQL 依然是数据存储的主流,尤其在金融、电商、ERP 这类强一致场景。NoSQL(MongoDB、Redis)解决的是另一类问题:超大规模、灵活结构、高性能缓存。两者是分工关系,不是替代关系。而且很多 NoSQL 后来也加入了类 SQL 查询能力(如 MongoDB 的聚合框架),说明 SQL 的思维深入人心。
Q3:作为数据分析师,SQL 学到什么程度够用?
至少熟练 SELECT:条件过滤、排序、分组聚合、多表 JOIN、子查询。进阶再加窗口函数(本教程第 4 章后可以继续自学)。数据分析师的日常 90% 是取数,SQL 熟练度直接决定效率。很多 BI 工具底层也是生成 SQL,懂 SQL 才能不迷信工具。
与其争论"SQL 有没有用",不如亲自体会一次"用 SQL 和不用 SQL 的差别"。
找一个包含几千行数据的场景,比如一张记录订单的表。如果你只想看"北京客户的订单里,金额最大的前十笔",用编程语言写循环,你需要先取出所有数据、在内存里遍历判断、排序、再截取前十行,代码几十行起步。而用 SQL,一条语句就能表达清楚:先筛出北京的客户,再按金额降序排列,最后限制返回十行。
把两者写出来对比,你会立刻明白 SQL 的价值在哪里:同样的逻辑,编程语言要描述"怎么做",SQL 只要描述"要什么"。数据量越大、过滤条件越多,这个差距越明显。
建议你找一个实际场景,把"编程语言实现"和"SQL 实现"各写一遍。不需要真的跑,只要写出来对比,就能体会 SQL 在数据处理上"少即是多"的魅力。这份体感,比任何理论说辞都更有说服力。
SQL 是数据世界的通用语:后端要用,数据分析要用,数据工程要用,运维测试也要用。它和 NoSQL 是分工合作的关系,和编程语言是"各管一段"的关系——编程语言负责业务逻辑,SQL 负责数据存取。