跳至主要内容

ClickHouse SQL 方言的 ANSI SQL 兼容性

注意

本文依赖于 ISO/IEC CD 9075-2:2011 附录 F 中的表 38“强制功能的特征分类和定义”。

行为差异

下表列出了查询功能在 ClickHouse 中有效,但行为与 ANSI SQL 中指定的不同之处。

功能 ID功能名称差异
E011数值数据类型带小数点的数值字面量被解释为近似值 (Float64),而不是精确值 (Decimal)
E051-05选择项可以重命名项重命名具有比 SELECT 结果更广泛的可见范围
E141-01NOT NULL 约束默认情况下,表列隐含 NOT NULL
E011-04算术运算符ClickHouse 会溢出,而不是进行检查算术运算,并根据自定义规则更改结果数据类型

功能状态

功能 ID功能名称状态评论
E011数值数据类型部分
E011-01INTEGER 和 SMALLINT 数据类型
E011-02REAL、DOUBLE PRECISION 和 FLOAT 数据类型
E011-03DECIMAL 和 NUMERIC 数据类型
E011-04算术运算符
E011-05数值比较
E011-06数值数据类型之间的隐式转换ANSI SQL 允许在数值类型之间进行任意隐式转换,而 ClickHouse 依赖于具有多个重载的函数,而不是隐式转换
E021字符字符串类型部分
E021-01CHARACTER 数据类型
E021-02CHARACTER VARYING 数据类型
E021-03字符字面量
E021-04CHARACTER_LENGTH 函数部分没有 USING 子句
E021-05OCTET_LENGTH 函数LENGTH 的行为类似
E021-06SUBSTRING部分不支持 SIMILARESCAPE 子句,没有 SUBSTRING_REGEX 变体
E021-07字符串连接部分没有 COLLATE 子句
E021-08UPPER 和 LOWER 函数
E021-09TRIM 函数
E021-10固定长度和可变长度字符字符串类型之间的隐式转换部分ANSI SQL 允许在字符串类型之间进行任意隐式转换,而 ClickHouse 依赖于具有多个重载的函数,而不是隐式转换
E021-11POSITION 函数部分不支持 INUSING 子句,没有 POSITION_REGEX 变体
E021-12字符比较
E031标识符部分
E031-01分隔标识符部分Unicode 字面量支持有限
E031-02小写标识符
E031-03尾随下划线
E051基本查询规范部分
E051-01SELECT DISTINCT
E051-02GROUP BY 子句
E051-04GROUP BY 可以包含不在 <select list> 中的列
E051-05选择项可以重命名
E051-06HAVING 子句
E051-07限定*在选择列表中
E051-08FROM 子句中的相关名称
E051-09在 FROM 子句中重命名列
E061基本谓词和搜索条件部分
E061-01比较谓词
E061-02BETWEEN 谓词部分没有 SYMMETRICASYMMETRIC 子句
E061-03带有值列表的 IN 谓词
E061-04LIKE 谓词
E061-05LIKE 谓词:ESCAPE 子句
E061-06NULL 谓词
E061-07量化比较谓词
E061-08EXISTS 谓词
E061-09比较谓词中的子查询
E061-11IN 谓词中的子查询
E061-12量化比较谓词中的子查询
E061-13相关子查询
E061-14搜索条件
E071基本查询表达式部分
E071-01UNION DISTINCT 表运算符
E071-02UNION ALL 表运算符
E071-03EXCEPT DISTINCT 表运算符
E071-05通过表运算符组合的列不必具有完全相同的数据类型
E071-06子查询中的表运算符
E081基本权限
E081-01表级别的 SELECT 权限
E081-02DELETE 权限
E081-03表级别的 INSERT 权限
E081-04表级别的 UPDATE 权限
E081-05列级别的 UPDATE 权限
E081-06表级别的 REFERENCES 权限
E081-07列级别的 REFERENCES 权限
E081-08WITH GRANT OPTION
E081-09USAGE 权限
E081-10EXECUTE 权限
E091集合函数
E091-01AVG
E091-02COUNT
E091-03MAX
E091-04MIN
E091-05SUM
E091-06ALL 量词
E091-07DISTINCT 量词并非所有聚合函数都受支持
E101基本数据操作部分
E101-01INSERT 语句注意:ClickHouse 中的主键不暗示 UNIQUE 约束
E101-03带搜索条件的 UPDATE 语句部分有一个 ALTER UPDATE 语句用于批处理数据修改
E101-04带搜索条件的 DELETE 语句部分有一个 ALTER DELETE 语句用于批处理数据删除
E111单行 SELECT 语句
E121基本游标支持
E121-01DECLARE CURSOR
E121-02ORDER BY 列不必出现在选择列表中
E121-03ORDER BY 子句中的值表达式
E121-04OPEN 语句
E121-06定位 UPDATE 语句
E121-07定位 DELETE 语句
E121-08CLOSE 语句
E121-10FETCH 语句:隐式 NEXT
E121-17WITH HOLD 游标
E131空值支持(空值代替值)有一些限制
E141基本完整性约束部分
E141-01NOT NULL 约束注意:默认情况下,表列隐含 NOT NULL
E141-02NOT NULL 列的 UNIQUE 约束
E141-03PRIMARY KEY 约束部分
E141-04基本 FOREIGN KEY 约束,对引用删除操作和引用更新操作都使用 NO ACTION 默认值
E141-06CHECK 约束
E141-07列默认值
E141-08PRIMARY KEY 上推断的 NOT NULL
E141-10外键中的名称可以按任何顺序指定
E151事务支持
E151-01COMMIT 语句
E151-02ROLLBACK 语句
E152基本 SET TRANSACTION 语句
E152-01SET TRANSACTION 语句:ISOLATION LEVEL SERIALIZABLE 子句
E152-02SET TRANSACTION 语句:READ ONLY 和 READ WRITE 子句
E153带有子查询的可更新查询
E161使用前导双减号的 SQL 注释
E171SQLSTATE 支持
E182宿主语言绑定
F031基本模式操作部分
F031-01CREATE TABLE 语句用于创建持久基本表部分没有 SYSTEM VERSIONINGON COMMITGLOBALLOCALPRESERVEDELETEREF ISWITH OPTIONSUNDERLIKEPERIOD FOR 子句,也不支持用户解析的数据类型
F031-02CREATE VIEW 语句部分没有 RECURSIVECHECKUNDERWITH OPTIONS 子句,也不支持用户解析的数据类型
F031-03GRANT 语句
F031-04ALTER TABLE 语句:ADD COLUMN 子句不支持 GENERATED 子句和系统时间段
F031-13DROP TABLE 语句:RESTRICT 子句
F031-16DROP VIEW 语句:RESTRICT 子句
F031-19REVOKE 语句:RESTRICT 子句
F041基本联接表部分
F041-01内联接(但不一定是 INNER 关键字)
F041-02INNER 关键字
F041-03LEFT OUTER JOIN
F041-04RIGHT OUTER JOIN
F041-05外联接可以嵌套
F041-07左或右外联接中的内部表也可以用于内联接
F041-08支持所有比较运算符(而不仅仅是 =)
F051基本日期和时间部分
F051-01DATE 数据类型(包括 DATE 字面量的支持)
F051-02TIME 数据类型(包括 TIME 字面量的支持),小数秒精度至少为 0
F051-03TIMESTAMP 数据类型(包括 TIMESTAMP 字面量的支持),小数秒精度至少为 0 和 6
F051-04对 DATE、TIME 和 TIMESTAMP 数据类型的比较谓词
F051-05日期时间类型和字符字符串类型之间的显式 CAST
F051-06CURRENT_DATEtoday() 类似
F051-07LOCALTIMEnow() 类似
F051-08LOCALTIMESTAMP
F081视图中的 UNION 和 EXCEPT部分
F131分组操作部分
F131-01WHERE、GROUP BY 和 HAVING 子句在包含分组视图的查询中受支持
F131-02包含分组视图的查询中支持多个表
F131-03包含分组视图的查询中支持集合函数
F131-04包含 GROUP BY 和 HAVING 子句以及分组视图的子查询
F131-05包含 GROUP BY 和 HAVING 子句以及分组视图的单行 SELECT
F181多模块支持
F201CAST 函数
F221显式默认值
F261CASE 表达式
F261-01简单 CASE
F261-02搜索 CASE
F261-03NULLIF
F261-04COALESCE
F311模式定义语句部分
F311-01CREATE SCHEMA部分参见 CREATE DATABASE
F311-02用于持久基本表的 CREATE TABLE
F311-03CREATE VIEW
F311-04CREATE VIEW: WITH CHECK OPTION
F311-05GRANT 语句
F471标量子查询值
F481扩展 NULL 谓词
F812基本标记
S011不同数据类型
T321基本 SQL 调用例程
T321-01无重载的用户定义函数
T321-02无重载的用户定义存储过程
T321-03函数调用
T321-04CALL 语句
T321-05RETURN 语句
T631包含一个列表元素的 IN 谓词