CREATE VIEW 语句允许您为复杂的查询创建一个简洁的别名(即视图)。视图纯粹是一个逻辑构造,不包含任何底层数据。逻辑构造: 视图是基础查询的别名。基础查询可以包含连接(
JOIN)、表达式、列重命名、列别名等复杂的 SQL 特性。元数据操作: 由于视图没有物理数据,CREATE VIEW 或后续的 ALTER VIEW 操作仅修改元存储数据库中的元数据,不会影响存储系统中的任何数据文件。
平台兼容性提示 (TCHouse-X):在使用与 TCHouse-X 保留关键字相同的数据库、表、视图或列名称时,必须使用反引号 (``) 将该标识符括起来。
语法
CREATE VIEW [IF NOT EXISTS] view_name[(column_name [COMMENT 'column_comment'][, ...])][COMMENT 'view_comment']AS select_statement
语法说明
关键字/参数 | 说明 |
IF NOT EXISTS | 可选。如果视图已存在,则使用此选项可以避免抛出错误。语句会成功执行,但会发出一个警告。 |
view_name | 必需。要创建的视图的名称。 |
column_name | 可选。为视图的列指定自定义名称,也可以添加列级注释。如果省略,则使用 select_statement 结果集中的列名。 |
COMMENT 'view_comment' | 可选。为视图添加描述性注释。 |
AS select_statement | 必需。定义视图的基础查询。 |
使用说明
CREATE VIEW 语句在以下场景中提供了显著优势:1. 简化复杂查询:
将冗长、复杂的 SQL 查询(涉及多表连接、复杂表达式等)简化为一行简单的
SELECT * FROM view_name; 查询,提高可读性和维护性。应用程序只需对视图发出简单查询:
select * from view_name;select * from view_name order by c1 desc limit 10;
2. 降低维护成本(抽象层):
隐藏底层结构: 隐藏基础表和列的名称。
如果底层表名或列名发生更改,只需重新创建视图。所有使用该视图的应用程序查询仍可继续运行,无需任何修改。
3. 集中优化策略:
集中实现复杂的优化技术(如最佳的 WHERE 条件、连接顺序、连接提示等)。
应用程序只需查询视图,即可受益于这些最优策略。如果找到更优的优化方法,只需重新创建视图,所有应用程序即可即时获得性能提升。
4. 模块化和代码复用:
简化需要多次重复复杂子句(如多表连接、复杂过滤)的一整类相关查询。视图可以作为这些复杂逻辑的封装模块。
说明:
对于仅在单个查询中需要复用复杂子句的场景,可以考虑使用 WITH 子句(Common Table Expression, CTE)作为创建视图的替代方案。
示例
-- 创建一个与底层表完全相同的视图CREATE VIEW v1 AS SELECT * FROM t1;-- 创建一个仅包含底层表中特定列的视图(列级过滤)CREATE VIEW v2 AS SELECT c1, c3, c7 FROM t1;-- 创建一个包含过滤条件的视图(行级与去重过滤)CREATE VIEW v3 AS SELECT DISTINCT c1, c3, c7 FROM t1 WHERE c1 IS NOT NULL AND c5 > 0;-- 创建一个对底层表列进行重排序和重命名的视图CREATE VIEW v4 AS SELECT c4 AS last_name, c6 AS address, c2 AS birth_date FROM t1;-- 创建一个通过运行函数来转换或加工特定列的视图CREATE VIEW v5 AS SELECT c1, CAST(c3 AS STRING) c3, CONCAT(c4,c5) c5, TRIM(c6) c6, "Constant" c8 FROM t1;-- 创建一个用于隐藏复杂查询逻辑(如多表关联)的视图CREATE VIEW v6 AS SELECT t1.c1, t2.c2 FROM t1 JOIN t2 ON t1.id = t2.id;-- 创建一个包含列注释和表注释的视图CREATE VIEW v7 (c1 COMMENT 'c1 的注释', c2) COMMENT 'v7 视图的注释' AS SELECT t1.c1, t1.c2 FROM t1;