PostgreSQL EXISTS 条件

2025年3月17日 | 阅读 8 分钟

在本节中,我们将理解 PostgreSQL EXISTS 条件 的工作原理,它用于 WHERE 子句 来评估子查询中的现有行。我们还将看到 EXISTS 条件INSERT、SELECT、NOT EXISTS、NULL、UPDATE 和 DELETE不同查询中的示例

PostgreSQL EXISTS 条件介绍

PostgreSQL 中,EXISTS 条件可以与 SELECTINSERTUPDATEDELETE 命令结合使用。换句话说,我们可以说 EXISTS 条件用于检查子查询中是否存在任何数据,并在子查询返回多条记录时返回 true

它用于与子查询分组,并测试子查询中记录的存在性。PostgreSQL EXISTS 条件 是一种布尔运算符,它返回真或假的结果。换句话说,我们可以说:

  • 如果子查询返回任何记录,Exists 条件 将返回 TRUE 值,否则,它将返回 FALSE
  • 这里的 TRUE 值始终用数字 1 表示,FALSE 值用数字 0 表示。

PostgreSQL EXISTS 条件语法

PostgreSQL EXISTS 条件的语法如下:

Exists 条件接受一个参数,该参数称为子查询。它经常与关联子查询一起使用。

EXISTS 条件 的输出取决于子查询是否获取到任何行,而不取决于行的信息。因此,子查询的 SELECT 命令 中出现的列并不重要。

在这种情况下,我们将使用以下语法来表示 EXISTS 条件:

在上面的语法中,我们还使用了 NOT 运算符,它可以帮助我们否定 EXISTS 条件。当子查询不返回任何行时,它将返回 TRUE,否则返回 FALSE

在上面的语法中,我们使用了以下参数:

参数描述
Column1, Cloumn2…columnN用于指定表中使用的列名。
table_name此参数用于定义将执行 EXISTS 条件的表名。
条件condition 参数用于从表中搜索特定值。
Subquery通常,SELECT 命令以 SELECT * 开始,但 PostgreSQL 在子查询中会忽略它。

注意

  • 通常,SELECT 命令SELECT * 开头,而不是列名或表达式列表。在这里,我们使用 SELECT 1 代替 SELECT *,这有助于提高 PostgreSQL 中查询的性能。
  • 同时,子查询的列结果并不重要,因为在这里,只有返回的行才重要。
  • 这会产生与 PostgreSQL 忽略子查询中的 SELECT 列表相同的输出。
  • 在找到匹配的输出后,EXISTS 条件 将停止进一步处理。
  • 在 PostgreSQL 中,我们在 EXISTS 条件 中使用的 SQL 命令非常低效。因此,子查询会为外部查询的表中的每一行重新运行。
  • 并且我们有更有效的方法来编写所有命令,而无需使用 EXISTS 条件。

PostgreSQL EXISTS 条件示例

让我们来看一些示例,以了解 PostgreSQL EXISTS 条件 的工作原理。

首先,我们将看到一个 EXISTS 条件的示例,以了解 PostgreSQL 中 EXISTS 运算符的工作原理。

为此,我们使用 Javatpoint 数据库中的 ClientClient_details 表。

在下面的示例中,我们识别出那些在 client_details 表中至少有一条记录,并且 client_salary 大于 30000客户信息

以下命令将返回那些薪资超过 30000 的客户信息:

输出

成功执行上述命令后,我们将获得以下结果:

PostgreSQL Exists Condition

正如我们在上面的屏幕截图中看到的,子查询分析了 Client_details 表,以识别 Client 表中每个客户的详细信息的以下场景:

  • 如果 Client_details 表中的 client_idClient 表中的 client_id 相等 (cd.client_id = c.client_id)
  • 并且 client_salary 大于 30000 (client_salary > 30000)

PostgreSQL EXISTS 条件与 INSERT 命令示例

我们将展示如何将 EXISTS 条件INSERT 命令一起使用。

为此,我们使用 Organization 数据库中的 employee、departmentJobs 表,将记录从一个表插入到另一个表。

在以下示例中,我们将记录从 employee 表插入到 department 表。我们从 employee 表中提取 phoneaddress 列的记录,其中两个表中的 emp_idjob_id 相等。

输出

执行上述命令后,我们将看到以下消息窗口,显示值已成功插入到 department 表中。

PostgreSQL Exists Condition

为了检查记录是否已插入到 department 表中,我们将使用 SELECT 命令,如下所示:

输出

执行上述命令后,我们将获得以下输出

PostgreSQL Exists Condition

在上面的屏幕截图中,我们可以看到 PostgreSQL EXISTS 条件已成功将四条记录插入到 department 表中。

PostgreSQL EXISTS 条件与 SELECT 命令示例

在下面的示例中,我们将展示如何将 EXISTS 条件与带有两个条件的 SELECT 命令一起使用。

我们使用 Javatpoint 数据库中的 ClientClient_details 表来从一个表中选择所有记录。

我们正在将 EXISTS 条件WHERE 子句一起使用,正如我们可以在以下命令中看到的:

输出

执行上述命令后,我们将获得以下输出

PostgreSQL Exists Condition

在上面的子查询语句中,我们使用了 SELECT 1,这有助于提高性能,因为在 Exists 条件中不需要列输出,因为只有返回行的存在才重要。

正如我们在上面的屏幕截图中看到的,PostgreSQL EXISTS 条件将从 Client 表中返回所有记录,其中 Client_details 表中至少有一条记录具有相同的 Client_id

使用 NOT EXISTS 条件的 PostgreSQL EXIST 条件示例

在 PostgreSQL 中,我们也可以将 NOT 条件EXISTS 条件结合使用。

PostgreSQL NOT 运算符EXISTS 条件用于获取值不匹配列表值中的那些行。

注意:NOT 条件否定了 EXISTS 条件的输出。正如我们所知,NOT 条件与 EXISTS 条件完全相反,这意味着:

  • 如果子查询没有返回行,则 NOT EXISTS 条件将返回 TRUE
  • 或者,如果子查询返回多行,则 NOT EXISTS 条件将返回 FALSE

为此,我们使用与上述示例相同的表(Client 和 client_details)。

以下示例显示了 NOT 条件与 EXISTS 条件,以获取不存在于 Client_details 表中的客户信息。

输出

执行上述命令后,我们将得到以下输出:

PostgreSQL Exists Condition

在上面的示例中,PostgreSQL EXISTS 示例将返回 Client 表中的所有记录,其中在给定 client_idclient_details 表中没有记录。

使用 EXISTS 条件与 NULL 的示例

在 PostgreSQL 中,我们也可以将 EXISTS 条件NULL 一起使用。

PostgreSQL EXISTS 条件与 NULL 用于获取子查询返回 NULL 的那些行,而 EXISTS 条件将返回 TRUE

为此,我们使用 Javatpoint 数据库中的 employee 表。

让我们看下面的示例,以了解 Exists 条件如何与 NULL 一起工作。

输出

执行上述命令后,我们将获得以下输出

PostgreSQL Exists Condition

在上面的示例中,子查询语句返回了 NULL。因此,该命令将返回 employee 表中的所有行。

PostgreSQL EXISTS 条件与 UPDATE 命令示例

在下面的示例中,我们将展示如何将 EXISTS 条件UPDATE 命令一起使用。

为此,我们使用 Javatpoint 数据库中的 Summer_fruitsWinter_fruits 表。

在以下命令中,PostgreSQL EXISTS 条件用于更新 summer_fruits 表中的 Fruits_name 列值,使其等于 winter_fruits_name 列(来自 winter_fruits 表),其中 winter_fruits' wf_id 列等于 summer_fruits' sf_id 列。

输出

执行上述命令后,我们将得到以下输出,其中我们可以看到 summer_fruits 表已成功更新。

PostgreSQL Exists Condition

我们现在将使用 Select 命令来检查 summer_fruits 表中的特定记录是否已更新:

输出

执行上述命令后,我们将得到以下结果:

PostgreSQL Exists Condition

PostgreSQL EXISTS 条件与 DELETE 命令示例

在下面的示例中,我们将展示如何将 EXISTS 条件DELETE 命令一起使用。

在下面的示例中,我们将使用 JavatPoint 数据库中的 CourseCourse_categories 表来删除表中的特定记录。

在以下命令中,PostgreSQL EXISTS 条件用于从 Course 表中删除所有记录,其中 Course 表中的 course_idCourse_categories 表中的 course_category_id 相等。

输出

执行上述命令后,我们将看到以下消息窗口,显示记录已成功从 Course 表中删除。

PostgreSQL Exists Condition

我们现在将使用 Select 命令来检查特定记录是否已从 Course 表中删除。

输出

成功执行上述命令后,我们将得到以下输出:

PostgreSQL Exists Condition

概述

PostgreSQL EXISTS 条件部分,我们学习了以下主题:

PostgreSQL EXISTS 条件的使用提供了 EXISTS 条件的优点,可以评估子查询中的行存在性。

  • 我们看到了 EXISTS 条件子查询的示例,以检查当子查询至少返回一行时,条件是否已满足。
  • 我们将 EXISTS 条件INSERT 命令结合使用,将记录从一个表插入到另一个表。
  • 我们将 EXISTS 条件SELECT 命令结合使用,以获取特定表的记录。
  • 我们将 EXISTS 条件SELECT 命令中的 NOT Operator 结合使用,以从特定表中获取不存在的记录。
  • 我们将 EXISTS 条件NULL 结合使用,以获取特定表的记录。
  • 我们将 EXISTS 条件UPDATE 语句结合使用,以更新表的记录。
  • 我们将 EXISTS 条件DELETE 语句结合使用,以删除特定表的记录。

下一个主题PostgreSQL 视图