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 条件的语法如下:
"存在"条件采用一个称为子查询的参数。
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;
输出
成功执行以上命令后,我们将得到以下结果:
如上图所示,子查询分析 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 表。
检查记录是否具有是否已插入 department 表中,我们将使用 SELECT 命令,如下所示:
Select * from department;
输出
在执行上述命令时,我们将获得以下输出:
在上面的屏幕截图中,我们看到 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);
输出
执行上述命令后,我们将获得以下输出:
在上面的 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 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;
输出
在执行上述命令时,我们将获得以下输出:
在上面的示例中,子查询语句返回 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 表已成功更新。
我们现在将使用选择命令以检查 summer_fruits 表中的特定记录是否已更新:
SELECT * FROM summer_fruits;
输出
在执行上述命令时,我们将得到以下结果:
带有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已有条件部分,我们了解了以下内容主题:
使用PostgreSQL的 EXISTS条件提供了 EXISTS 条件来评估子查询中行是否存在的优点。
我们已经看到了带有子查询的 EXISTS条件的示例示例,用于在子查询返回至少一行后检查是否满足条件。
我们使用 EXISTS条件和 INSERT命令将记录从一个表插入到另一个表。
我们使用 EXISTS条件和 SELECT 命令来获取特定的表记录。
我们在 SELECT 命令中使用了 EXISTS条件和 NOT运算符来从特定表中获取不存在的记录。
我们使用 EXISTS条件和 NULL 来获取特定的表记录。
我们使用 EXISTS条件和 UPDATE 语句来更新表的记录。
我们使用 EXISTS条件和 DELETE 语句来删除特定表的记录。