Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (A-D)

 

DELETE 语句

此语句用于从数据库中删除行。

语法
DELETE [ row-limitation ] 
[ FROM ] [ owner.]table-expression
[ FROM table-list [,...] ]
[ WHERE search-condition ]
[ ORDER BY { expression | integer } [ ASC | DESC ], ... ]
[ OPTION( query-hint, ... ) ]
table-list : 
table-name [,...]  
table-name : 
[ owner.]base-table-name [ [ AS ] correlation-name ]
| [ owner.]view-name [ [ AS ] correlation-name ]
| derived-table
derived-table : 
( select-statement ) 
[ AS ] correlation-name [ ( column-name [,... ] ) ]
row-limitation :
  FIRST | TOP n [ START AT m ]
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 (indicator allowed), string, identifier, or number
参数
  • row-limitation 子句   行限制子句允许您只返回满足 WHERE 子句的行的子集。TOP 和 START AT 值可以是主机变量、整型常量或整型变量。TOP 值必须大于等于 0。START AT 值必须大于 0。通常,在指定这些子句时也指定 ORDER BY 子句,这样可以用一种有意义的方式对这些行进行排序。请参见显式限制查询返回的行数

  • FROM 子句   FROM 子句指明要从中删除行的表。DELETE 语句中的第二个 FROM 子句将基于连接限定要从指定表中删除的行。如果存在第二个 FROM 子句,则 WHERE 子句限定这第二个 FROM 子句的行。

    FROM table-expression 子句允许根据连接来进行删除。table-expression 可以包含任意复杂表的表达式,如 KEY 和 NATURAL 连接。有关 FROM 子句和连接的完整说明,请参见FROM 子句

    下面的语句阐释 DELETE 语句(有两个使用相关名的 FROM 子句)的表名中潜在的不明确性:
    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 子句的各行。

  • ORDER BY 子句   指定行的排序顺序。通常情况下,行以什么顺序更新并不重要。但与 FIRST 或 TOP 子句联用时,顺序就非常重要。

    不能在 ORDER BY 子句中使用列序号。

    ORDER BY 列表中的每一项均可标记为 ASC 以按升序排序(缺省值),或标记为 DESC 以按降序排序。

  • OPTION 子句   此子句用于指定执行语句时的提示。支持以下提示:

    • MATERIALIZED VIEW OPTIMIZATION option-value
    • FORCE OPTIMIZATION
    • FORCE NO OPTIMIZATION
    • option-name = option-value

    有关这些选项的说明,请参见SELECT 语句的 OPTIONS 子句。

注释

使用 DELETE 语句删除大量数据会导致对列统计信息的更新。

如果定义视图的 SELECT 语句在 FROM 子句中只有一个表并且不包含 GROUP BY 子句、集合函数或不涉及 UNION 子句,则可以在视图上使用 DELETE 语句。

如果定义视图的查询说明是可更新的,可对视图执行 DELETE。有关识别固有不可更新的 视图的详细信息,请参见使用常规视图

权限

必须有表的 DELETE 权限。

副作用

无。

另请参见
标准和兼容性
  • SQL/2003   核心特性。在 FROM 子句中使用一个以上的表是服务商扩充。

示例

从 FinancialData 表中删除 2000 年之前的所有数据。

DELETE
FROM FinancialData
WHERE Year < 2000;

从 SalesOrderItems 表中删除发货日期早于 2001 年 1 月 1 日且其地区为 Central 的前 10 张订单。

DELETE TOP 10
FROM SalesOrderItems
FROM SalesOrders
WHERE SalesOrderItems.ID = SalesOrders.ID
  and ShipDate < '2001-01-01' and Region ='Central'
ORDER BY ShipDate ASC;

以隔离级别 3 执行此语句,将部门 600 从数据库中删除。

DELETE FROM Departments
WHERE DepartmentID = 600
OPTION( isolation_level = 3 );