PostgreSQL Exists 结合 Select, Insert, Update & Delete 示例

PostgreSQL 中 Exists 是什么?

PostgreSQL EXISTS 操作符用于测试子查询中是否存在行。这意味着该操作符与子查询一起使用。当子查询中找到至少一行时,就认为满足了 Exists 操作符。您可以将此操作与 SELECT、UPDATE、INSERT 和 DELETE 语句一起使用。

Postgres Exists 查询语法

以下是 PostgreSQL EXISTS 语句的语法

WHERE EXISTS (subquery);

上述语法显示 EXISTS 操作符接受一个参数,即子查询。子查询只是一个 SELECT 语句,它应该以 SELECT * 开头,而不是列名或表达式列表。

PostgreSQL Exists 与 SELECT 语句

让我们看看如何将 SELECT 语句与 EXISTS 操作符一起使用。我们有以下表

Book

PostgreSQL Exists with SELECT Statement

价格

PostgreSQL Exists with SELECT Statement

运行以下语句

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

这将返回以下内容

PostgreSQL Exists with SELECT Statement

上述命令应返回 Book 表中 id 与子查询中任何记录的 id 匹配的所有记录。只有一个 id 匹配。因此,只返回了一条记录。

PostgreSQL Exists 与 INSERT 语句

我们可以在 INSERT 语句中使用 EXISTS 操作符。我们有以下 3 个表

Book

PostgreSQL Exists with INSERT Statement

价格

PostgreSQL Exists with INSERT Statement

Price2

PostgreSQL Exists with INSERT Statement

然后我们可以运行以下语句

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

Price 表现在如下所示

PostgreSQL Exists with INSERT Statement

Price2 表中 id 为 5 的行已匹配。然后该记录被插入到 Price 表中。

Postgres Exists 与 UPDATE 语句

我们可以在 UPDATE 语句中使用 EXISTS 操作符。

运行以下查询

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

Postgres Exists with UPDATE Statement

我们正在更新 Price 表的 price 列。我们的目标是使共享相同 id 的项目的价格相同。只有一个行匹配,即 5。

但是,由于价格相等(即 205),因此未进行任何更新。如果存在差异,则会进行更新。

Postgres Exists 与 DELETE 语句

PostgreSQL DELETE 语句可以使用 EXISTS 操作符。这是一个例子

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

Price 表现在如下所示

Postgres Exists with DELETE Statement

id 为 5 的行已被删除。

使用 pgAdmin 的 PostgreSQL Exists 语句

现在让我们看看如何使用 pgAdmin 执行这些操作

如何使用 pgAdmin 在 PostgreSQL 中使用 SELECT 语句进行 Exists 查询

以下是使用 pgAdmin 在 PostgreSQL 中使用 Exists 查询进行 SELECT 语句的步骤

步骤 1) 登录您的 pgAdmin 账户

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

步骤 2) 创建演示数据库

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

PostgreSQL Exists Statement using pgAdmin

步骤 3) 输入查询

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

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

步骤 4) 执行查询

点击 Execute 按钮

PostgreSQL Exists Statement using pgAdmin

它应该返回以下内容

PostgreSQL Exists Statement using pgAdmin

使用 INSERT 语句

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

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

步骤 2)

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

Exists Statement in PostgreSQL using pgAdmin

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

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

步骤 4) 点击 Execute 按钮。

Exists Statement in PostgreSQL using pgAdmin

Price 表现在应该如下所示

Exists Statement in PostgreSQL using pgAdmin

使用 UPDATE 语句

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

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

步骤 2)

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

Exists Statement in PostgreSQL using pgAdmin

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

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

步骤 4) 点击 Execute 按钮。

PostgreSQL Exists Statement using pgAdmin

Price 表现在应该如下所示

PostgreSQL Exists Statement using pgAdmin

使用 DELETE 语句

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

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

步骤 2)

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

PostgreSQL Exists Statement using pgAdmin

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

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

步骤 4) 点击 Execute 按钮。

PostgreSQL Exists Statement using pgAdmin

Price 表现在应该如下所示

PostgreSQL Exists Statement using pgAdmin

摘要

  • EXISTS 操作符测试子查询中是否存在行。
  • 它与子查询一起使用,当子查询至少返回一行时,就认为它已满足。
  • 它与 SELECT、UPDATE、INSERT 和 DELETE 语句一起使用。

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