SQL EXISTS函数

SQL EXISTS函数

这篇文章将为您提供关于SQL中exists函数工作原理的详细解释,包括许多示例。首先,让我们了解exists函数是什么,以及它的语法。

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

语法:

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name(s) FROM table_name WHERE condition);

存在关键字出现在语法中子查询之前,子查询用括号括起来。之后,它有一个返回通过评估的行的子查询。EXIST函数根据子查询返回true或false,如果子查询生成至少一个记录,EXIST函数返回true,否则返回false。

EXIST函数可以用于筛选结果,也可以与其他逻辑运算符(如NOT,AND和OR)一起使用,以构建更多的筛选条件。例如,您可以根据另一个表中相关数据的存在性更新数据库中的所有记录,或者您可以使用EXIST函数查找在过去一个月内有购买记录的所有客户。

使用EXIST函数的方法

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

请考虑以下示例以了解SQL EXISTS()函数的运行方式。

1. 使用SELECT语句和EXIST函数

考虑以下学生和学生加入表,以了解EXIST()函数的运行方式。

Roll_no name department
134 Anish CSE
135 Rahul ECE
136 Smitha IT
137 Ganesh Mechanical
138 Arun EEE

表格:学生

Roll_no Admission_no joining_date
134 AS123 23-11-2020
136 AS126 21-08-2021
137 AS127 21-08-2021

表格:Student_joining

现在让我们从学生表中提取所有在Student_joining表中至少有一条与学生学号相同的记录。

SELECT * FROM Student WHERE EXISTS(SELECT * FROM Student_joining WHERE Student.Roll_no = Student_joining.Roll_no);

以上查询的输出:

Roll_no name department
134 Anish CSE
136 Smitha IT
137 Ganesh Mechanical

这也是一个使用SELECT语句和EXISTS函数的另一个例子。让我们看一下以下的员工和部门表。

emp_id emp_name salary
45 Ramesh 25000
46 Rahim 20000
47 Sruthi 30000
48 Swetha 35000

表:employee

emp_id department_name department_id
45 HR 33
47 Development 35
48 marketing 36

表: department

现在,我们将使用以下查询根据同时存在于两列中的emp_id,从employee表中获取所有记录。

SELECT * FROM employee table WHERE EXISTS(SELECT * FROM department  WHERE employee.emp_id = department.emp_id);

输出:

emp_id emp_name salary
45 Ramesh 25000
47 Sruthi 30000
48 Swetha 35000

2. 使用UPDATE语句与EXISTS函数

考虑以下产品表,以了解EXISTS函数与UPDATE语句的功能。

product_id product_name category_id
1 Laptop 22
2 Shirt 24
3 Jeans 24
4 Mobile 22
5 Book 25

表:product

在这里,我们将通过使用UPDATE和EXISTS函数组合来更新图书的category_id

UPDATE product SET category_id = 23 WHERE EXISTS(SELECT * FROM product WHERE product_id = 5);
SELECT * FROM product;

输出:

product_id product_name category_id
1 Laptop 22
2 Shirt 24
3 Jeans 24
4 Mobile 22
5 Book 23

3. 使用NOT与EXISTS

考虑下面的两个表(employee, department),以了解当将EXISTS函数与NOT函数组合使用时的功能。

emp_id emp_name salary
452 Dhanush 30000
453 Vennela 25000
454 Hari 40000
455 Priyanka 35000
456 Karun 12000

表:员工

emp_id department_name department_id
452 Development 33
454 HR 35
455 R&D 36

表:department

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

SELECT * FROM employee WHERE NOT EXISTS (SELECT * FROM department WHERE employee.emp_id = department.emp_id;

输出:

emp_id emp_name salary
453 Vennela 25000
456 Karun 12000

4. 使用DELETE语句与EXISTS

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

product_id product_name category_id
1 Laptop 22
2 Shirt 24
3 Jeans 24
4 Mobile 22
5 Book 25

表格:产品

product_id category
1 Electronics
2 Clothing
3 Clothing
4 Electronics
5 Stationary

表格:product_category

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

DELETE FROM product WHERE EXISTS(SELECT * FROM product_category WHERE product.product_id = product_category.product_id AND product_category.category = "Electronics");

SELECT * FROM product;

输出:

product_id product_name category_id
2 Shirt 24
3 Jeans 24
5 Book 25

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程