ClickHouse/docs/zh/sql-reference/ansi.md
2020-10-13 20:23:29 +03:00

181 lines
45 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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} | |