SQL EXISTS

2024 年 8 月 29 日 | 4 分钟阅读

本文将帮助您详细解释 EXISTS 函数在 SQL 中的工作原理,并提供大量示例。首先,让我们了解什么是 Exists 函数及其语法。

EXISTS() 函数用于检查子查询中是否存在任何记录。如果子查询包含至少一条记录,则返回 true。以下是 SQL EXISTS() 函数语法的列表。它与 SELECT、UPDATE、DELETE 语句以及 WHERE 子句结合使用。

语法

EXISTS 关键字在此语法中位于括号内的子查询之前。之后,它有一个通过对其进行求值来返回行的子查询。EXIST 函数根据子查询返回 true 或 false;如果子查询生成至少一条记录,则 EXISTS 函数返回 true,否则返回 false。

EXISTS 函数可用于过滤结果,也可与其他逻辑运算符(如 NOT、AND 和 OR)结合使用,以构建更复杂的过滤条件。例如,您可以根据另一张表中是否存在相关数据来更新数据库中的所有记录,或者使用 EXISTS 来查找过去一个月内下过订单的所有客户。

EXISTS 函数的用法

  • 搜索多对多关系中的记录: EXIST 函数可用于识别多对多关系中连接表中的记录。例如,检索在特定系学习的所有学生。
  • 基于相关记录的存在来检索记录: 此 SQL 函数可用于基于另一张表中是否存在相关记录来检索记录。例如,查找所有有相关订单明细的订单。
  • 增强查询: EXISTS 函数通过仅显示所需数据来增强查询的处理。假设我们想在不使用自连接的情况下找出每个员工的第一个工作日。

请考虑以下示例来理解 SQL EXISTS() 函数的功能。

1. 将 EXISTS 与 SELECT 语句结合使用

请参考以下 Student 和 Student_joining 表来理解 EXISTS() 函数的功能。

Roll_nonamedepartment
134AnishCSE
135RahulECE
136SmithaIT
137Ganesh机械
138ArunEEE

表:Student

Roll_noAdmission_nojoining_date
134AS12323-11-2020
136AS12621-08-2021
137AS12721-08-2021

表:Student_joining

现在,让我们从 student 表中提取所有在 student_joining 表中至少有一条记录(具有相同的 Roll_no)的记录。

上述查询的输出

Roll_nonamedepartment
134AnishCSE
136SmithaIT
137Ganesh机械

这是另一个使用 EXISTS 函数和 select 语句的示例。让我们考虑以下 employee 和 department 表。

emp_idemp_namesalary
45Ramesh25000
46Rahim20000
47Sruthi30000
48Swetha35000

表:employee

emp_iddepartment_namedepartment_id
45HR33
47开发35
48marketing36

表:department

现在,我们将使用以下查询根据两个列中都存在的 emp_id 来提取 employee 表中的所有记录。

输出

emp_idemp_namesalary
45Ramesh25000
47Sruthi30000
48Swetha35000

2. 将 EXISTS 与 UPDATE 语句结合使用

请参考以下 product 表来理解 EXISTS 函数与 UPDATE 语句的功能。

product_idproduct_namecategory_id
1笔记本电脑22
2Shirt24
3牛仔裤24
4移动端22
525

表:product

在这里,我们将使用 UPDATE 和 EXISTS 函数的组合来更新 book 的 category_id。

输出

product_idproduct_namecategory_id
1笔记本电脑22
2Shirt24
3牛仔裤24
4移动端22
523

3. 将 NOT 与 EXISTS 结合使用

请参考以下两个表(employee、department)来理解 EXISTS 函数与 NOT 函数结合使用时的功能。

emp_idemp_namesalary
452Dhanush30000
453Vennela25000
454Hari40000
455Priyanka35000
456Karun12000

表:employee

emp_iddepartment_namedepartment_id
452开发33
454HR35
455R&D36

表:department

在这里,我们将提取 employee 表中不存在于 department 表中的所有记录。

输出

emp_idemp_namesalary
453Vennela25000
456Karun12000

4. 将 EXISTS 与 DELETE 语句结合使用

考虑 product 和 product_category 这两个表。这两个表用于演示 EXISTS 函数如何与 DELETE 语句结合使用。

product_idproduct_namecategory_id
1笔记本电脑22
2Shirt24
3牛仔裤24
4移动端22
525

表:product

product_idcategory
1电子行业
2服装
3服装
4电子行业
5固定不变(Stationary)

表:product_category

在这里,我们将删除 product 表中所有产品类别为 Electronics 的记录。

输出

product_idproduct_namecategory_id
2Shirt24
3牛仔裤24
525