如果您已经开始寻找学习 SQL的方法,可能会注意到市面上有许多不同的 SQL 方言,它们之间既有明显也有不太明显的区别。那么该从哪里入手?如果您从未使用过,哪个版本的 SQL 对您最有帮助?本文将聚焦四种最流行的数据库管理系统——PostgreSQL、MySQL、SQLite 和 SQL Server——以及它们各自的 SQL 语法。
下图来自 Stack Overflow Trends,可帮助您了解这些平台被讨论的频率——每条线代表所有 Stack Overflow 问题中关于各个 SQL 版本所占的比例。

MySQL在 Stack Overflow 提问中一直是最受欢迎的 SQL 版本。其次是Microsoft SQL Server(包括 T-SQL,即微软的 SQL 方言),其标签热度也始终高于PostgreSQL和SQLite。这意味着当您遇到某个系统的特定问题时,更有可能发现已经有人提过同样的问题。
有什么区别?
PostgreSQL、MySQL 和 SQLite 的语法非常相近,下面会强调一些值得注意的差异。Microsoft SQL Server 在 SQL 语法上差异最大,同时还提供了其他平台没有的多种函数。下表展示了各 SQL 平台之间一些基础差异的示例。
| SQL Server | MySQL | PostgreSQL | SQLite | |
|---|---|---|---|---|
| SELECT ... | Select [col1], [col2] | SELECT col1, col2 | SELECT col1, col2 | SELECT col1, col2 |
| 表中数据是否区分大小写? | 是 WHERE name = ‘John’ 与 WHERE name = ‘john’ 不相同 | 否 WHERE name = ‘John’ 与 WHERE name = ‘john’ 相同 | 是 WHERE name = ‘John’ 与 WHERE name = ‘john’ 不相同 | 是 WHERE name = ‘John’ 与 WHERE name = ‘john’ 不相同 |
| 引号的使用 | 仅支持 name = ‘John’ | 支持 name = ‘John’ 或 name = “John” | 仅支持 name = ‘John’ | 支持 name = ‘John’ 或 name = “John” |
| 列与表的别名 | SELECT AVG(col1)=avg1 | SELECT AVG(col1) AS avg1 | SELECT AVG(col1) AS avg1 | SELECT AVG(col1) AS avg1 |
| 日期处理 | GETDATE() DATEPART() | CURDATE() CURTIME() EXTRACT() | CURRENT_DATE() CURRENT_TIME() EXTRACT() | DATE(‘now’) strftime() |
| 窗口函数,如 OVER()、PARTITION BY() | 支持 | 支持 | 支持 | 支持 |
我该从哪里开始?
对于几乎没有 SQL 经验、且希望获得最具通用性技能的学习者,我建议从 PostgreSQL 入手。尽管 MySQL 的整体人气更高,但 PostgreSQL 可能是更好的选择,因为它的语法最接近标准 SQL。这意味着您可以更容易地将技能迁移到 MySQL 或 SQLite 等其他数据库管理系统。比如,下面这个查询会对销售信息数据库中的数据进行汇总。它包含联接、聚合函数和过滤条件。这段语法在这三个数据库系统中都会生成相同的结果。
Select
c.customer_name,
SUM(p.amount) AS total_sales
FROM customers AS c
LEFT JOIN purchases AS p
ON c.customers_id = p.customer_id
WHERE
c.customer_location = 'USA'
GROUP BY
c.customer_name;
如果您预计在职业发展中要使用 Microsoft SQL Server,我建议从学习 T-SQL/Microsoft SQL 开始。SQL Server 依然保持着可观的市场份额,并在许多行业中占据重要地位。如果您拿不准两者中哪一个更重要,建议浏览您所在领域的职位信息,以判断特定岗位或行业是否更偏好某种数据库系统。
DataCamp 如何助您一臂之力?
在 DataCamp,我们提供涵盖 PostgreSQL 入门主题和联接操作的 SQL 课程。我们也在开发一些关于 PostgreSQL 进阶与高级主题的精彩课程。同时,我们还有多门 SQL Server 课程在筹备中,其中包括 T-SQL/Microsoft SQL 入门课程,帮助您夯实使用 SQL Server 的基础。您可以查看我们的课程路线图了解更多信息。
如果您想自行练习与 PostgreSQL 数据库的交互,推荐在 Kaggle 上探索数据集。找到感兴趣的数据后,将其导入 PostgreSQL(CSV 或 SQLite 文件都可导入 PostgreSQL)并开始探索吧!
关系型数据库是一组包含行和列的数据表(数据集),这些表中的信息彼此相关联。
下图展示了一个示例关系型数据库中两个表的列信息。两个表都包含名为 customer_id 的列,这建立了表与表之间的关系。随着公司发展并记录成千上万(甚至数百万)的订单,将数据存储在不同的表中有助于优化空间并减小数据库体量。
SQL(结构化查询语言)是与关系型数据库交互的标准语言。借助 SQL,您可以对关系型数据库中的数据进行查询,也就是“提问”。熟练使用 SQL 和关系型数据库是数据分析师、数据工程师或数据科学家的重要技能组合。