
DROP TABLE 语句和 DELETE 语句
DROP TABLE 语句可以将表完全删除。
DELETE 语句会留下表(容器),而删除表中的全部数据。
DROP TABLE 语句会完全删除整张表,因此删除之后再想插入数据,就必须使用 CREATE TABLE 语句重新创建一张表。
DELETE 语句在删除数据(行)的同时会保留数据表,因此可以通过 INSERT 语句再次向表中插入数据。
DELETE 语句的基本语法
语法4-2 保留数据表,仅删除全部数据行的 DELETE 语句DELETE FROM < 表名 >;
执行使用该基本语法的 DELETE 语句,就可以删除指定的表中的全部数据行了。因此,想要删除 Product 表中全部数据行,就可以参照代码清单 4-13 来书写 DELETE 语句。
代码清单4-13 清空 Product 表DELETE FROM Product;
指定删除对象的 DELETE 语句(搜索型 DELETE )
想要删除部分数据行时,可以像 SELECT 语句那样使用 WHERE子句指定删除条件。这种指定了删除对象的 DELETE 语句称为搜索型DELETE。
语法4-3 删除部分数据行的搜索型 DELETEDELETE FROM < 表名 >WHERE < 条件 >
下面让我们以 Product (商品)表为例,来具体研究一下如何进行数据删除(表 4-1)。

假设我们要删除销售单价( sale _ price )大于等于 4000 日元的数据(代码清单 4-14)。上述表中满足该条件的是“运动 T 恤”和“高压锅”。
代码清单4-14 删除销售单价( sale_price )大于等于4000日元的数据DELETE FROM ProductWHERE sale_price >= 4000;

法则
可以通过 WHERE 子句指定对象条件来删除部分数据。
与 SELECT 语句不同的是, DELETE 语句中不能使用 GROUP BY 、HAVING 和 ORDER BY 三类子句,而只能使用 WHERE 子句。原因很简单,GROUP BY 和 HAVING 是从表中选取数据时用来改变抽取数据形式的,而 ORDER BY 是用来指定取得结果显示顺序的。因此,在删除表中数据时它们都起不到什么作用。
删除和舍弃
标准 SQL 中用来从表中删除数据的只有 DELETE 语句。但是,很多数据库产品中还存在另外一种被称为 TRUNCATE 的语句。这些产品主要包括 Oracle、SQLServer、PostgreSQL、MySQL 和 DB2。
TRUNCATE 是舍弃的意思,具体的使用方法如下所示。
语法4-A 只能删除表中全部数据的 TRUNCATE 语句TRUNCATE < 表名 >;
与 DELETE 不同的是, TRUNCATE 只能删除表中的全部数据,而不能通过WHERE 子句指定条件来删除部分数据。也正是因为它不能具体地控制删除对象,所以其处理速度比 DELETE 要快得多。实际上, DELETE 语句在 DML 语句中也属于处理时间比较长的,因此需要删除全部数据行时,使用 TRUNCATE 可以缩短执行时间。
但是,产品不同需要注意的地方也不尽相同。例如在 Oracle 中,把 TRUNCATE定义为 DDL,而不是 DML 。使用 TRUNCATE 时,多加注意。便利的工具往往还是会存在一些不足之处的。
总结:
如果想将整个表全部删除,可以使用 DROP TABLE 语句,如果只想删除表中全部数据,需使用 DELETE 语句。
如果想删除部分数据行,只需在 WHERE 子句中书写对象数据的条件即可。通过 WHERE 子句指定删除对象的 DELETE 语句称为搜索型 DELETE 语句。
<END>




