📅  最后修改于: 2020-11-30 09:16:45             🧑  作者: Mango
在本节中,我们将了解PostgreSQL EXISTS Condition的工作原理,该条件与WHERE子句一起使用以评估子查询中的现有行。我们还看到带有不同查询的EXISTS条件示例,例如INSERT,SELECT,NOT EXISTS,NULL,UPDATE和DELETE。
在PostgreSQL中, EXISTS条件可以与SELECT , INSERT , UPDATE和DELETE命令结合使用。换句话说,我们可以说EXISTS条件用于检查子查询中是否存在任何数据,如果子查询返回多个记录,则返回true。
它用于与子查询分组并测试子查询中记录的存在。 PostgreSQL EXISTS条件是一种布尔运算符,它返回true或false 。换句话说,我们可以这样说:
PostgreSQL EXISTS条件的语法如下:
WHERE EXISTS (subquery);
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 。
在以上语法中,我们使用了以下参数:
Parameter | Description |
---|---|
Column1, Cloumn2…columnN | It is used to specify the column name which used in the particular table. |
table_name | This parameter is used to define the table names from which we are going to perform the EXISTS condition. |
Conditions | The condition parameter is used to search the specific value from the table. |
Subquery | Generally, the SELECT command starts with the SELECT *, but PostgreSQL ignores it in a subquery. |
注意:
让我们看不同的示例,以了解PostgreSQL EXISTS条件的工作原理。
首先,我们将看到一个EXISTS条件的示例示例,以学习PostgreSQL中有效的EXISTS运算符。
为此,我们从Javatpoint数据库获取Client和Client_details表。
在下面的示例中,我们使用client_details表中至少有一条client_salary大于30000的记录来标识那些Clients的信息。
以下命令将返回薪水超过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表,以确定客户表中的每个客户端的细节如下场景。
我们将显示如何通过INSERT命令使用EXISTS条件。
为此,我们要从Organization数据库中获取employee,department和Jobs表,以将记录从一个表插入到另一个表。
在下面的示例中,我们将记录从employee表插入到department表中。我们从employee表中获取电话和地址列记录,其中两个表中的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表中。
要检查记录是否已插入部门表中,我们将使用SELECT命令,如下所示:
Select * from department;
输出量
执行上述命令后,我们将获得以下输出:
在上面的屏幕截图中,我们可以看到PostgreSQL EXISTS条件成功地将四个记录插入了Department表中。
在下面的示例中,我们将显示如何在两个条件下通过SELECT命令使用EXISTS条件。
我们从Javatpoint数据库中获取Client和Client_details表,以从一个表中选择所有记录。
我们将EXISTS条件与WHERE子句一起使用,因为我们可以看到以下命令:
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。
在PostgreSQL中,我们还可以将NOT条件与EXISTS条件结合起来。
具有EXISTS条件的PostgreSQL NOT运算符用于获取其值与列表值不匹配的那些行。
注意:NOT条件与EXISTS条件的输出矛盾。我们知道,NOT条件与EXISTS条件完全相反,这意味着:
为此,我们采用与上例类似的表( Client和client_details )。
下面的示例显示带有条件条件的非条件以获取该客户端信息,该信息在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表中没有记录。
在PostgreSQL中,我们还可以将EXISTS条件与NULL一起使用。
带有NULL的PostgreSQL EXISTS条件用于获取那些子查询将返回NULL且EXISTS条件将返回TRUE的行。
为此,我们从Javatpoint数据库获取employee表。
让我们看下面的示例,以了解Exists条件如何与NULL一起工作。
SELECT emp_fname, emp_lname
FROM employee
WHERE EXISTS (SELECT NULL)
ORDER BY emp_fname, emp_lname;
输出量
执行上述命令后,我们将获得以下输出:
在上面的示例中,子查询语句返回NULL 。因此,该命令将返回employee表中的所有行。
在下面的示例中,我们将显示如何通过UPDATE命令使用EXISTS条件。
为此,我们从Javatpoint数据库中获取Summer_fruits和Winter_fruits表。
在下面的命令,将PostgreSQL EXISTS条件被用于更新在summer_fruits表Fruits_name列值从winter_fruits表所在的winter_fruits' wf_id列等于summer_fruits' sf_id列winter_fruits_name列。
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表已成功更新。
现在,我们将使用Select命令来检查summer_fruits表中的特定记录是否已更新:
SELECT * FROM summer_fruits;
输出量
执行上述命令后,我们将得到以下结果:
在下面的示例中,我们将显示如何通过DELETE命令使用EXISTS条件。
在下面的示例中,我们将从JavatPoint数据库中获取Course和Course_categories表,以从表中删除特定记录。
在下面的命令,PostgreSQL的EXISTS条件是用于从课程表,其中从课程表和course_category_id的COURSE_ID从Course_categories表相等删除所有记录。
DELETE FROM Course
WHERE EXISTS (SELECT 1
FROM Course_categories
WHERE Course.course_id = Course_categories.course_category_id);
输出量
执行完上述命令后,我们将获得以下消息窗口,显示记录已成功从“课程”表中删除。
现在,我们将使用“选择”命令来检查“课程”表中的特定记录是否已删除:
SELECT *
FROM Course;
输出量
成功执行以上命令后,我们将获得以下输出:
在PostgreSQL EXISTS条件部分,我们学习了以下主题:
PostgreSQL EXISTS条件的使用提供了EXISTS条件来评估子查询中行是否存在的优点。