GBase8s数据库使用 WHERE 关键字指定条件

使用 WHERE condition 子句指定您要从表中删除的行。WHERE 关键字之后的 condition 等同

于 SELECT 或 UPDATE 语句中的 condition 。例如,下一个语句删除了顺序号小于 1034 的

items 表的所有行:

DELETE FROM items WHERE order_num < 1034;

在 DB-Access 中,如果包含了选择表中所有行的 WHERE 子句,则 DB-Access 不会给出任何提

示,并且删除所有行。

如果正在从表层次结构中的超级表删除,则 WHERE 子句的子查询无法引用子表。

当正从子表删除的时候,WHERE 子句中的子查询只可以在 SELECT … FROM ONLY

(supertable)… 语法中引用超级表。

DELETE 的 WHERE 子句中的子查询

DELETE 语句的 WHERE 子句中的子查询 FROM 子句可以将 DELETE 语句的 FORM 子句指定

的同一个表或视图指定为数据源。仅当所有以下条件为真时,才支持带有引用相同表对象的子查询

的 DELETE 操作:

该子查询要么返回一行,要么具有不相关列引用。

该子查询在 DELETE 语句的 WHERE 子句中,使用 Condition with Subquery 语法。

任何子查询中的 SPL 例程不能引用正在修改的表。

除非以上这些条件都满足,否则包含引用同 DELETE 语句修改的相同的表或视图子查询的

DELETE 语句返回错误 -360。

以下示例从 orders 表中删除其中 paid_date 列值满足 WHERE 子句中条件的行的子集。WHERE 子

句通过将 IN 运算符应用于子查询返回的行来指定要删除的行,该子查询只选择 orders 表中的

行,其中 paid_date 值早于当前日期:

DELETE FROM orders WHERE paid_date IN (SELECT paid_date FROM orders WHERE paid_date < CURRENT );

该子查询仅包含不相关的列引用,因为其唯一引用的列位于 FORM 子句中指定的表中。上面列出

的要求有效,因为子查询的数据源与外部 UPDATE 语句的 FROM 子句指定的顺序表相同。上一

个示例说明了 GBase 8s 支持 DELETE 语句的 WHERE 子句中不相关子查询。而不是如何写短

SQL 语句。下一示例使用更简单的语法实现了相同的结果:

DELETE orders WHERE paid_date < CURRENT;

以下示例从 stock 表中删除具有最大 unit_price 值的行(或多行)。WHERE 子句通过将等于运

算符应用于子查询的结果来确定哪个 unit_price 值最大,子查询调用 unit_price 列值的内置

MAX 聚合函数:

DELETE FROM stock WHERE unit_price =

(SELECT MAX(unit_price) FROM stock );

如果作为修改相同表的 DELETE 语句的 WHERE 子句中的子查询的数据源的表上定义了已启用的

Select 触发器,则在 DELETE 语句中执行该子查询不会激活触发器。

DELETE 语句中的子查询可以包含 UNION 或 UNION ALL 运算符。

如果外部 DELETE 语句修改表层次结构中的类型表, GBase 8s 支持在 DELETE 的 WHERE 子句中

使用有效子查询的所有以下操作:

从带有(SELECT from parent table )子查询的父表中 DELETE

从带有(SELECT from child table )子查询的父表中 DELETE

从带有(SELECT from parent table )子查询的子表中 DELETE

从带有(SELECT from child table)子查询的子表中 DELETE 。

请参阅 子查询的条件主题以获取有关 DELETE 语句的 WHERE 子句中将多行返回为谓词的子查

询的语法的更多信息。

你可能感兴趣的:(gbase,数据库,sql,database)