ClickHouse/docs/zh/sql-reference/ansi.md

181 lines
45 KiB
Markdown
Raw Normal View History

---
machine_translated: true
machine_translated_rev: ad252bbb4f7e2899c448eb42ecc39ff195c8faa1
toc_priority: 40
toc_title: "ANSI\u517C\u5BB9\u6027"
---
# Ansi Sql兼容性的ClickHouse SQL方言 {#ansi-sql-compatibility-of-clickhouse-sql-dialect}
!!! note "注"
本文依赖于表38, “Feature taxonomy and definition for mandatory features”, Annex F of ISO/IEC CD 9075-2:2013.
## 行为差异 {#differences-in-behaviour}
下表列出了查询功能在ClickHouse中工作但行为不符合ANSI SQL中指定的情况。
| Feature ID | 功能名称 | 差异 |
|------------|--------------------|---------------------------------------------------------------------|
| E011 | 数字数据类型 | 带句点的数值文字被解释为近似值 (`Float64`)而不是确切的 (`Decimal`) |
| E051-05 | 选择项目可以重命名 | 项目重命名具有比仅选择结果更广泛的可见性范围 |
| E141-01 | 非空约束 | `NOT NULL` 默认情况下,表列隐含 |
| E011-04 | 算术运算符 | ClickHouse溢出而不是检查算法并根据自定义规则更改结果数据类型 |
## 功能状态 {#feature-status}
| Feature ID | 功能名称 | 状态 | 评论 |
|------------|----------------------------------------------------------------|--------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **E011** | **数字数据类型** | **部分**{.text-warning} | |
| E011-01 | 整型和小型数据类型 | 是{.text-success} | |
| E011-02 | 真实、双精度和浮点数据类型数据类型 | 部分{.text-warning} | `FLOAT(<binary_precision>)`, `REAL``DOUBLE PRECISION` 不支持 |
| E011-03 | 十进制和数值数据类型 | 部分{.text-warning} | 只有 `DECIMAL(p,s)` 支持,而不是 `NUMERIC` |
| E011-04 | 算术运算符 | 是{.text-success} | |
| E011-05 | 数字比较 | 是{.text-success} | |
| E011-06 | 数字数据类型之间的隐式转换 | 非也。{.text-danger} | ANSI SQL允许在数值类型之间进行任意隐式转换而ClickHouse依赖于具有多个重载的函数而不是隐式转换 |
| **E021** | **字符串类型** | **部分**{.text-warning} | |
| E021-01 | 字符数据类型 | 非也。{.text-danger} | |
| E021-02 | 字符变化数据类型 | 非也。{.text-danger} | `String` 行为类似,但括号中没有长度限制 |
| E021-03 | 字符文字 | 部分{.text-warning} | 不自动连接连续文字和字符集支持 |
| E021-04 | 字符长度函数 | 部分{.text-warning} | 非也。 `USING` 条款 |
| E021-05 | OCTET\_LENGTH函数 | 非也。{.text-danger} | `LENGTH` 表现类似 |
| E021-06 | SUBSTRING | 部分{.text-warning} | 不支持 `SIMILAR``ESCAPE` 条款,否 `SUBSTRING_REGEX` 备选案文 |
| E021-07 | 字符串联 | 部分{.text-warning} | 非也。 `COLLATE` 条款 |
| E021-08 | 上下功能 | 是{.text-success} | |
| E021-09 | 修剪功能 | 是{.text-success} | |
| E021-10 | 固定长度和可变长度字符串类型之间的隐式转换 | 非也。{.text-danger} | ANSI SQL允许在字符串类型之间进行任意隐式转换而ClickHouse依赖于具有多个重载的函数而不是隐式转换 |
| E021-11 | 职位功能 | 部分{.text-warning} | 不支持 `IN``USING` 条款,否 `POSITION_REGEX` 备选案文 |
| E021-12 | 字符比较 | 是{.text-success} | |
| **E031** | **标识符** | **部分**{.text-warning} | |
| E031-01 | 分隔标识符 | 部分{.text-warning} | Unicode文字支持有限 |
| E031-02 | 小写标识符 | 是{.text-success} | |
| E031-03 | 尾部下划线 | 是{.text-success} | |
| **E051** | **基本查询规范** | **部分**{.text-warning} | |
| E051-01 | SELECT DISTINCT | 是{.text-success} | |
| E051-02 | GROUP BY子句 | 是{.text-success} | |
| E051-04 | 分组依据可以包含不在列 `<select list>` | 是{.text-success} | |
| E051-05 | 选择项目可以重命名 | 是{.text-success} | |
| E051-06 | 有条款 | 是{.text-success} | |
| E051-07 | 合格\*在选择列表中 | 是{.text-success} | |
| E051-08 | FROM子句中的关联名称 | 是{.text-success} | |
| E051-09 | 重命名FROM子句中的列 | 非也。{.text-danger} | |
| **E061** | **基本谓词和搜索条件** | **部分**{.text-warning} | |
| E061-01 | 比较谓词 | 是{.text-success} | |
| E061-02 | 谓词之间 | 部分{.text-warning} | 非也。 `SYMMETRIC``ASYMMETRIC` 条款 |
| E061-03 | 在具有值列表的谓词中 | 是{.text-success} | |
| E061-04 | 像谓词 | 是{.text-success} | |
| E061-05 | LIKE谓词逃避条款 | 非也。{.text-danger} | |
| E061-06 | 空谓词 | 是{.text-success} | |
| E061-07 | 量化比较谓词 | 非也。{.text-danger} | |
| E061-08 | 存在谓词 | 非也。{.text-danger} | |
| E061-09 | 比较谓词中的子查询 | 是{.text-success} | |
| E061-11 | 谓词中的子查询 | 是{.text-success} | |
| E061-12 | 量化比较谓词中的子查询 | 非也。{.text-danger} | |
| E061-13 | 相关子查询 | 非也。{.text-danger} | |
| E061-14 | 搜索条件 | 是{.text-success} | |
| **E071** | **基本查询表达式** | **部分**{.text-warning} | |
| E071-01 | UNION DISTINCT table运算符 | 非也。{.text-danger} | |
| E071-02 | 联合所有表运算符 | 是{.text-success} | |
| E071-03 | 除了不同的表运算符 | 非也。{.text-danger} | |
| E071-05 | 通过表运算符组合的列不必具有完全相同的数据类型 | 是{.text-success} | |
| E071-06 | 子查询中的表运算符 | 是{.text-success} | |
| **E081** | **基本特权** | **部分**{.text-warning} | 正在进行的工作 |
| **E091** | **设置函数** | **是**{.text-success} | |
| E091-01 | AVG | 是{.text-success} | |
| E091-02 | COUNT | 是{.text-success} | |
| E091-03 | MAX | 是{.text-success} | |
| E091-04 | MIN | 是{.text-success} | |
| E091-05 | SUM | 是{.text-success} | |
| E091-06 | 全部量词 | 非也。{.text-danger} | |
| E091-07 | 不同的量词 | 部分{.text-warning} | 并非所有聚合函数都受支持 |
| **E101** | **基本数据操作** | **部分**{.text-warning} | |
| E101-01 | 插入语句 | 是{.text-success} | 注ClickHouse中的主键并不意味着 `UNIQUE` 约束 |
| E101-03 | 搜索更新语句 | 非也。{.text-danger} | 有一个 `ALTER UPDATE` 批量数据修改语句 |
| E101-04 | 搜索的删除语句 | 非也。{.text-danger} | 有一个 `ALTER DELETE` 批量数据删除声明 |
| **E111** | **单行SELECT语句** | **非也。**{.text-danger} | |
| **E121** | **基本光标支持** | **非也。**{.text-danger} | |
| E121-01 | DECLARE CURSOR | 非也。{.text-danger} | |
| E121-02 | 按列排序不需要在选择列表中 | 非也。{.text-danger} | |
| E121-03 | 按顺序排列的值表达式 | 非也。{.text-danger} | |
| E121-04 | 公开声明 | 非也。{.text-danger} | |
| E121-06 | 定位更新语句 | 非也。{.text-danger} | |
| E121-07 | 定位删除语句 | 非也。{.text-danger} | |
| E121-08 | 关闭声明 | 非也。{.text-danger} | |
| E121-10 | FETCH语句隐式NEXT | 非也。{.text-danger} | |
| E121-17 | 使用保持游标 | 非也。{.text-danger} | |
| **E131** | **空值支持(空值代替值)** | **部分**{.text-warning} | 一些限制适用 |
| **E141** | **基本完整性约束** | **部分**{.text-warning} | |
| E141-01 | 非空约束 | 是{.text-success} | 注: `NOT NULL` 默认情况下,表列隐含 |
| E141-02 | 非空列的唯一约束 | 非也。{.text-danger} | |
| E141-03 | 主键约束 | 非也。{.text-danger} | |
| E141-04 | 对于引用删除操作和引用更新操作,具有默认无操作的基本外键约束 | 非也。{.text-danger} | |
| E141-06 | 检查约束 | 是{.text-success} | |
| E141-07 | 列默认值 | 是{.text-success} | |
| E141-08 | 在主键上推断为非NULL | 是{.text-success} | |
| E141-10 | 可以按任何顺序指定外键中的名称 | 非也。{.text-danger} | |
| **E151** | **交易支持** | **非也。**{.text-danger} | |
| E151-01 | 提交语句 | 非也。{.text-danger} | |
| E151-02 | 回滚语句 | 非也。{.text-danger} | |
| **E152** | **基本设置事务语句** | **非也。**{.text-danger} | |
| E152-01 | SET TRANSACTION语句隔离级别SERIALIZABLE子句 | 非也。{.text-danger} | |
| E152-02 | SET TRANSACTION语句只读和读写子句 | 非也。{.text-danger} | |
| **E153** | **具有子查询的可更新查询** | **非也。**{.text-danger} | |
| **E161** | **SQL注释使用前导双减** | **是**{.text-success} | |
| **E171** | **SQLSTATE支持** | **非也。**{.text-danger} | |
| **E182** | **主机语言绑定** | **非也。**{.text-danger} | |
| **F031** | **基本架构操作** | **部分**{.text-warning} | |
| F031-01 | CREATE TABLE语句创建持久基表 | 部分{.text-warning} | 非也。 `SYSTEM VERSIONING`, `ON COMMIT`, `GLOBAL`, `LOCAL`, `PRESERVE`, `DELETE`, `REF IS`, `WITH OPTIONS`, `UNDER`, `LIKE`, `PERIOD FOR` 子句,不支持用户解析的数据类型 |
| F031-02 | 创建视图语句 | 部分{.text-warning} | 非也。 `RECURSIVE`, `CHECK`, `UNDER`, `WITH OPTIONS` 子句,不支持用户解析的数据类型 |
| F031-03 | 赠款声明 | 是{.text-success} | |
| F031-04 | ALTER TABLE语句ADD COLUMN子句 | 部分{.text-warning} | 不支持 `GENERATED` 条款和系统时间段 |
| F031-13 | DROP TABLE语句RESTRICT子句 | 非也。{.text-danger} | |
| F031-16 | DROP VIEW语句RESTRICT子句 | 非也。{.text-danger} | |
| F031-19 | REVOKE语句RESTRICT子句 | 非也。{.text-danger} | |
| **F041** | **基本连接表** | **部分**{.text-warning} | |
| F041-01 | Inner join但不一定是INNER关键字) | 是{.text-success} | |
| F041-02 | 内部关键字 | 是{.text-success} | |
| F041-03 | LEFT OUTER JOIN | 是{.text-success} | |
| F041-04 | RIGHT OUTER JOIN | 是{.text-success} | |
| F041-05 | 可以嵌套外部连接 | 是{.text-success} | |
| F041-07 | 左侧或右侧外部联接中的内部表也可用于内部联接 | 是{.text-success} | |
| F041-08 | 支持所有比较运算符(而不仅仅是=) | 非也。{.text-danger} | |
| **F051** | **基本日期和时间** | **部分**{.text-warning} | |
| F051-01 | 日期数据类型(包括对日期文字的支持) | 部分{.text-warning} | 没有文字 |
| F051-02 | 时间数据类型包括对时间文字的支持秒小数精度至少为0 | 非也。{.text-danger} | |
| F051-03 | 时间戳数据类型包括对时间戳文字的支持小数秒精度至少为0和6 | 非也。{.text-danger} | `DateTime64` 时间提供了类似的功能 |
| F051-04 | 日期、时间和时间戳数据类型的比较谓词 | 部分{.text-warning} | 只有一种数据类型可用 |
| F051-05 | Datetime类型和字符串类型之间的显式转换 | 是{.text-success} | |
| F051-06 | CURRENT\_DATE | 非也。{.text-danger} | `today()` 是相似的 |
| F051-07 | LOCALTIME | 非也。{.text-danger} | `now()` 是相似的 |
| F051-08 | LOCALTIMESTAMP | 非也。{.text-danger} | |
| **F081** | **联盟和视图除外** | **部分**{.text-warning} | |
| **F131** | **分组操作** | **部分**{.text-warning} | |
| F131-01 | WHERE、GROUP BY和HAVING子句在具有分组视图的查询中受支持 | 是{.text-success} | |
| F131-02 | 具有分组视图的查询中支持的多个表 | 是{.text-success} | |
| F131-03 | 设置具有分组视图的查询中支持的函数 | 是{.text-success} | |
| F131-04 | 具有分组依据和具有子句和分组视图的子查询 | 是{.text-success} | |
| F131-05 | 单行选择具有GROUP BY和具有子句和分组视图 | 非也。{.text-danger} | |
| **F181** | **多模块支持** | **非也。**{.text-danger} | |
| **F201** | **投函数** | **是**{.text-success} | |
| **F221** | **显式默认值** | **非也。**{.text-danger} | |
| **F261** | **案例表达式** | **是**{.text-success} | |
| F261-01 | 简单案例 | 是{.text-success} | |
| F261-02 | 检索案例 | 是{.text-success} | |
| F261-03 | NULLIF | 是{.text-success} | |
| F261-04 | COALESCE | 是{.text-success} | |
| **F311** | **架构定义语句** | **部分**{.text-warning} | |
| F311-01 | CREATE SCHEMA | 非也。{.text-danger} | |
| F311-02 | 为持久基表创建表 | 是{.text-success} | |
| F311-03 | CREATE VIEW | 是{.text-success} | |
| F311-04 | CREATE VIEW: WITH CHECK OPTION | 非也。{.text-danger} | |
| F311-05 | 赠款声明 | 是{.text-success} | |
| **F471** | **标量子查询值** | **是**{.text-success} | |
| **F481** | **扩展空谓词** | **是**{.text-success} | |
| **F812** | **基本标记** | **非也。**{.text-danger} | |
| **T321** | **基本的SQL调用例程** | **非也。**{.text-danger} | |
| T321-01 | 无重载的用户定义函数 | 非也。{.text-danger} | |
| T321-02 | 无重载的用户定义存储过程 | 非也。{.text-danger} | |
| T321-03 | 函数调用 | 非也。{.text-danger} | |
| T321-04 | 电话声明 | 非也。{.text-danger} | |
| T321-05 | 退货声明 | 非也。{.text-danger} | |
| **T631** | **在一个列表元素的谓词中** | **是**{.text-success} | |