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 表
价格
我们来删除 ID 为 4 的记录
DELETE FROM Price WHERE id = 4;
上面的命令将删除 ID 为 4 的记录。让我们确认删除是否成功
ID 为 4 的行已被删除。
带有两个条件的 DELETE 查询
PostgreSQL DELETE 语句可以接受两个条件。这两个条件应使用 AND 运算符连接。我们将使用下表
价格
考虑下面的示例
DELETE FROM Price WHERE id = 3Y AND price = 300;
在上面的命令中,我们正在删除 ID 为 3 且价格为 300 的行。现在我们可以查询该表
SELECT * FROM Price
这将返回以下结果
ID 为 3 且价格为 300 的记录已被删除。
使用 Exists 条件的 PostgreSQL DELETE 查询
使用 EXISTS 条件,你可以使 DELETE 更复杂。有时,可能需要根据另一表中的记录来删除一个表中的记录。
您会发现 FROM 子句不允许您在执行删除时列出多个表中的记录,EXISTS 子句会变得非常有用。我们有两个表
Book
价格
然后我们可以运行以下查询
DELETE FROM Book WHERE EXISTS (SELECT 1 FROM Price WHERE Price.id = Book.id AND price < 250 );
上面的命令将从 Book 表中删除,其中 Price 表中存在一条记录,其 ID 与 Book 表的 ID 匹配,并且价格低于 250。
Book 表现在如下所示
ID 为 1 的记录已被删除。
如何在 pgAdmin 中删除 PostgreSQL 中的行
以下是使用 pgAdmin 在PostgreSQL 中删除行的步骤
带一个条件
要通过 pgAdmin 完成相同的操作,请执行此操作
步骤 1) 登录您的 pgAdmin 账户
打开 pgAdmin 并使用您的凭据登录您的账户
步骤 2) 创建演示数据库
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 输入查询
在查询编辑器中输入以下查询
DELETE FROM Price WHERE id = 4;
步骤 4) 执行查询
点击 Execute 按钮
步骤 5) 检查行是否已删除
让我们检查删除是否成功
带两个条件
要通过 pgAdmin 完成相同的操作,请执行此操作
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
DELETE FROM Price WHERE id = 3 AND price = 300;
步骤 4) 点击 Execute 按钮。
步骤 5) 让我们检查删除是否成功
使用 EXISTS 条件
要通过 pgAdmin 完成相同的操作,请执行此操作
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
DELETE FROM Book WHERE EXISTS (SELECT 1 FROM Price WHERE Price.id = Book.id AND price < 250 );
步骤 4) 点击 Execute 按钮。
步骤 5) 让我们检查删除是否成功
摘要
- DELETE 语句用于从表中删除一条或多条记录。
- 要仅删除表中的特定行,可以将 DELETE 语句与 WHERE 子句结合使用。
- 如果 DELETE 子句未使用 WHERE 子句,它将删除表中的所有记录。
- table-name 参数允许您添加要从中删除记录的表的名称。
- 我们可以使用带有单个条件的 DELETE 语句,该条件使用 WHERE 子句指定。
- DELETE 语句也可以在 WHERE 子句中使用的两个条件一起使用。这两个条件应使用 AND 运算符连接。
- EXISTS 条件可以帮助我们根据另一表的记录从表中删除记录。