DELETE¶
从表中移除行。您可以使用 WHERE 子句来指定应移除哪些行。如果需要使用子查询或附加表来标识要移除的行,请在 USING 子句中指定子查询或表。
重要
与 TRUNCATE TABLE 不同,此命令 不会 删除外部文件加载历史记录。如果从暂存文件中删除加载到表中的行,则无法再次从该文件加载数据,除非修改该文件并再次暂存。
语法¶
必填参数¶
table_name指定要从中移除行的表。
可选参数¶
USING additional_table_or_query [, ... ]如果需要在 WHERE 子句中引用其他表来帮助确定要移除的行,请在 USING 子句中指定这些表的名称。还可以使用 USING 子句指定标识要移除的行的子查询。
如果指定子查询,则将子查询放在括号中。
如果指定多个表或查询,请使用逗号分隔它们。
WHERE condition指定用于选择要移除的行的条件。如果省略此参数,则将移除表中的所有行,但保留该表。
使用说明¶
当基于 JOIN(通过指定
USING子句)进行删除时,目标表中的一行可能会与USING表中的多行联接。如果任何联接组合都满足 DELETE 条件,则删除目标行。例如,给定带有列
(k number, v number)的表tab1和tab2:如果运行以下查询,
tab1中的行将与tab2中的两行相联接:由于至少有一个联接对满足条件,因此将删除该行。因此,语句完成后,
tab1为空。
示例¶
假设租赁自行车的组织使用下表:
名为 leased_bicycles 的表列出了已出租的自行车。
名为 returned_bicycles 的表列出了最近归还的自行车。这些自行车需要从租赁自行车的表中移除。
创建表:
加载数据:
此示例显示如何使用 WHERE 子句删除指定的行。此示例按 bicycle_ID 删除:
删除后显示数据:
此示例显示如何使用 USING 子句指定要删除的行。此 USING 子句指定 returned_bicycles 表,该表列出了要从 leased_bicycles 表中删除的自行车的 IDs。WHERE 子句将 leased_bicycles 表联接到 returned_bicycles 表,并删除 leased_bicycles 中与 returned_bicycles 中相应行具有相同 bicycle_ID 的行。
(为了避免将来在不必要或不合适时再次尝试移除相同的行,returned_bicycles 表将作为同一事务的一部分进行截断。)
删除后显示数据:
现在假设另一辆自行车归还了:
以下查询显示了一个 USING 子句,该子句包含一个子查询(而不是一个表),用于指定要从 leased_bicycles 表中移除哪些 bicycle_IDs:
删除后显示数据: