常见数据库 SQL 特性比较之查询功能

原文地址:SQL Feature Comparison
更新日期:2019-10-10。

本文只关注 SQL 语句中的特性,以及不依赖于其他软件(例如编译器)的 SQL 脚本中支持的特性。 数据库的管理功能或者部署功能不属于此次比较的内容。

如果想要进一步了解某些 SQL 特性的不同实现比较,可以访问网站 Modern SQL

由于原文内容较多,我们拆分为几个部分,这是第一部分,只包含查询相关的功能。

查询功能OraclePostgreSQLSQL ServerIBM Db2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
窗口函数YY1Y1YYYYNNNY1
通用表表达式YYYYYYYNYNY
子查询中的 CTEYYNNYNYNYNY
递归查询YYYYYYYY2YNY
行构造器NYY3YNNNNYYY
聚合函数过滤NYNNNNNNYNN
PIVOT 支持YN4YNNNNNNNN
GROUP BY … ROLLUPYYYYYYNNNYN
GROUP BY … GROUPING SETSYYYYNNNNNNN
时态查询YNYYNNNNNNN
无 FROM 子句的 SELECTNYYNY5Y5NYY6NY
并行查询YY7YYNNNNNNN
字符串聚合Y8YYYYYYYYNY
元组比较Y9YNYY10Y10NY11YNY12
元组更新YYNYNNNYYNY
包含表连接的 UPDATENYYNYYNNNNN
ANSI 日期常量YYNYYYYYYNN
查询中的变量13NNYNYYNYNNN
UNNESTNYNYNNNNYNN
将字符串拆分为多行NYYNNNNNNNN

下一篇介绍索引和约束的比较


  1. 窗口函数内不支持 DISTINCT 关键字。 ↩︎ ↩︎ ↩︎

  2. 所有的列都当作 varchar 处理;CTE 名称不能在同一个事务中被重用;不能在视图定义中使用;不能在子查询中使用;不能在 INSERT 语句中使用。 ↩︎

  3. 只能用于 FROM 子句,不能用于其它地方,例如,直接用于 CTE。 ↩︎

  4. 可以通过 crosstab 函数实现该功能。 ↩︎

  5. 不允许使用 WHERE 子句,例如SELECT 42 WHERE NOT EXISTS (...);↩︎ ↩︎

  6. 需要启用 PostgreSQL 兼容性设置。 ↩︎

  7. 只支持某些类型的连接和聚合操作。 ↩︎

  8. 聚合后的字符串最长为 32K。 ↩︎

  9. 不支持 >、< 以及 BETWEEN 操作符。 ↩︎

  10. 不支持 BETWEEN 操作符。 ↩︎ ↩︎

  11. 不支持 IN 操作符。 ↩︎

  12. 使用 IN 操作符时不支持使用常量值,例如(a,b) IN ( (1,2), (3,4) )↩︎

  13. 不利用过程语言代码,直接在查询语句中使用变量。 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值