在 PostgreSQL 中,使用 DELETE 语句删除表中的一行或多行。 它只删除表中的数据,而不删除表结构。
DELETE FROM <table_name>
[WHERE <condition<]
RETURNING * | <output_expression< AS <output_name<;
在上面的语法中,
- 在 DELETE FROM 关键字后指定要删除其中数据的表的名称。
- WHERE 子句是可选的,它限制特定于指定条件的删除操作。如果不指定WHERE子句,Postgres将删除表中的所有行。
- RETURNING 子句是可选的,它将返回所有已删除行或指定列的值的列表。
DELETE 语句成功执行后,PostgreSQL 将给出 DELETE count 消息,其中 count 是 DELETE 语句删除的行数。
考虑以下 employee
表:
现在,让我们从 emp_id = 5
的员工表中删除数据。
DELETE FROM employee
WHERE emp_id = 5;
上述查询将在 pgAdmin 中显示以下结果:
上面的输出 DELETE 1
显示从 employee
表中删除了 1 行。
DELETE 语句可以从employee
表中删除多条记录。例如,现在我们将删除 emp_id = 3 和 4 的行,并在执行 DELETE 语句后返回删除的行。
DELETE FROM employee
WHERE emp_id IN (3, 4);
上述查询将在 pgAdmin 中显示以下结果:
DELETE 2
表示已从表中删除 2 行。
DELETE 语句的 RETURNING 子句
RETURNING 子句返回删除的行或列值。如果您指定RETURNING *
,那么它将返回所有已删除的行,如果您指定RETURNING column_name
,那么它将返回指定列的值。您可以指定用逗号分隔的多个列。
以下 DELETE 语句返回所有已删除的行:
DELETE FROM employee
WHERE emp_id = 2
RETURNING *;
以下 DELETE 语句返回已删除行的指定列:
DELETE FROM employee
WHERE emp_id IN (5, 7)
RETURNING emp_id, first_name, last_name;
删除表中的所有数据
如果省略 WHERE 子句,DELETE 语句可用于删除表中的所有行,如下所示。
DELETE FROM employee;
上面已经删除了 employee
表中的所有行。让我们通过运行 SELECT 查询来验证它。