Sql 简明教程
SQL - DELETE Query
The SQL DELETE Statement
SQL DELETE 语句用于从现有表中删除记录。为了筛选将被删除的记录(或删除特定记录),我们需要使用 WHERE 子句和 DELETE 语句。
如果在没有 WHERE 子句的情况下执行 DELETE 语句,它将从表中删除所有记录。
使用 DELETE 语句,我们可以删除单张表的一行或多行,以及跨多张表的记录。
Syntax
具有 WHERE 子句的 SQL DELETE 查询的基本语法如下:
DELETE FROM table_name WHERE [condition];
可以使用 AND 或 OR 运算符组合 N 个条件。
Example
假设我们已经创建了一个名为 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 |
以下查询将删除客户 6 的记录。
DELETE FROM CUSTOMERS WHERE ID = 6;
Delete Records in Multiple Tables
SQL 允许我们使用 DELETE 查询从多个表中删除记录。在这里,我们将使用 JOIN 子句将来自多个表(基于公共列)的数据组合在一起。
Example
让我们再创建一个名为 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;
Verification
要验证是否已从表中删除记录,我们需要再次使用 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 |