跳至主要内容

SQL Server、PostgreSQL、MySQL:有什么区别?

在本教程中,您将了解 SQL 方言之间的一些基本差异,以及从哪里开始学习。
Mona Khalil
Mona Khalil

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

关系型数据库是一组包含行和列的数据表(数据集),这些表中的信息彼此相关联。

下图展示了一个示例关系型数据库中两个表的列信息。两个表都包含名为 customer_id 的列,这建立了表与表之间的关系。随着公司发展并记录成千上万(甚至数百万)的订单,将数据存储在不同的表中有助于优化空间并减小数据库体量。

SQL(结构化查询语言)是与关系型数据库交互的标准语言。借助 SQL,您可以对关系型数据库中的数据进行查询,也就是“提问”。熟练使用 SQL 和关系型数据库是数据分析师、数据工程师或数据科学家的重要技能组合。

如果您已经开始寻找学习 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 ServerMySQLPostgreSQLSQLite
SELECT ...Select [col1], [col2]SELECT col1, col2SELECT col1, col2SELECT 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)=avg1SELECT AVG(col1) AS avg1SELECT AVG(col1) AS avg1SELECT 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)并开始探索吧!

主题