- SQL 教程
- SQL - 首页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL 数据库
- SQL - 创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL - 备份数据库
- SQL 表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 截断表
- SQL - 克隆表
- SQL - 临时表
- SQL - 修改表
- SQL - 删除表
- SQL - 删除表
- SQL - 约束
- SQL 查询
- SQL - INSERT 查询
- SQL - SELECT 查询
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查询
- SQL - DELETE 查询
- SQL - 排序结果
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布尔 (BIT) 运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY, ALL 运算符
- SQL - EXISTS 运算符
- SQL - CASE
- SQL - NOT 运算符
- SQL - 不等于
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自连接
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 密钥
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 组合键
- SQL - 候选键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - UNIQUE 索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - MIN & MAX
- SQL - NULL 函数
- SQL - CHECK 约束
- SQL - DEFAULT 约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期 & 时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本 & 图片函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
SQL - EXISTS 运算符
SQL EXISTS 运算符
SQL EXISTS 运算符用于验证特定记录是否存在于 MySQL 表中。使用此运算符时,需要使用子查询指定要检查其存在的记录。
EXISTS 运算符用于SELECT 语句的WHERE 子句中,根据另一表中相关记录的存在与否来筛选记录。
它是一个逻辑运算符。
它返回布尔值 TRUE 或 FALSE。
如果子查询返回至少一条记录,则返回 TRUE。
如果 EXISTS 运算符返回 TRUE,则外部查询将执行;否则不执行。
它可以用于 SELECT、UPDATE、DELETE 或 INSERT 语句。
EXISTS 运算符比其他运算符(如 IN)更高效,因为它只需要确定子查询是否返回任何行,而不需要实际返回数据。
在许多现实场景中,使用 EXISTS 运算符是筛选数据的有效方法,包括根据相关数据的是否存在筛选记录、根据相关记录的存在与否聚合数据以及优化查询。
语法
SQL EXISTS 运算符的基本语法如下:
WHERE EXISTS (subquery);
其中,使用的子查询是 SELECT 语句。如果子查询在其结果集中返回至少一条记录,则 EXISTS 运算符将评估为 TRUE;否则为 FALSE。
EXISTS 运算符与 SELECT 语句
SQL 中的 SELECT 语句用于从数据库中的一个或多个表中检索数据。我们可以将 EXISTS 运算符与 SELECT 语句一起使用,以检查满足特定条件的行是否存在。
示例
为了更好地理解它,让我们考虑 CUSTOMERS 表,该表包含客户的个人详细信息,包括他们的姓名、年龄、地址和工资等,如下所示:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
现在,使用 INSERT 语句将值插入此表:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500.00 ), (3, 'Kaushik', 23, 'Kota', 2000.00 ), (4, 'Chaitali', 25, 'Mumbai', 6500.00 ), (5, 'Hardik', 27, 'Bhopal', 8500.00 ), (6, 'Komal', 22, 'Hyderabad', 4500.00 ), (7, 'Muffy', 24, 'Indore', 10000.00 );
表将如下创建:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
让我们创建另一个表CARS,其中包含客户 ID、汽车名称和价格等详细信息,使用以下查询:
create table CARS( ID INT NOT NULL, NAME VARCHAR(20) NOT NULL, PRICE INT NOT NULL, PRIMARY KEY(ID) );
使用 INSERT 语句,让我们将值插入此表:
insert INTO CARS VALUES (2, 'Maruti Swift', 450000), (4, 'VOLVO', 2250000), (7, 'Toyota', 2400000);
获得的“CARS”表如下:
ID | 姓名 | 价格 |
---|---|---|
2 | Maruti Swift | 450000 |
4 | VOLVO | 2250000 |
7 | Toyota | 2400000 |
现在,我们正在检索汽车价格高于 2,000,000 的客户列表:
SELECT * FROM CUSTOMERS WHERE EXISTS ( SELECT PRICE FROM CARS WHERE CARS.ID = CUSTOMERS.ID AND PRICE > 2000000 );
输出
产生的结果如下:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
4 | Chaitali | 25 | Mumbai | 6500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
EXISTS 运算符与 UPDATE 语句
我们还可以将 SQL EXISTS 运算符与 UPDATE 语句一起使用。它可以帮助我们根据另一表中匹配行的存在来更新表中的行。
示例
假设我们想更改先前创建的 CUSTOMERS 和 CARS 表中某些客户的姓名,那么可以使用 UPDATE 语句来完成此操作。在这里,我们使用EXISTS 运算符修改所有其 ID 等于 CARS 表 ID 的客户的姓名“Kushal”,如下所示:
UPDATE CUSTOMERS SET NAME = 'Kushal' WHERE EXISTS ( SELECT NAME FROM CARS WHERE CUSTOMERS.ID = CARS.ID );
输出
我们得到以下结果。我们可以观察到已修改了 3 行:
Query OK, 3 rows affected (0.01 sec) Rows matched: 3 Changed: 3 Warnings: 0
验证
我们可以使用 SELECT 语句检索其内容来验证更改是否反映在表中。以下是显示 CUSTOMERS 表中记录的查询:
SELECT * FROM CUSTOMERS;
表显示如下:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Kushal | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Kushal | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Kushal | 24 | Indore | 10000.00 |
正如我们在上表中看到的,'Khilan'、'Chaitali' 和 'Muffy' 的 NAME 已更新为 'Kushal'。
EXISTS 运算符与 DELETE 语句
EXISTS 运算符也可以与 DELETE 语句一起使用,以根据子查询返回的行是否存在来删除行。
示例
在这里,我们正在删除 CUSTOMERS 表中 ID 等于 CARS 表中价格等于“2250000”的 ID 的行:
DELETE FROM CUSTOMERS WHERE EXISTS ( SELECT * FROM CARS WHERE CARS.ID = CUSTOMERS.ID AND CARS.PRICE = 2250000 );
输出
我们得到以下结果。我们可以观察到已删除 1 行:
Query OK, 1 row affected (0.01 sec)
验证
我们可以使用以下查询来纠正对 CUSTOMERS 表所做的更改:
SELECT * FROM CUSTOMERS;
表显示如下:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
正如我们在上表中看到的,NAME 为“Chaitali”的行已被删除,因为 CUSTOMERS 表中 Chaitali 的 ID 为“4”,这等于 CARS 表中价格等于“2250000”的 ID。
NOT 运算符与 EXISTS 运算符
在 SQL 中,NOT EXISTS 运算符用于从一个表中选择在另一个表中不存在的记录。
语法
以下是 SQL 中 NOT EXISTS 运算符的基本语法:
WHERE NOT EXISTS (subquery);
其中,使用的子查询是 SELECT 语句。
示例
以下查询列出了尚未购买任何汽车的客户姓名:
SELECT * FROM CUSTOMERS WHERE NOT EXISTS ( SELECT * FROM CARS WHERE CUSTOMERS.ID = CARS.ID );
输出
执行上述查询后获得以下输出:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
SQL EXISTS 运算符的用法
SQL 中的 EXISTS 运算符广泛用于现实场景中,以根据另一表中相关数据的是否存在来筛选记录。一些常见的用例包括:
检查多对多关系中记录的存在与否 - EXISTS 运算符可用于检查多对多关系的联接表中是否存在记录,例如,查找已购买特定产品的所有客户。
根据相关记录的存在与否筛选记录 - EXISTS 运算符可用于根据另一表中相关记录的存在与否筛选记录。例如,查找所有具有关联订单详细信息的订单。
根据相关记录的存在与否聚合数据 - EXISTS 运算符可用于根据相关记录的存在与否聚合数据。例如,查找已下订单的客户数量。
优化查询 - EXISTS 运算符可用于优化查询,方法是仅返回必要的数据。例如,查找每个客户的第一个订单,而无需使用自连接。
这些只是 EXISTS 运算符如何在现实场景中使用的一些示例。具体的用例将取决于数据和查询的要求。