TDSQL Boundless 视图

这篇档介绍如何在 TDSQL Boundless 数据库中使用视图。视图是基于 SQL 查询定义的虚拟表,它本身不存储数据,而是在每次查询时动态执行底层的 SQL 语句生成结果。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

视图的主要用途:

·简化复杂查询:将多表连接、聚合等复杂查询封装为虚拟表,后续使用时像查询普通表一样简洁。

·数据安全:只向用户暴露特定字段,隐藏底层敏感数据。

·逻辑复用:将通用的查询逻辑定义为视图,避免在多处重复编写相同的 SQL。

一、创建视图

使用 CREATE VIEW 语句创建视图。

创建一个客户订单汇总视图,包含每个客户的订单数量和总金额:

CREATE VIEW customer_order_summary ASSELECT c.c_custkey, c.c_name, c.c_mktsegment, COUNT(o.o_orderkey) AS order_count, COALESCE(SUM(o.o_totalprice), 0) AS total_spentFROM customer cLEFT JOIN orders o ON c.c_custkey = o.o_custkeyGROUP BY c.c_custkey, c.c_name, c.c_mktsegment;

创建一个区域供应商视图,展示各区域的供应商信息:

CREATE VIEW regional_suppliers ASSELECT r.r_name AS region_name, n.n_name AS nation_name, s.s_suppkey, s.s_name AS supplier_name, s.s_phoneFROM region rINNER JOIN nation n ON r.r_regionkey = n.n_regionkeyINNER JOIN supplier s ON n.n_nationkey = s.s_nationkey;

注意:创建视图时,视图名称不能与已有的表或视图重名。

二、查询视图

视图创建完成后,可以像查询普通表一样使用 SELECT 语句查询视图。

查询订单数量最多的前10名客户:

SELECT c_name, c_mktsegment, order_count, total_spentFROM customer_order_summaryORDER BY order_count DESCLIMIT 10;

在视图上添加过滤条件:

SELECT c_name, order_count, total_spentFROM customer_order_summaryWHERE c_mktsegment = 'BUILDING' AND order_count > 10ORDER BY total_spent DESC;

视图与其他表进行连接:

SELECT rs.region_name, rs.supplier_name, ps.ps_partkey, ps.ps_supplycostFROM regional_suppliers rsINNER JOIN partsupp ps ON rs.s_suppkey = ps.ps_suppkeyWHERE rs.region_name = 'ASIA'ORDER BY ps.ps_supplycostLIMIT 20;

TDSQL Boundless 在查询视图时,会在内部将视图展开为创建时定义的原始 SQL 语句执行。例如查询 customer_order_summary 时,实际执行的是其底层的 SELECT … FROM customer LEFT JOIN orders … 语句加上外层的过滤和排序条件。

三、更新视图

当需要修改视图的定义时,可以使用 CREATE OR REPLACE VIEW 语句,无需先删除再重建。

为客户订单汇总视图增加平均订单金额字段:

CREATE OR REPLACE VIEW customer_order_summary ASSELECT c.c_custkey, c.c_name, c.c_mktsegment, COUNT(o.o_orderkey) AS order_count, COALESCE(SUM(o.o_totalprice), 0) AS total_spent, COALESCE(AVG(o.o_totalprice), 0) AS avg_order_amountFROM customer cLEFT JOIN orders o ON c.c_custkey = o.o_custkeyGROUP BY c.c_custkey, c.c_name, c.c_mktsegment;

也可以通过先删除再创建的方式更新视图:

DROP VIEW IF EXISTS customer_order_summary;CREATE VIEW customer_order_summary ASSELECT …;

四、使用 SHOW CREATE VIEW

查看视图的完整创建语句:

SHOW CREATE VIEW customer_order_summary\\G

五、查询 INFORMATION_SCHEMA

通过系统表 information_schema.views 查看视图的元数据信息:

SELECT TABLE_NAME, VIEW_DEFINITION, CHECK_OPTION, IS_UPDATABLEFROM information_schema.views WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'customer_order_summary'\\G

六、删除视图

使用 DROP VIEW 语句删除视图。建议使用 IF EXISTS 避免视图不存在时报错。

DROP VIEW IF EXISTS customer_order_summary;

一次删除多个视图:

DROP VIEW IF EXISTS customer_order_summary, regional_suppliers;

七、局限性

在 TDSQL Boundless 中使用视图时,需要注意以下限制:

·不支持物化视图 — 仅支持普通视图,不预存结果。

·只读视图 — 不支持 UPDATE/INSERT/DELETE/TRUNCATE 写入操作。

·DDL 限制 — 仅支持 DROP VIEW/TABLE,不支持 ALTER VIEW。

赞 (0)
上一篇 4天前
下一篇 4天前