
- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 清空表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表
- SQL - 約束
- SQL 查詢
- SQL - INSERT 查詢
- SQL - SELECT 查詢
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查詢
- SQL - DELETE 查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布林 (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY,ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION 與 UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自連線
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN 與 RIGHT JOIN
- SQL - UNION 與 JOIN
- SQL 鍵
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 組合鍵
- SQL - 備用鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - UNIQUE 索引
- SQL - 叢集索引
- SQL - 非叢集索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - MIN & MAX
- SQL - NULL 函式
- SQL - CHECK 約束
- SQL - DEFAULT 約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - GROUP BY 與 ORDER BY
- SQL - IN 與 EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - DELETE 查詢
SQL DELETE 語句
SQL 的DELETE語句用於從現有表中刪除記錄。為了過濾要刪除的記錄(或刪除特定記錄),我們需要將WHERE子句與DELETE語句一起使用。
如果您在沒有WHERE子句的情況下執行DELETE語句,它將刪除表中的所有記錄。
使用DELETE語句,我們可以刪除單個表的一行或多行以及多個表中的記錄。
語法
帶有WHERE子句的SQL DELETE查詢的基本語法如下所示:
DELETE FROM table_name WHERE [condition];
您可以使用AND或OR運算子組合N個條件。
示例
假設我們建立了一個名為CUSTOMERS的表,其中包含客戶的個人詳細資訊,包括他們的姓名、年齡、地址和薪水等,如下所示:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
現在,使用INSERT語句將值插入此表,如下所示:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500.00 ), (3, 'Kaushik', 23, 'Kota', 2000.00 ), (4, 'Chaitali', 25, 'Mumbai', 6500.00 ), (5, 'Hardik', 27, 'Bhopal', 8500.00 ), (6, 'Komal', 22, 'Hyderabad', 4500.00 ), (7, 'Muffy', 24, 'Indore', 10000.00 );
將建立表如下:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
以下查詢刪除ID為6的客戶的記錄。
DELETE FROM CUSTOMERS WHERE ID = 6;
輸出
輸出將顯示為:
Query OK, 1 row affected (0.10 sec)
驗證
要驗證記錄是否已從表中刪除,我們需要使用SELECT查詢檢索修改後的表,如下所示:
SELECT * FROM CUSTOMERS;
現在,CUSTOMERS表將具有以下記錄:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
刪除多行
要從表中刪除多行,我們需要使用WHERE子句指定所有要刪除的行都滿足的必要條件(s)。讓我們看一個例子:
示例
從同一個Customers表中,讓我們嘗試刪除年齡超過25歲的客戶的記錄。
DELETE FROM CUSTOMERS WHERE AGE > 25;
輸出
輸出將顯示為:
Query OK, 2 rows affected (0.06 sec)
驗證
要驗證記錄是否已從表中刪除,讓我們檢索修改後的表。為此,請使用下面的SELECT查詢:
SELECT * FROM CUSTOMERS;
上面的查詢將生成以下表:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
刪除表中的所有記錄
如果我們想使用DELETE查詢從現有表中刪除所有記錄(截斷它),我們只需要在不使用WHERE子句的情況下執行它。
示例
以下SQL查詢刪除CUSTOMERS表中的所有記錄:
DELETE FROM CUSTOMERS;
輸出
輸出將顯示為:
Query OK, 4 rows affected (0.13 sec)
驗證
要驗證所有記錄是否已從表中刪除,我們需要再次使用SELECT查詢檢索修改後的表:
SELECT * FROM CUSTOMERS;
現在,CUSTOMERS表將沒有任何記錄,並將顯示以下輸出:
Empty set (0.00 sec)
在多個表中刪除記錄
SQL允許我們使用DELETE查詢從多個表中刪除記錄。在這裡,我們將使用JOIN子句根據公共列組合來自多個表的資料。
示例
讓我們建立另一個名為ORDERS的表,其中包含客戶所做訂單的詳細資訊。
CREATE TABLE ORDERS ( OID INT NOT NULL, DATE VARCHAR (20) NOT NULL, CUSTOMER_ID INT NOT NULL, AMOUNT DECIMAL (18, 2) );
使用INSERT語句,將值插入此表,如下所示
INSERT INTO ORDERS VALUES (102, '2009-10-08 00:00:00', 3, 3000.00), (100, '2009-10-08 00:00:00', 3, 1500.00), (101, '2009-11-20 00:00:00', 2, 1560.00), (103, '2008-05-20 00:00:00', 4, 2060.00);
建立的表如下所示:
OID | DATE | CUSTOMER_ID | AMOUNT |
---|---|---|---|
102 | 2009-10-08 00:00:00 | 3 | 3000.00 |
100 | 2009-10-08 00:00:00 | 3 | 1500.00 |
101 | 2009-11-20 00:00:00 | 2 | 1560.00 |
103 | 2008-05-20 00:00:00 | 4 | 2060.00 |
以下SQL查詢刪除收入超過2000且已下訂單的客戶的記錄(來自CUSTOMERS和ORDERS表)。
DELETE CUSTOMERS, ORDERS FROM CUSTOMERS INNER JOIN ORDERS ON ORDERS.CUSTOMER_ID = CUSTOMERS.ID WHERE CUSTOMERS.SALARY > 2000;
輸出
輸出將顯示為:
Query OK, 2 rows affected (0.01 sec)
驗證
要驗證記錄是否已從表中刪除,我們需要再次使用SELECT查詢檢索修改後的表:
SELECT * FROM CUSTOMERS;
CUSTOMERS表將不包含薪水大於2000且ID與ORDERS表中的CUSTOMER_ID列匹配的記錄。
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | MP | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
類似地,如果您驗證如下所示的ORDERS表:
SELECT * FROM ORDERS;
由於薪水大於2000且CUSTOMER_ID與CUSTOMERS表中的ID值匹配,因此將刪除ORDERS表的最後一條記錄(OID 103):
OID | DATE | CUSTOMER_ID | AMOUNT |
---|---|---|---|
102 | 2009-10-08 00:00:00 | 3 | 3000.00 |
100 | 2009-10-08 00:00:00 | 3 | 1500.00 |
101 | 2009-11-20 00:00:00 | 2 | 1560.00 |