原文地址:SQL Feature Comparison。
更新日期:2019-10-10。
本文只关注 SQL 语句中的特性,以及不依赖于其他软件(例如编译器)的 SQL 脚本中支持的特性。 数据库的管理功能或者部署功能不属于此次比较的内容。
如果想要进一步了解某些 SQL 特性的不同实现比较,可以访问网站 Modern SQL。
由于原文内容较多,我们拆分为几个部分,这是第一部分,只包含查询相关的功能。
查询功能 | Oracle | PostgreSQL | SQL Server | IBM Db2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite |
---|---|---|---|---|---|---|---|---|---|---|---|
窗口函数 | Y | Y1 | Y1 | Y | Y | Y | Y | N | N | N | Y1 |
通用表表达式 | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y |
子查询中的 CTE | Y | Y | N | N | Y | N | Y | N | Y | N | Y |
递归查询 | Y | Y | Y | Y | Y | Y | Y | Y2 | Y | N | Y |
行构造器 | N | Y | Y3 | Y | N | N | N | N | Y | Y | Y |
聚合函数过滤 | N | Y | N | N | N | N | N | N | Y | N | N |
PIVOT 支持 | Y | N4 | Y | N | N | N | N | N | N | N | N |
GROUP BY … ROLLUP | Y | Y | Y | Y | Y | Y | N | N | N | Y | N |
GROUP BY … GROUPING SETS | Y | Y | Y | Y | N | N | N | N | N | N | N |
时态查询 | Y | N | Y | Y | N | N | N | N | N | N | N |
无 FROM 子句的 SELECT | N | Y | Y | N | Y5 | Y5 | N | Y | Y6 | N | Y |
并行查询 | Y | Y7 | Y | Y | N | N | N | N | N | N | N |
字符串聚合 | Y8 | Y | Y | Y | Y | Y | Y | Y | Y | N | Y |
元组比较 | Y9 | Y | N | Y | Y10 | Y10 | N | Y11 | Y | N | Y12 |
元组更新 | Y | Y | N | Y | N | N | N | Y | Y | N | Y |
包含表连接的 UPDATE | N | Y | Y | N | Y | Y | N | N | N | N | N |
ANSI 日期常量 | Y | Y | N | Y | Y | Y | Y | Y | Y | N | N |
查询中的变量13 | N | N | Y | N | Y | Y | N | Y | N | N | N |
UNNEST | N | Y | N | Y | N | N | N | N | Y | N | N |
将字符串拆分为多行 | N | Y | Y | N | N | N | N | N | N | N | N |
下一篇介绍索引和约束的比较。
所有的列都当作 varchar 处理;CTE 名称不能在同一个事务中被重用;不能在视图定义中使用;不能在子查询中使用;不能在 INSERT 语句中使用。 ↩︎
只能用于 FROM 子句,不能用于其它地方,例如,直接用于 CTE。 ↩︎
需要启用 PostgreSQL 兼容性设置。 ↩︎
只支持某些类型的连接和聚合操作。 ↩︎
聚合后的字符串最长为 32K。 ↩︎
不支持 >、< 以及 BETWEEN 操作符。 ↩︎
不支持 IN 操作符。 ↩︎
使用 IN 操作符时不支持使用常量值,例如
(a,b) IN ( (1,2), (3,4) )
。 ↩︎不利用过程语言代码,直接在查询语句中使用变量。 ↩︎