PostgreSQL 删除查询(从选择中删除行)

PostgreSQL 中的 DELETE 查询

PostgreSQL 中的DELETE 语句用于从表中删除一条或多条记录。如果你想删除表中的特定行,PostgreSQL 允许你将 DELETE 语句与 WHERE 子句结合使用,否则它将删除所有记录。

Postgres DELETE 查询语法

DELETE 语句可以按以下语法定义

[ WITH [ RECURSIVE ] with-query [, ...] ]
DELETE FROM [ ONLY ] table-name [ * ] [ [ AS ] alias ]
    [ USING using-list ]
    [ WHERE condition(s) | WHERE CURRENT OF cursor-name]
    [ RETURNING * | output-expression [ [ AS ] output-name] [, ...] ]

参数

  • with-query:WITH 子句允许我们引用一个或多个子查询,并用名称在 DELETE 查询中引用它们。
  • table-name:要从中删除记录的表的名称。
  • alias:这是目标表的名称的替代品。
  • using-list:表表达式允许在 WHERE 子句中使用来自其他表的列。
  • 条件(s):可选。它们是记录被删除必须满足的条件。如果未提供此部分,则将删除所有 table-name 记录。
  • cursor-name:将在 WHERE CURRENT OF 条件中使用的游标。从此游标获取的最后一行将被删除。
  • output-expression:DELETE 语句在删除每一行后要处理并返回的表达式。
  • output-name:用于返回列的名称。

请注意,由于 DELETE 语句删除的是整行,因此您无需指定列名。

带有一个条件的 PostgreSQL DELETE 查询

DELETE 语句可以与单个条件一起使用。条件使用 WHERE 子句设置。考虑具有以下数据的 Price 表

价格

PostgreSQL Delete Query with One Condition

我们来删除 ID 为 4 的记录

DELETE FROM Price
WHERE id = 4;

上面的命令将删除 ID 为 4 的记录。让我们确认删除是否成功

PostgreSQL Delete Query with One Condition

ID 为 4 的行已被删除。

带有两个条件的 DELETE 查询

PostgreSQL DELETE 语句可以接受两个条件。这两个条件应使用 AND 运算符连接。我们将使用下表

价格

PostgreSQL Delete Query with Two Conditions

考虑下面的示例

DELETE FROM Price
WHERE id = 3Y
AND price = 300;

在上面的命令中,我们正在删除 ID 为 3 且价格为 300 的行。现在我们可以查询该表

SELECT * FROM Price

这将返回以下结果

PostgreSQL Delete Query with Two Conditions

ID 为 3 且价格为 300 的记录已被删除。

使用 Exists 条件的 PostgreSQL DELETE 查询

使用 EXISTS 条件,你可以使 DELETE 更复杂。有时,可能需要根据另一表中的记录来删除一个表中的记录。

您会发现 FROM 子句不允许您在执行删除时列出多个表中的记录,EXISTS 子句会变得非常有用。我们有两个表

Book

PostgreSQL Delete Query using Exists Condition

价格

PostgreSQL Delete Query using Exists Condition

然后我们可以运行以下查询

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

上面的命令将从 Book 表中删除,其中 Price 表中存在一条记录,其 ID 与 Book 表的 ID 匹配,并且价格低于 250。

Book 表现在如下所示

PostgreSQL Delete Query using Exists Condition

ID 为 1 的记录已被删除。

如何在 pgAdmin 中删除 PostgreSQL 中的行

以下是使用 pgAdmin 在PostgreSQL 中删除行的步骤

带一个条件

要通过 pgAdmin 完成相同的操作,请执行此操作

步骤 1) 登录您的 pgAdmin 账户

打开 pgAdmin 并使用您的凭据登录您的账户

步骤 2) 创建演示数据库

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

Delete Row in PostgreSQL

步骤 3) 输入查询

在查询编辑器中输入以下查询

DELETE FROM Price
WHERE id = 4;

步骤 4) 执行查询

点击 Execute 按钮

Delete Row in PostgreSQL

步骤 5) 检查行是否已删除

让我们检查删除是否成功

Delete Row in PostgreSQL

带两个条件

要通过 pgAdmin 完成相同的操作,请执行此操作

步骤 1) 登录您的 pgAdmin 账户。

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

Delete Row in PostgreSQL

步骤 3) 在查询编辑器中输入查询

DELETE FROM Price
WHERE id = 3
AND price = 300;

步骤 4) 点击 Execute 按钮。

Delete Row in PostgreSQL

步骤 5) 让我们检查删除是否成功

Delete Row in PostgreSQL

使用 EXISTS 条件

要通过 pgAdmin 完成相同的操作,请执行此操作

步骤 1) 登录您的 pgAdmin 账户。

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

Delete Row using EXISTS Condition

步骤 3) 在查询编辑器中输入查询

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

步骤 4) 点击 Execute 按钮。

Delete Row using EXISTS Condition

步骤 5) 让我们检查删除是否成功

Delete Row using EXISTS Condition

摘要

  • DELETE 语句用于从表中删除一条或多条记录。
  • 要仅删除表中的特定行,可以将 DELETE 语句与 WHERE 子句结合使用。
  • 如果 DELETE 子句未使用 WHERE 子句,它将删除表中的所有记录。
  • table-name 参数允许您添加要从中删除记录的表的名称。
  • 我们可以使用带有单个条件的 DELETE 语句,该条件使用 WHERE 子句指定。
  • DELETE 语句也可以在 WHERE 子句中使用的两个条件一起使用。这两个条件应使用 AND 运算符连接。
  • EXISTS 条件可以帮助我们根据另一表的记录从表中删除记录。

下载本教程中使用的数据库