SQL数据的删除(DELETE语句的使用方法)

目录
- 一、DROP TABLE 语句和 DELETE 语句
- 二、DELETE 语句的基本语法
- 三、指定删除对象的 DELETE 语句(搜索型 DELETE)
- 请参阅
学习重点
如果想将整个表全部删除,可以使用
DROP TABLE语句,如果只想删除表中全部数据,需使用DELETE语句。如果想删除部分数据行,只需在
WHERE子句中书写对象数据的条件即可。通过WHERE子句指定删除对象的DELETE语句称为搜索型DELETE语句。
一、DROP TABLE 语句和 DELETE 语句
上一篇我们学习了插入数据的方法,本文我们来学习如何删除数据。删除数据的方法大体可以分为以下两种。
① DROP TABLE 语句可以将表完全删除
② DELETE 语句会留下表(容器),而删除表中的全部数据
KEYWORD
DROP TABLE语句
DELETE语句
① 中的 DROP TABLE 语句我们已经在 表的删除和更新 中学过了,此处再简单回顾一下。DROP TABLE 语句会完全删除整张表,因此删除之后再想插入数据,就必须使用 CREATE TABLE 语句重新创建一张表。
反之,② 中的 DELETE 语句在删除数据(行)的同时会保留数据表,因此可以通过 INSERT 语句再次向表中插入数据。
本文所要介绍的删除数据,指的就是只删除数据的 DELETE 语句。
此外,不管使用哪种方法,删除数据时都要慎重,一旦误删,想要恢复数据就会变得十分困难。
二、DELETE 语句的基本语法
DELETE 语句的基本语法如下所示,十分简单。
语法 2 保留数据表,仅删除全部数据行的 DELETE 语句
DELETE FROM <表名>;执行使用该基本语法的 DELETE 语句,就可以删除指定的表中的全部数据行了。因此,想要删除 Product 表中全部数据行,就可以参照代码清单 13 来书写 DELETE 语句。
代码清单 13 清空 Product 表
DELETE FROM Product;如果语句中忘了写 FROM,而是写成了“DELETE <表名>”,或者写了多余的列名,都会出错,无法正常执行,请大家特别注意。
前者无法正常执行的原因是删除对象不是表,而是表中的数据行(记录)。这样想的话就很容易理解了吧 [1]。
后者错误的原因也是如此。因为 DELETE 语句的对象是行而不是列,所以 DELETE 语句无法只删除部分列的数据。因此,在 DELETE 语句中指定列名是错误的。当然,使用星号的写法(DELETE * FROM Product ;)也是不对的,同样会出错。
法则 4
DELETE语句的删除对象并不是表或者列,而是记录(行)。
三、指定删除对象的 DELETE 语句(搜索型 DELETE)
想要删除部分数据行时,可以像 SELECT 语句那样使用 WHERE 子句指定删除条件。这种指定了删除对象的 DELETE 语句称为搜索型 DELETE[2]。
KEYWORD
- 搜索型
DELETE
搜索型 DELETE 的语法如下所示。
语法 3 删除部分数据行的搜索型 DELETE
DELETE FROM <表名> WHERE <条件>;
下面让我们以 Product(商品)表为例,来具体研究一下如何进行数据删除(表 1)。
表 1 Product 表
product_id
(商品编号)product_name
(商品名称)product_type
(商品种类)sale_price
(销售单价)purchase_price
(进货单价)regist_date
(登记日期)
0001
T 恤衫
衣服
1000
500
2009-09-20
0002
打孔器
办公用品
500
320
2009-09-11
0003
运动 T 恤
衣服
4000
2800
0004
菜刀
厨房用具
3000
2800
2009-09-20
0005
高压锅
厨房用具
6800
5000
2009-01-15
0006
叉子
厨房用具
500
2009-09-20
0007
擦菜板
厨房用具
880
790
2008-04-28
0008
圆珠笔
办公用品
100
2009-11-11
假设我们要删除销售单价(sale_price)大于等于 4000 日元的数据(代码清单 14)。上述表中满足该条件的是“运动 T 恤”和“高压锅”。
代码清单 14 删除销售单价(sale_price)大于等于 4000 日元的数据
DELETE FROM Product WHERE sale_price >= 4000;
WHERE 子句的书写方式与此前介绍的 SELECT 语句完全一样。
通过使用 SELECT 语句确认,表中的数据被删除了 2 行,只剩下 6 行。
-- 确认删除后的结果SELECT * FROM Product;
执行结果
product_id | product_name | product_type | sale_price | purchase_price | regist_date-----------+--------------+--------------+------------+----------------+-----------
0001 | T恤衫 | 衣服 | 1000 | 500 | 2009-09-20
0002 | 打孔器 | 办公用品 | 500 | 320 | 2009-09-11
0004 | 菜刀 | 厨房用具 | 3000 | 2800 | 2009-09-20
0006 | 叉子 | 厨房用具 | 500 | | 2009-09-20
0007 | 擦菜板 | 厨房用具 | 880 | 790 | 2008-04-28
0008 | 圆珠笔 | 办公用品 | 100 | | 2009-11-11
法则 5
可以通过
WHERE子句指定对象条件来删除部分数据。
与 SELECT 语句不同的是,DELETE 语句中不能使用 GROUP BY、 HAVING 和 ORDER BY 三类子句,而只能使用 WHERE 子句。原因很简单, GROUP BY 和 HAVING 是从表中选取数据时用来改变抽取数据形式的,而 ORDER BY 是用来指定取得结果显示顺序的。因此,在删除表中数据时它们都起不到什么作用。
专栏
删除和舍弃
标准 SQL 中用来从表中删除数据的只有
DELETE语句。但是,很多数据库产品中还存在另外一种被称为TRUNCATE的语句。这些产品主要包括 Oracle、SQL Server、PostgreSQL、MySQL 和 DB2。KEYWORD
TRUNCATE语句
TRUNCATE是舍弃的意思,具体的使用方法如下所示。语法 A 只能删除表中全部数据的
TRUNCATE语句TRUNCATE <表名>;与
DELETE不同的是,TRUNCATE只能删除表中的全部数据,而不能通过WHERE子句指定条件来删除部分数据。也正是因为它不能具体地控制删除对象,所以其处理速度比DELETE要快得多。实际上,DELETE语句在 DML 语句中也属于处理时间比较长的,因此需要删除全部数据行时,使用TRUNCATE可以缩短执行时间。但是,产品不同需要注意的地方也不尽相同。例如在 Oracle 中,把
TRUNCATE定义为 DDL,而不是 DML [3]。使用TRUNCATE时,请大家仔细阅读使用手册,多加注意。便利的工具往往还是会存在一些不足之处的。
请参阅
- 数据的插入
- 数据的删除
- 数据的更新
- 事务
(完)
与
INSERT语句相同,数据的更新也是以记录为基本单位进行的。下一篇将要学习的 UPDATE 语句 也是如此。 ↩︎虽然“搜索型
DELETE”是正式用语,但实际上这种说法并不常用,而是简单地称为DELETE语句。 ↩︎因此,Oracle 中的
TRUNCATE不能使用ROLLBACK。执行TRUNCATE的同时会默认执行COMMIT操作。 ↩︎
以上是 SQL数据的删除(DELETE语句的使用方法) 的全部内容, 来源链接: utcz.com/z/536095.html
