目錄
- 一、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操作, ??
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374434.html
標籤:SQL Server
