SQL 方言和一致性
本页面提供了 Databend 支持的 SQL 方言的详细信息,以及 Databend 与 SQL 标准的一致性,特别关注 SQL:2011 特性及其在 Databend 中的支持状态。
支持的 SQL 方言
SQL 方言是指 Structured Query Language(结构化查询语言)的特定变体或风格。Databend 默认支持 PostgreSQL
方言,并允许灵活地切换到其他受支持的方言。查阅下表,以了解 Databend 支持的方言及其各自的简要介绍:
方言 | 简介 | 了解更多 |
---|---|---|
PostgreSQL | 默认支持的方言,通常用于企业环境 | https://www.postgresql.org/ |
MySQL | 开源数据库管理系统 | https://www.mysql.com/ |
Hive | 面向大数据处理的数据仓库 | https://hive.apache.org/ |
Prql | PRQL 是一种用于数据转换的现代查询语言 —— 一个简单、强大、管道式语法的 SQL 替代品 | https://github.com/PRQL/prql |
Experimental | 用于测试和研究的实验性方言 | N/A |
要切换支持的 SQL 方言或显示当前方言,请使用 sql_dialect
设置:
示例:
-- 将 SQL 方言设置为 PRQL
SET sql_dialect = 'Prql';
-- 显示当前方言
SHOW SETTINGS LIKE 'sql_dialect';
SQL 一致性概要
Databend 旨在符合 SQL 标准,特别支持 ISO/IEC 9075:2011,也就是 SQL:2011。Databend 包含了许多 SQL 标准所要求的特性,这些特性在语法或功能上常常有细微的差异。本页面概述了 Databend 对 SQL:2011 标准的符合程度。
功能 ID | 功能名称 | 是否支持? | 注释 |
---|---|---|---|
E011 | 数值数据类型 | 是 | |
E011-01 | INTEGER 和 SMALLINT 数据类型 | 是 | |
E011-02 | REAL, DOUBLE PRECISION 和 FLOAT 数据类型 | 是 | |
E011-03 | DECIMAL 和 NUMERIC 数据类型 | 是 | |
E011-04 | 算术操作符 | 是 | |
E011-05 | 数值比较 | 是 | |
E011-06 | 数值数据类型之间的隐式转换 | 是 | |
E021 | 字符字符串类型 | 部分支持 | |
E021-01 | CHARACTER 数据类型 | 否 | 固定长度字符串类型不支持 |
E021-02 | CHARACTER VARYING 数据类型 | 是 | |
E021-03 | 字符字面量 | 是 | |
E021-04 | CHARACTER_LENGTH 函数 | 是 | |
E021-05 | OCTET_LENGTH 函数 | 是 | |
E021-06 | SUBSTRING | 是 | |
E021-07 | 字符串连接 | 是 | |
E021-08 | UPPER 和 LOWER 函数 | 是 | |
E021-09 | TRIM 函数 | 是 | |
E021-10 | 固定长度和可变长度字符字符串类型之间的隐式转换 | 否 | 固定长度字符串类型不支持 |
E021-11 | POSITION 函数 | 是 | |
E021-12 | 字符比较 | 是 | |
E031 | 标识符 | 是 | |
E031-01 | 限定标识符 | 是 | |
E031-02 | 小写标识符 | 是 | |
E031-03 | 尾随下划线 | 是 | |
E051 | 基本查询规范 | 部分支持 | |
E051-01 | SELECT DISTINCT | 是 | |
E051-02 | GROUP BY 子句 | 是 | |
E051-04 | GROUP BY 可包含 SELECT 列表中未出现的列 | 是 | |
E051-05 | 选择项可以重命名 | 是 | |
E051-06 | HAVING 子句 | 是 | |
E051-07 | 选择列表中的限定 * | 否 | |
E051-08 | FROM 子句中的相关名称 | 是 | |
E051-09 | FROM 子句中重命名列 | 否 | |
E061 | 基本谓词和搜索条件 | 部分支持 | |
E061-01 | 比较谓词 | 是 | |
E061-02 | BETWEEN 谓词 | 是 | |
E061-03 | 值列表中的 IN 谓词 | 是 | |
E061-04 | LIKE 谓词 | 是 | |
E061-05 | LIKE 谓词:ESCAPE 子句 | 否 | |
E061-06 | NULL 谓词 | 是 | |
E061-07 | 量化比较谓词 | 是 | |
E061-08 | EXISTS 谓词 | 是 | |
E061-09 | 比较谓词中的子查询 | 是 | |
E061-11 | IN 谓词中的子查询 | 是 | |
E061-12 | 量化比较谓词中的子查询 | 是 | |
E061-13 | 相关子查询 | 是 | |
E061-14 | 搜索条件 | 是 | |
E071 | 基本查询表达式 | 部分支持 | |
E071-01 | UNION DISTINCT 表操作符 | 是 | |
E071-02 | UNION ALL 表操作符 | 是 | |
E071-03 | EXCEPT DISTINCT 表操作符 | 是 | |
E071-05 | 通过表操作符组合的列不需要具有完全相同的数据类型 | 部分支持 | 只允许将可以隐式强制转换的数据类型的列与表操作符组合。 |
E071-06 | 子查询中的表操作符 | 是 | |
E081 | 基本权限 | 部分支持 | |
E081-01 | 表级别的 SELECT 权限 | 是 | |
E081-02 | DELETE 权限 | 是 | |
E081-03 | 表级别的 INSERT 权限 | 是 | |
E081-04 | 表级别的 UPDATE 权限 | 是 | |
E081-05 | 列级别的 UPDATE 权限 | 否 | |
E081-06 | 表级别的 REFERENCES 权限 | 否 | |
E081-07 | 列级别的 REFERENCES 权限 | 否 | |
E081-08 | WITH GRANT OPTION | 否 | |
E081-09 | USAGE 权限 | 否 | |
E081-10 | EXECUTE 权限 | 否 | |
E091 | 集合函数 | 是 | |
E091-01 | AVG | 是 | |
E091-02 | COUNT | 是 | |
E091-03 | MAX | 是 | |
E091-04 | MIN | 是 | |
E091-05 | SUM | 是 | |
E091-06 | ALL 量化符 | 是 | |
E091-07 | DISTINCT 量化符 | 部分支持 | 目前,Databend 支持 COUNT(DISTINCT ...) 和 SELECT DISTINCT ... 查询。 |
E101 | 基本数据操作 | 部分支持 | |
E101-01 | INSERT 语句 | 是 | |
E101-03 | 搜索式 UPDATE 语句 | 是 | |
E101-04 | 搜索式 DELETE 语句 | 是 | |
E111 | 单行 SELECT 语句 | 是 | |
E121 | 基本游标支持 | 部分支持 | |
E121-01 | DECLARE CURSOR | 否 | |
E121-02 | ORDER BY 列不需要在选择列表中 | 是 | |
E121-03 | ORDER BY 子句中的值表达式 | 是 | |
E121-04 | OPEN 语句 | 否 | |
E121-06 | 定位式 UPDATE 语句 | 否 | |
E121-07 | 定位式 DELETE 语句 | 否 | |
E121-08 | CLOSE 语句 | 否 | |
E121-10 | FETCH 语句:隐式 NEXT | 否 | |
E121-17 | WITH HOLD 游标 | 否 | |
E131 | 空值支持(空值代替值) | 是 | |
E141 | 基本完整性约束 | 否 | |
E141-01 | NOT NULL 约束 | 是 | Databend 默认:所有列都是可空的。 |
E141-02 | NOT NULL 列的 UNIQUE 约束 | 否 | |
E141-03 | PRIMARY KEY 约束 | 否 | |
E141-04 | 基本 FOREIGN KEY 约束,对于引用删除操作和引用更新操作默认为 NO ACTION | 否 | |
E141-06 | CHECK 约束 | 否 | |
E141-07 | 列默认值 | 是 | |
E141-08 | PRIMARY KEY 上的 NOT NULL 自动推断 | 否 | |
E141-10 | 外键中的名称可以以任何顺序指定 | 否 | |
E151 | 事务支持 | 部分支持 | |
E151-01 | COMMIT 语句 | 部分支持 | Databend 仅支持对每个单独的 DML 语句进行隐式事务。 |
E151-02 | ROLLBACK 语句 | 否 | |
E152 | 基本 SET TRANSACTION 语句 | 否 | |
E152-01 | SET TRANSACTION 语句:ISOLATION LEVEL SERIALIZABLE 子句 | 否 | |
E152-02 | SET TRANSACTION 语句:READ ONLY 和 READ WRITE 子句 | 否 | |
E153 | 可更新的带子查询的查询 | 是 | |
E161 | **使用前导双减号 |