PostgreSQL Exists Condition PostgreSQL Between Condition PostgreSQL View PostgreSQL Exists Condition 在本节中,我们将了解PostgreSQL EXISTS Condition的工作,它与WHERE 子句一起用于评估子查询中的现有行。我们还看到了EXISTS 条件的**示例,其中包含不同的查询,例如INSERT、SELECT、NOT EXISTS、NULL、UPDATE 和 DELETE。 PostgreSQL EXISTS 条件介绍 在PostgreSQL 中,EXISTS条件可以与SELECT、NSERT、UPDATE和DELETE*命令结合使用。换句话说,我们可以说EXISTS条件用于检查子查询中是否存在任何数据,如果子查询返回多条记录,则返回true。 它用于与子查询分组并测试子查询中记录的存在。所述的PostgreSQL EXISTS条件是一种类型的布尔运算符,它返回真或假的结果。换句话说,我们可以说: 如果子查询返回任何记录,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。 以下命令将返回工资超过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_ID从Client_details\表,CLIENT_ID从客户端\表(cd.client_id = c.client_id)是相等的。 并且client_salary大于30000 (client_salary > 30000)。 带有 INSERT 命令的 PostgreSQL EXISTS 条件示例 我们将展示如何通过INSERT命令使用EXISTS 条件。 为此,我们从组织数据库中取出员工、部门\和工作\表,将记录从一个表插入到另一个表。 在以下示例中,我们将记录从员工\表插入部门\表。我们从emp_id和job_id在两个表中相等的emp_id和job_id从employee\表中获取电话和地址列记录。 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 条件成功地将4 条记录插入到了部门\表中。 使用 SELECT 命令的 PostgreSQL EXISTS 条件示例 在下面的示例中,我们将展示如何在带有两个条件的SELECT命令中使用EXISTS条件。 我们从Javatpoint数据库中取出Client\和Client_details\表,以从一张表中选择所有记录。 我们使用带有WHERE 子句的EXISTS 条件,因为我们可以看到以下命令: SELECT * FROM Client WHERE EXISTS (SELECT 1 FROM Client_details WHERE Client.client_id = client_details.client_id); 输出 执行上述命令后,我们将得到以下输出: 在上面的子查询语句中,我们使用了SELECT 1,这有助于我们提高性能,因为在Exists 条件中不需要列输出,因为只有返回行的存在才重要。 正如我们在上面的屏幕截图中看到的,PostgreSQL EXISTS条件将返回Client\表中的所有记录,其中Client_details\表中至少有一条记录具有相似的Client_id。 使用 NOT EXISTS 条件的 PostgreSQL EXIST 条件示例 在 PostgreSQL 中,我们还可以将NOT 条件与EXISTS条件结合起来。 带有EXISTS 条件的 PostgreSQL NOT 运算符用于获取那些值与列表值不匹配的行。 注意:NOT 条件与 EXISTS 条件的输出相矛盾。我们知道 NOT 条件与 EXISTS 条件完全相反,这意味着: 如果子查询不返回任何行,则NOT EXISTS条件将返回TRUE。 或者,如果子查询返回多行,则NOT EXISTS条件将返回FALSE。 为此,我们采用与上述示例类似的表(Client 和 client_details\)。 以下示例显示Not 条件和 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_details\表中没有给定client_id 的记录。 将 EXISTS 条件与 NULL 一起使用的示例 在 PostgreSQL 中,我们也可以使用EXISTS 条件和NULL。 PostgreSQL EXISTS Condition with NULL 用于获取子查询将返回NULL 的行,EXISTS 条件将返回TRUE。 为此,我们从Javatpoint数据库中获取员工\表。 让我们看下面的例子来了解Exists 条件如何与NULL 一起工作。 SELECT emp_fname, emp_lname FROM employee WHERE EXISTS (SELECT NULL) ORDER BY emp_fname, emp_lname; 输出 执行上述命令后,我们将得到以下输出: 在上面的例子中,子查询语句返回NULL。因此,该命令将返回员工\表中的所有行。 带有 UPDATE 命令的 PostgreSQL EXISTS 条件示例 在下面的示例中,我们将展示如何在UPDATE命令中使用EXISTS 条件。 为此,我们从Javatpoint数据库中获取Summer_fruits\和Winter_fruits\表。 在下面的命令时,PostgreSQL的EXISTS条件被用于更新Fruits_name列中的值summer_fruits\表作为的winter_fruits_name从柱winter_fruits\表所在的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\表已经更新成功。 我们现在将使用Select命令来检查summer_fruits\表中的特定记录是否已更新: SELECT * FROM summer_fruits; 输出 执行上述命令,我们将得到以下结果: 使用 DELETE 命令的 PostgreSQL EXISTS 条件示例 在下面的示例中,我们将展示如何通过DELETE命令使用EXISTS 条件。 在下面的示例中,我们将从JavatPoint数据库中获取Course\和Course_categories\表以从表中删除特定记录。 在下面的命令时,PostgreSQL的EXISTS条件是用于从删除所有记录课程\表所在的COURSE_ID从课程\表和course_category_id从Course_categories\表是相等的。 DELETE FROM Course WHERE EXISTS (SELECT 1 FROM Course_categories WHERE Course.course_id = Course_categories.course_category_id); 输出 执行上述命令后,我们将看到以下消息窗口,显示已成功从Course\表中删除记录。 我们现在将使用Select命令来检查Course\表中的特定记录是否已被删除: SELECT * FROM Course; 输出 成功执行上述命令后,我们将得到以下输出: 概述 在PostgreSQL EXISTS Condition部分,我们学习了以下主题: 使用的PostgreSQL EXISTS条件提供的优点的EXISTS条件,以评估在子查询行存在。 我们已经看到了带有子查询的EXISTS 条件的示例示例,以在子查询返回至少一行时检查是否满足条件。 我们使用EXISTS 条件和INSERT 命令将记录从一个表插入到另一个表。 我们使用EXISTS 条件和SELECT命令来获取特定的表记录。 我们在SELECT命令中使用了EXISTS 条件和NOT 运算符,以从特定表中获取不存在的记录。 我们使用带有NULL的EXISTS 条件来获取特定的表记录。 我们使用EXISTS 条件和UPDATE语句来更新表的记录。 我们使用EXISTS 条件和DELETE语句来删除特定表的记录。 PostgreSQL Between Condition PostgreSQL View