PostgreSQL Exists条件
在本节中,我们将了解PostgreSQL EXISTS 条件的工作原理,它与WHERE 子句一起使用以评估子查询中的现有行。我们还看到了具有不同查询的EXISTS 条件示例,例如INSERT、SELECT、NOT EXISTS、NULL、UPDATE 和 DELETE。
PostgreSQL EXISTS 条件介绍
在PostgreSQL中,EXISTS条件可以与SELECT、INSERT、UPDATE和DELETE命令结合使用。换句话说,我们可以说EXISTS条件用于检查子查询中是否存在任何数据,如果子查询返回多条记录,则返回true 。
它用于与子查询分组并测试子查询中记录的存在。PostgreSQL EXISTS 条件是一种返回true 或 false结果的布尔运算符。换句话说,我们可以说:
- 如果子查询返回任何记录,则Exists 条件将返回TRUE值,否则将返回FALSE
- 这里TRUE值始终用数值 1表示,FALSE值表示为数值 0。
PostgreSQL EXISTS 条件语法
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。
在上面的语法中,我们使用了以下参数:
范围 | 描述 |
---|---|
Column1, Cloumn2…columnN | 它用于指定在特定表中使用的列名。 |
table_name | 此参数用于定义我们要从中执行 EXISTS 条件的表名。 |
Conditions | 条件参数用于从表中搜索特定值。 |
Subquery | 通常,SELECT 命令以 SELECT * 开头,但 PostgreSQL 在子查询中忽略它。 |
注意事项:
- 通常,SELECT 命令以SELECT *开头,而不是列名或表达式列表。在这里,我们使用SELECT 1代替SELECT *,这有助于我们提高查询在 PostgreSQL 中的性能。
- 同时,子查询列结果不合适,因为在这里,只有返回的行很重要。
- 它将给出与 PostgreSQL 忽略子查询中的选择列表相同的输出。
- EXISTS条件会在识别出匹配输出后直接停止,进行额外的处理。
- 在 PostgreSQL 中,我们将在EXISTS 条件下使用的 SQL 命令非常无效。因此,提前为外部查询表中的每一行重新运行子查询。
- 而且我们有更有效的方法来编写所有不使用 EXISTS 条件的命令。
PostgreSQL EXISTS 条件示例
让我们看不同的例子来理解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表,以识别Client表中每个客户的详细信息的以下场景。
- 如果Client_details表中的client_id和Client表中的client_id (cd.client_id = c.client_id)相等。
- 并且client_salary大于30000 (client_salary > 30000)。
使用 INSERT 命令的 PostgreSQL EXISTS 条件示例
我们将展示如何通过INSERT命令使用EXISTS 条件。
为此,我们从Organization 数据库中获取员工、部门和工作表,以将一个表中的记录插入到另一个表中。
在下面的示例中,我们将员工表中的记录插入到部门表中。我们从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);
执行上面的命令后,我们会得到下面的消息窗口,显示该值已成功插入到部门表中。
要检查记录是否已插入到部门表中,我们将使用SELECT命令,如下所示:
Select * from department;
执行上述命令后,我们将得到以下输出:
在上面的截图中,我们可以看到PostgreSQL 的 EXISTS 条件成功地向department表中插入了 4 条记录。
热门文章
优秀文章