SQL DELETE查询

SQL DELETE查询

SQL DELETE 语句

SQL DELETE 语句用于从现有表中删除记录。为了筛选要删除的记录(或者删除特定记录),我们需要使用 WHERE 子句和DELETE语句。

如果执行DELETE语句时没有使用WHERE子句,它将删除表中的所有记录。

使用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 (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'Hyderabad', 4500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (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子句来指定满足所有要删除行的条件。让我们看一个例子:

示例

从相同的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 (OID, DATE, CUSTOMER_ID, AMOUNT) 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值匹配,最后一条记录(OID 103)的ORDERS表将被删除 –

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程