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
廣告