PostgreSQL教程

PostgreSQL EXISTS

在本节中,我们将了解 PostgreSQL EXISTS条件的工作原理,该条件与 WHERE一起使用子句,以评估子查询中的现有行。此外,我们还会看到 EXISTS条件的示例和不同的查询,例如 INSERT,SELECT,NOT EXISTS,NULL,UPDATE和DELETE 。

PostgreSQL EXISTS条件简介

在 PostgreSQL , EXISTS 条件可以与 SELECT ,插入,更新 ,以及删除 命令。换句话说,我们可以说 EXISTS 条件用于检查子查询中是否存在任何数据,如果子查询返回多个记录,则返回 true 。
它用于与子查询分组并测试子查询中记录的存在。 PostgreSQL EXISTS条件是一种布尔运算符,它返回是或否结果。换句话说,我们可以这样说:
如果子查询返回任何记录,则存在条件将返回 TRUE 值,否则将返回 FALSE 此处, TRUE 值始终以数值1 表示,而 FALSE 值则表示为数值0。

PostgreSQL EXISTS条件语法

PostgreSQL EXISTS 条件的语法如下:
WHERE EXISTS (subquery);
"存在"条件采用一个称为子查询的参数。
EXISTS条件的输出取决于子查询是否获取任何行,而不取决于行信息。因此,子查询的 SELECT命令上出现的列并不重要。
在这种情况下,我们将对EXISTS条件使用以下语法:
SELECT column1, column2…columnN
FROM table1  
WHERE [NOT] EXISTS (  
    SELECT 1
    FROM table2   
    WHERE column2= table1.column1
);  
在以上语法中,我们还使用了 NOT运算符,该运算符帮助我们与EXISTS条件相矛盾。当子查询不返回任何行时,它将返回 TRUE ,否则它将返回 FALSE 。
在上述语法中,我们使用了以下参数:
参数 说明
Column1,Cloumn2…columnN 它用于指定在特定表中使用的列名。
table_name 此参数用于定义要用来执行EXISTS条件的表名。
Conditions condition参数用于从表中搜索特定值。
Subquery 通常,SELECT命令以SELECT * 开头,但是PostgreSQL在子查询中将其忽略。
注意:
通常, SELECT命令以 SELECT * 开头,而不是列名或表达式列表。在这里,我们使用 SELECT 1 代替 SELECT * ,这有助于我们增强PostgreSQL中查询的性能。 同时,子查询列的结果不合适,因为在这里,仅返回的行很重要。 它将提供与PostgreSQL忽略子查询中的选择列表相同的输出。 EXISTS条件将在识别出匹配的输出后直接停止进行其他处理。 在PostgreSQL中,我们将在 EXISTS条件中使用的SQL命令非常无效。因此,事先,对于外部查询表中的每一行,子查询都会重新运行。 我们有更有效的方式来编写所有不使用EXISTS条件的命令。

PostgreSQL EXISTS条件示例

让我们看看不同的示例来了解 PostgreSQL EXISTS条件的工作原理。
首先,我们将看到一个EXISTS条件的示例示例,以在 PostgreSQL 中学习有效的EXISTS运算符。
为此,我们采用 lidihuo数据库中的Client 和 Client_details 表。
在下面的示例中,我们从 client_details 表中至少有一条记录来标识这些客户信息,其中 client_salary 大于 30000。
以下命令将返回工资大于 30000 的那些客户信息:
SELECT client_name, client_profession, 
client_qualification, Client_salary
FROM Client c
WHERE EXISTS
    (SELECT 1
     FROM Client_details cd
     WHERE cd.client_id = c.client_id
     AND client_salary > 30000 )
ORDER BY client_name, client_profession;
输出
成功执行以上命令后,我们将得到以下结果:
PostgreSQL存在条件
如上图所示,子查询分析 Client_details 表以识别 Client 表中每个客户详细信息的以下情形。
如果 Client_details 表中的 client_id 和 Client 表(cd.client_id = c.client_id)相等。 client_salary 大于 30000 (client_salary> 30000)。

带有INSERT命令的PostgreSQL EXISTS条件的示例

我们将显示如何将 EXISTS条件与 INSERT 命令。
为此,我们要聘用 员工,department, 和 工作 组织中的/strong>表,以将记录从一个表插入到另一个表。
在下面的示例中,我们将记录插入到employee 表中的department 表。我们从 employee 表中的phone和address列记录中,其中 emp_id 和 job_id 在两个表中都相等。
INSERT INTO department
(phone, address)
SELECT phone, address
FROM employee
WHERE EXISTS (SELECT 1 
       FROM Jobs
       where employee.emp_id= Jobs.Job_id);
输出
执行上述命令后,我们将获得以下消息窗口,显示该值已成功插入 department 表。
PostgreSQL存在条件
检查记录是否具有是否已插入 department 表中,我们将使用 SELECT 命令,如下所示:
Select * from department;
输出
在执行上述命令时,我们将获得以下输出:
PostgreSQL现有条件
在上面的屏幕截图中,我们看到 PostgreSQL EXISTS条件将四个记录插入到 department 表成功。

使用SELECT命令的PostgreSQL EXISTS条件示例

在下面的示例中,我们会显示如何通过 SELECT 命令和两个条件来使用 EXISTS条件。
我们正在使用 Client 和 Client_details 表,以从一个表中选择所有记录。
我们在 WHERE子句中使用 EXISTS条件,因为我们可以看到以下命令:
SELECT *
FROM Client
WHERE EXISTS (SELECT 1
              FROM Client_details
              WHERE Client.client_id = client_details.client_id);
输出
执行上述命令后,我们将获得以下输出:
PostgreSQL存在条件
在上面的 Subquery 语句中,我们使用了 SELECT 1 ,这有助于我们增强性能,因为在 Exists条件中不需要列输出,因为仅存在返回的行才很重要。
如上图所示, PostgreSQL EXISTS 条件将返回 Client 表中的所有记录,其中 Client_details 中至少有一条记录>表具有类似的 Client_id。

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

在PostgreSQL中,我们还可以将没有条件和存在条件。
P带有 EXISTS条件的ostgreSQL NOT运算符用于获取其值与列表值不匹配的那些行。
注意: NOT条件与EXISTS条件的输出矛盾。我们知道,NOT条件与EXISTS条件完全相反,这意味着:
如果子查询不返回任何行,则 NOT EXISTS 条件将返回 TRUE 。 或者如果子查询返回多行,则 NOT EXISTS 条件将返回 FALSE 。
为此,我们采用与上例类似的表( Client and client_details )。
以下示例显示不具备EXISTS条件的条件以获取该客户信息,该信息在 Client_details 表中不存在。
SELECT *
FROM Client
WHERE NOT EXISTS (SELECT 1
              FROM Client_details
              WHERE Client.client_id = client_details.client_id);
输出
在执行上述命令时,我们将获得以下输出:
PostgreSQL存在条件
在上面的示例中, PostgreSQL EXISTS 示例将返回 Client 中的所有记录表,其中给定 client_id的 client_details 表中没有任何记录。

将EXISTS条件与NULL一起使用的示例

在PostgreSQL中,我们还可以将 EXISTS条件与 NULL 一起使用。
带有NULL的PostgreSQL EXISTS条件用于获取子查询将返回 NULL 且EXISTS条件将返回 TRUE 的那些行。
为此,我们从 lidihuo 数据库中获取 employee 表。
让我们看到下面的示例了解存在条件如何与 NULL一起工作。
SELECT emp_fname, emp_lname
FROM employee
WHERE EXISTS (SELECT null)
ORDER BY emp_fname, emp_lname;
输出
在执行上述命令时,我们将获得以下输出:
PostgreSQL存在条件
在上面的示例中,子查询语句返回 NULL 。因此,该命令将返回 employee 表中的所有行。

带有UPDATE命令的PostgreSQL EXISTS条件示例

在下面的示例中,我们将显示如何通过 UPDATE 命令使用 EXISTS条件。
为此,我们采用 lidihuo 数据库中的 Summer_fruits 和 Winter_fruits 表。
在以下命令中, PostgreSQL EXISTS条件用于更新 summer_fruits 中的 Fruits_name 列值 winter_fruits 表中 winter_fruits_name 列中的表,其中 winter_fruits' wf_id 列等于 summer_fruits' sf_id 列。
UPDATE summer_fruits
SET Fruits_name=(SELECT winter_fruits.winter_fruits_name
                     FROM winter_fruits
                     WHERE winter_fruits.wf_id = summer_fruits.sf_id)
WHERE EXISTS (SELECT 1
              FROM winter_fruits
              WHERE winter_fruits.wf_id = summer_fruits.sf_id);
输出
执行以上命令后,我们将获得以下输出,在其中我们可以看到 summer_fruits 表已成功更新。
PostgreSQL存在条件
我们现在将使用选择命令以检查 summer_fruits 表中的特定记录是否已更新:
SELECT * FROM summer_fruits;
输出
在执行上述命令时,我们将得到以下结果:
PostgreSQL存在条件

带有DELETE命令的PostgreSQL EXISTS条件示例

在下面的示例中,我们将显示如何使用< DELETE 命令来使strong> EXISTS条件生效。
在下面的示例中,我们将采用 课程 和 Course_categories 表,以从表中删除特定记录。
在以下命令中, PostgreSQL EXISTS 条件用于删除 Course 表中的所有记录,其中 course_id Course 表和 Course_categories 表中的 course_category_id 相等。
DELETE FROM Course
WHERE EXISTS (SELECT 1
       FROM Course_categories
       WHERE Course.course_id = Course_categories.course_category_id);
输出
执行上述命令后,我们将获得以下消息窗口,显示记录已成功从 Course 表。
PostgreSQL存在条件
我们现在将使用选择命令以检查 课程 表中的特定记录是否已删除:
SELECT * 
FROM Course;
输出
成功执行上述命令后,我们将获得以下输出:
PostgreSQL已有条件

概述

在 PostgreSQL已有条件部分,我们了解了以下内容主题:
使用PostgreSQL的 EXISTS条件提供了 EXISTS 条件来评估子查询中行是否存在的优点。
我们已经看到了带有子查询的 EXISTS条件的示例示例,用于在子查询返回至少一行后检查是否满足条件。 我们使用 EXISTS条件和 INSERT命令将记录从一个表插入到另一个表。 我们使用 EXISTS条件和 SELECT 命令来获取特定的表记录。 我们在 SELECT 命令中使用了 EXISTS条件和 NOT运算符来从特定表中获取不存在的记录。 我们使用 EXISTS条件和 NULL 来获取特定的表记录。 我们使用 EXISTS条件和 UPDATE 语句来更新表的记录。 我们使用 EXISTS条件和 DELETE 语句来删除特定表的记录。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4