DELECT 语句中的 WHERE 子句可与 SELECT 语句中的一样复杂。它可包含通过 AND
和 OR 连接的多个条件,且它可能包含子查询。
假设您发现 stock 表的某些行包含不正确的制造商代码。
您不想更新它们,
而是想要删除它
们以便重新输入它们。您知道,与正确的那些行不一样,这些行在 manufact 表中没有相匹
GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 160 -
配的行。由于这些不正确的行在 manufact 表中没有相匹配的行,因此您可以编写下例中所
示的 DELETE 语句:
DELETE FROM stock
WHERE 0 = (SELECT COUNT(*) FROM manufact
WHERE manufact.manu_code = stock.manu_code);
该子查询对匹配的 manufact 行数进行计数;对 stock 的正确的行计数为 1,对不正确的行
计数为 0。选取不正确的行来删除。
提示: 使用复杂的条件来开发 DELETE 语句的一种方法是,先开发精确地返回要删除的行的
SELECT 语句。将它编写为 SELECT *;当它返回所期望的行集时,将SELECT * 更改为读
取 DELETE,并再执行它一次。
DELETE 语句的 WHERE 子句不可使用测试同一表的子查询。即,当您从 stock 进行删除
时,您不可在也从 stock 中选择的 WHERE 子句中使用子查询。
此规则的关键在于 FROM 子句。如果在 DELETE 语句的 FROM 子句中命名表,则该表
不可还出现在 DELECT 语句的子查询的 FROM 子句中。