南大通用GBase8s 常用SQL语句(109)

视图定义中有效的 SELECT 语句的子集

视图定义中支持大多数 SELECT 语句语法,但有一些例外。

您不能在临时表上创建视图。SELECT 语句的 FROM 子集不可以包括临时表的名称。

CREATE VIEW 语句中由 SELECT 语句引用的表对象可以是永久数据库表、视图或派生的表。该查询可以引用单独的表对象,或连接两个或多个表对象。这些表可以是当前数据库中的表,可以是本地数据库服务器的其它数据库中的表,或者远程服务器实例的数据库中的表。SELECT 语句可以使用用不相关表或相关表的引用在 FROM 语句中定义派生表。这些派生表定义可以包含 LATERAL 关键字和横向表和列引用。

如果取消用户对表的 Select 特权,而在某条定义视图(该视图为同一个用户所拥有)的 SELECT 语句中引用了该表,则此视图会被删除,除非它还包含来自其它数据库中的表的列。

您无法在驻留在远程数据库中的类型表(包括作为表层次结构一部分的任何表)上创建视图。

请勿在 Projection 子句的 Select 列表中使用显示标签。Projection 子句中的显示标签会被解释为列名称。

Hardcoded 值不应在视图定义中使用,但只能在查询视图的后续 SELECT 语句的 WHERE 子句中使用。如果视图中的值不是 hardcoded ,则查询优化器可以始终排除这些文字值,并且可以在更短的时间内完成查询。但是如果相同的值在视图中被 hardcoded ,则查询优化器仍然必须评估每个文字值。

CREATE VIEW 中的 SELECT 语句不包括 SKIP 、FIRST 或 LIMIT 关键字或 INTO TEMP 子句。有关 SELECT 语句语法和用法的完整信息,请参阅 SELECT 语句 。

联合视图 

一个在其 SELECT 语句中包含 UNION 或 UNION ALL 操作符的视图称为联合视图。某些限制应用于联合视图:

  1. 如果 CREATE VIEW 语句定义了一个联合视图,或者包含 INTERSECT 、MINUS 或 EXCEPT 集合运算符,则您不能在 CREATE VIEW 语句中指定 WITH CHECK OPTION 关键字。
  2. 在独立的 SELECT 语句中应用于 UNION 或 UNION ALL 操作的所有限制,也应用于联合视图的 SELECT 语句中的 UNION 和 UNION ALL 操作。
  3. 同样,在独立的 SELECT 语句中应用于 INTERSECT 、MINUS 或 EXCEPT 集合运算符,也应用于定义视图的组合 SELECT 语句中。

关于这些限制的列表,请参阅 对组合的 SELECT 的限制。关于定义联合视图的 CREATE VIEW 语句的示例,请参阅命名视图列。

指定视图列

column 列表中指定的列的数目必须与定义视图的 SELECT 语句所返回的列数一致。如果不指定列名称,则视图继承底层表的列名称。在下面的示例中,视图 herostock 拥有的列名称与 SELECT 语句的 Projection 子句中的列名称相同:

CREATE VIEW herostock AS

   SELECT stock_num, description, unit_price, unit, unit_descr

         FROM stock WHERE manu_code = 'HRO';

在本版本数据库中,当 SELECT 语句中包含表达式时,创建视图也无需指定列名称。例如,在以下示例中,SELECT 语句的投影列表包含一个聚集表达式:

CREATE VIEW newview  AS

SELECT sum(col1), col2 FROM tab1;

该语句创建视图成功,其视图的字段名称和顺序为 SELECT 语句投影列名和顺序。

当投影列列名是纯数字列名或纯数字字符串时,用户必须将 DELIMIDENT 环境变量设置为 y,操作才能成功。

例如,由于下述示例的 SELECT 语句中包含纯数字列名,所以在执行此语句前,必须将 DELIMIDENT 环境变量设置为 y:

CREATE VIEW newview2 AS

SELECT 1101,sum(col1), col2 FROM tab1;

上述语句创建的视图 newiew2 具有三列:1101col1 和 col2

有关 DELIMIDENT 环境变量的详细信息,请参阅 GBase 8s SQL 参考:指南

当 SELECT 语句包括 UNION 操作符并且 SELECT 语句中相应列的名称不相同时,创建视图时也可以不指定视图的列名。最终的视图的列名以第一个 SELECT 语句的投影列名为准。例如:

CREATE VIEW newview3  AS

SELECT 1101, ‘tab1’as tabname FROM tab1

UNION

SELECT 1102, ‘tab2’as tabname FROM tab2;

该语句创建的视图 newiew3 具有两列:1101、tabname。

但是,在以下环境中必须指定至少一个列名:

  1. 您还必须指定列名称,以防选择的列含有不带表限定符的重复的列名称。例如,如果 orders.order_num 和 items.order_num 都出现在 SELECT 语句中,则 CREATE VIEW 语句必须提供两个分开的列名以标记它们:

CREATE VIEW someorders (custnum,ocustnum,newprice) AS

         SELECT orders.order_num,items.order_num,

                items.total_price*1.5

                FROM orders, items

          WHERE orders.order_num = items.order_num

                AND items.total_price > 100.00;

此处 custnum 和 ocustnum 替换两个相同的列名称。

在 SELECT 语句中使用视图

您可以定义一个其列基于其它视图的视图,但必须遵守对创建视图的限制,在 GBase 8s 数据库设计和实现指南 中对这些限制进行了讨论。

WITH CHECK OPTION 关键字

WITH CHECK OPTION 关键字指示数据库服务器确保通过视图对基础表所作的所有修改均满足视图的定义。

下面的示例创建一个名为 palo_alto 的视图,它使用城市 Palo Alto 中的顾客的 customer 表中的所有信息。由于指定了 WITH CHECK OPTIO 关键字,所以数据库服务器会检查通过 palo_alto 对 customer 表所做的任何修改。

CREATE VIEW palo_alto AS

        SELECT * FROM customer WHERE city = 'Palo Alto'

        WITH CHECK OPTION

您可以在视图中插入一个不满足视图条件的行(即通过视图不显示的行)。也可以更新视图的行,使其不再满足视图的统计。例如,如果视图是不使用 WITH CHECK OPTION 关键字创建的,那么您可以通过城市为 Los Altos 的视图插入一行,或者通过将城市从 Palo Alto 更改为 Los Altos。

要防止这样的插入和更新,可以在创建视图时添加 WITH CHECK OPTION 关键字。这些关键字要求数据库服务器测试每个插入的或更新的行以确保它满足由视图的 WHERE 子句设置的条件。如果行不满足这些条件,则数据库服务器拒绝操作并以出错形式表明。

即使视图是用 WITH CHECK OPTION 关键字创建的,但您也可以通过视图执行插入和更新操作以更改不是视图定义一部分的列。如果某列未出现在定义视图的 SELECT 语句的 WHERE 子句中,则该列不是视图定义的一部分。

如果 CREATE VIEW 语句中包含 WITH CHECK OPTION 关键字,其中 UNION 、INTERSECT 、MINUS 或 EXCEPT 集合运算符在视图定义中组合两个查询,则 CREATE VIEW 语句失败并显示错误 -940 。

通过视图更新

如果视图是构建在一个单独的表上,则在定义该视图的 SELECT 语句不包含任何以下元素的情况下,则该视图是可更新的

  1. 投影列表中是聚集值的列
  2. 投影列表中使用 UNIQUE 或 DISTINCT 关键字
  3. GROUP BY 子句
  4. UNION 操作符
  5. 选择计算或文字值的查询

您可以从一个单个表中选择计算值的视图执行 DELETE 操作,但是 INSERT 和 UPDATE 操作对这样的视图无效。

在可更新的视图中,可以通过将基础表中的值插入视图来更新这些值。然而,如果视图构建在列有派生值的表上,则该列不能够通过该视图更新。但是,可以更新视图中的其它列。

有关使用 INSTEAD OF 触发器更新基于多个表的视图,或者更新其中包括含有聚集值或其它计算值的列的视图的信息,另请参阅更新视图。

重要: 您无法通过使用 WITH CHECK OPTION 关键字创建的视图更新或插入远程表中的行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 南大通用gbase培训是南京大学信息管理学院推出的一项培训项目。该培训旨在为学生提供更广阔的就业机会和实践经验,同时提高他们在数据库领域的专业能力。 在南大通用gbase培训中,学生将学习关于gbase数据库的基本知识和技能。他们将了解到gbase在大数据领域中的应用以及其在企业级数据库管理中的重要性。通过课堂学习和实践训练,学生将熟悉gbase的架构、数据处理和查询等方面,掌握gbase数据库的使用方法和管理技巧。 南大通用gbase培训强调实践应用,学生将有机会亲自操作gbase数据库,并参与一些实际项目的开发和管理。这将帮助学生将所学知识应用到实际工作中,增强他们的实践能力和团队合作能力。 此外,南大通用gbase培训还为学生提供了与企业合作的机会。他们将有机会参观和交流一些知名企业的数据库管理团队,了解他们在数据库方面的需求和挑战。这将为学生日后的职业发展奠定基础,提高他们在数据库领域的竞争能力。 综上所述,南大通用gbase培训为学生提供了学习和实践gbase数据库的机会。通过这个培训项目,学生可以提高他们在数据库领域的专业能力,并增加就业机会。这是一个对于想要从事数据库管理和开发工作的学生来说非常有价值的培训项目。 ### 回答2: 南大通用gbase培训是指南京大学与浪潮集团共同合作开展的一项培训计划,旨在培养学员掌握使用gbase数据库技术的能力。gbase数据库是由浪潮集团自主研发的一种高性能、高可用的关系型数据库管理系统。 这项培训计划主要面向计算机相关专业的学生和从业人员,通过系统的学习和实践,使学员全面了解gbase数据库技术的原理和应用。培训内容包括数据库基本概念、数据模型设计、SQL语言基础、数据库管理、数据备份与恢复等方面的知识。学员还将进行实际案例分析和实验操作,提升在实际工作中使用gbase数据库的能力。 南大通用gbase培训具有以下几个特点:一是培训内容丰富全面,既有理论知识的讲解,也有实际案例分析和实验操作,使学员既能理解数据库基本原理,又能掌握实际应用技能。二是培训由南京大学计算机学院的教授和浪潮集团的专业工程师共同组成的师资团队进行授课,确保培训质量和专业性。三是培训期间还提供社交交流和团队合作的机会,促进学员之间的互动和合作,增强学习效果。 通过参加南大通用gbase培训,学员可以获得国内领先的数据库技术培训,提升在数据库领域的竞争力和求职竞争力。同时,这项培训也有助于加深学员对数据库技术的理解,提高其在实际工作中的应用能力,为个人职业发展打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值