从数据库删除行。
DELETE [ row-limitation ] [ FROM ] [ owner.]table-or-view [ [ AS ] correlation-name ] [ WHERE search-condition ] [ ORDER BY { expression | integer } [ ASC | DESC ], ... ] [ OPTION( query-hint, ... ) ]
DELETE [ row-limitation ] [ FROM ] [ owner.]table-or-view [ [ AS ] correlation-name ] [ FROM table-expression ] [ WHERE search-condition ] [ ORDER BY { expression | integer } [ ASC | DESC ], ... ] [ OPTION( query-hint, ... ) ]
table-or-view : identifier
row-limitation : FIRST | TOP { ALL | limit-expression } [ START AT startat-expression ] limit-expression : simple-expression startat-expression : simple-expression simple-expression : integer | variable | ( simple-expression ) | ( simple-expression { + | - | * } simple-expression )
query-hint : MATERIALIZED VIEW OPTIMIZATION option-value | FORCE OPTIMIZATION | FORCE NO OPTIMIZATION | option-name = option-value
table-expression:包含连接的完整的表表达式。请参见FROM 子句。
option-name:identifier
option-value: hostvar(允许使用的指示符) | string | identifier | number
row-limitation 子句 行限制子句允许将删除的行限制为仅是满足 WHERE 子句的行的子集。TOP 和 START AT 参数可以是主机变量的简单算术表达式、整型常量或整型变量。TOP 参数的计算结果必须是一个大于等于 0 的值。START AT 参数的计算结果必须是一个大于 0 的值。在指定这些子句时,还必须指定一个 ORDER BY 子句,以按照一种有意义的方式对这些行进行排序。
FROM 子句 FROM 子句指明要从中删除行的表。在语法 2 中,DELETE 语句中的第二个 FROM 子句基于与其它表的连接确定将从指定表中删除的行。table-expression 可以包含任意复杂表的表达式,如派生表、KEY 和 NATURAL 连接。
以下示例说明使用语法 2 时如何匹配相关名。对于以下语句:
DELETE FROM table_1 FROM table_1 AS alias_1, table_2 AS alias_2 WHERE ... |
表 table_1 在第一个 FROM 子句中没有相关名标识,而在第二个 FROM 子句中具有相关名标识。在本例中,第一个子句中的 table_1 在第二个子句中用 alias_1 标识—此语句中只有一个 table_1 实例。这是一般规则的特例,即一个表在同一语句中的两个实例,一次用相关名标识另一次没有相关名。
但以下示例中,第二个 FROM 子句中有两个 table_1 的实例。此语句因语法错误而失败,因为不明确第二个 FROM 子句中的哪个 table_1 实例与第一个 FROM 子句中的第一个 table_1 实例匹配。
DELETE FROM table_1 FROM table_1 AS alias_1, table_1 AS alias_2 WHERE ... |
WHERE 子句 DELETE 语句将删除满足 WHERE 子句中的条件的所有行。如果没有指定 WHERE 子句,则删除指定表中的所有行。如果存在第二个 FROM 子句,则 WHERE 子句可限定第二个 FROM 子句的 table-expression 的各行。
ORDER BY 子句 指定要删除行的排序顺序。通常情况下,行以什么顺序更新并不重要。但是,使用 FIRST 或 TOP 子句时,顺序非常重要。
不能在 ORDER BY 子句中使用列序号。
ORDER BY 列表中的每一项均可标记为 ASC 以按升序排序(缺省值),或标记为 DESC 以按降序排序。
OPTION 子句 此子句用于指定执行语句时的提示。支持以下提示:
OPTION( isolation_level = ... )
] 说明优先于指定查询隔离级别的所有其它方法。
使用 DELETE 语句删除大量数据会导致对列统计信息的更新。
要删除表中的所有行,可考虑使用更有效的 TRUNCATE TABLE 语句。
如果定义视图的查询说明是可更新的,可对视图执行 DELETE 操作。如果定义视图的 SELECT 语句在 FROM 子句中只有一个表并且不包含 DISTINCT 子句、GROUP BY 子句、WINDOW 子句、集合函数或不涉及集合运算符(如 UNION 或 INTERSECT),则视图是可更新的。
您必须是表所有者,或者对表具有 SELECT 和 DELETE 特权。
无。
SQL/2008 语法 1 是 SQL/2008 标准的核心功能,而语法 2 是 Transact-SQL 服务商扩充。语法 1 的以下功能为服务商扩充:
可选 FROM 关键字。
row-limitation 子句和 ORDER BY 子句。
OPTION 子句。
从 FinancialData 表中删除 2000 年之前的所有数据。
DELETE FROM GROUPO.FinancialData WHERE Year < 2000; |
从 SalesOrderItems 表中删除发货日期早于 2001 年 1 月 1 日且其地区为 Central 的前 10 张订单。
DELETE TOP 10 FROM GROUPO.SalesOrderItems FROM GROUPO.SalesOrders WHERE SalesOrderItems.ID = SalesOrders.ID and ShipDate < '2001-01-01' and Region ='Central' ORDER BY ShipDate ASC; |
以隔离级别 3 执行此语句,将部门 600 从数据库中删除。
DELETE FROM GROUPO.Departments WHERE DepartmentID = 600 OPTION( isolation_level = 3 ); |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |