- 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 - 插入查询
- SQL - 选择查询
- SQL - Select Into
- SQL - Insert Into Select
- SQL - 更新查询
- SQL - 删除查询
- 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 与 UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - 内连接
- SQL - 左连接
- SQL - 右连接
- SQL - 交叉连接
- SQL - 全连接
- SQL - 自连接
- SQL - 删除连接
- SQL - 更新连接
- SQL - 左连接与右连接
- SQL - Union 与 Join
- SQL 键
- SQL - 唯一键
- SQL - 主键
- SQL - 外键
- SQL - 复合键
- SQL - 备用键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - 唯一索引
- SQL - 集群索引
- SQL - 非集群索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - Min & Max
- SQL - 空值函数
- SQL - 检查约束
- SQL - 默认约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复数据
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期和时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - Group By 与 Order By
- SQL - IN 与 EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
SQL - IN 与 EXISTS
在 SQL 中,我们使用 IN 运算符来简化查询并减少对多个 OR 条件的需求。它允许我们将一个值与一个值列表进行匹配。另一方面,EXISTS 运算符检查子查询中是否存在一行或多行,并根据此条件返回真或假。如果子查询找到至少一行,则 EXISTS 运算符返回真;否则,返回假。
SQL IN 运算符
SQL 中的 IN 运算符用于检查特定值是否与给定集合中的任何值匹配。此值集可以单独指定或从子查询中获取。我们可以将 IN 运算符与 WHERE 子句一起使用来简化查询并减少多个 OR 条件的使用。
假设我们有一个名为 CUSTOMERS 的表,我们希望根据其 ID 检索客户详细信息。在这种情况下,我们可以将 IN 运算符与 WHERE 子句一起使用来获取这些特定 ID 的详细信息。
语法
以下是 SQL **IN** 运算符的语法:
SELECT column_name FROM table_name WHERE column_name IN (value1, value2, valueN);
在上述语法中,column_name 与每个值 (value1, value2, ... valueN) 匹配。如果发生匹配,则 IN 运算符返回真;否则,返回假。
示例
首先,让我们使用以下查询创建一个名为 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 INTO 语句将记录添加到上面创建的表中,如下所示:
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 |
以下查询从 CUSTOMERS 表中检索 NAME 和 SALARY 列,其中 ID 为 1、2 或 3。
SELECT NAME, SALARY FROM CUSTOMERS WHERE ID IN(1, 2, 3);
输出
执行以上查询后,输出显示为:
姓名 | 薪资 |
---|---|
Ramesh | 2000.00 |
Khilan | 1500.00 |
Kaushik | 2000.00 |
SQL EXISTS 运算符
EXISTS 运算符用于查找给定表中是否存在满足一组条件的行。它是一个布尔运算符,将子查询的结果与现有记录进行比较,并返回真或假。
如果子查询获取单个或多个记录,则返回值为真;如果没有匹配的记录,则返回值为假。EXISTS 运算符遵循查询的效率特性,即当检测到第一个真事件时,它将自动停止进一步处理。
我们可以将 EXISTS 运算符与 **SELECT**、**UPDATE**、**INSERT** 和 **DELETE** 查询一起使用。
语法
以下是 SQL EXISTS 运算符的基本语法:
SELECT column_name FROM table_name WHERE EXISTS ( SELECT column_name FROM table_name WHERE condition );
示例
首先,考虑 CUSTOMERS 表,并使用以下查询创建另一个名为 EMPLOYEES 的表:
CREATE TABLE EMPLOYEES ( EID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, CITY CHAR (25), CONTACT INT, PRIMARY KEY (EID) );
现在,让我们使用 INSERT INTO 语句将一些记录插入到 EMPLOYEES 表中,如下所示:
INSERT INTO EMPLOYEES VALUES (1, 'Varun', 32, 'Ahmedabad', 12345), (2, 'Mahesh', 22, 'Kashmir', 34235 ), (3, 'Suresh', 43, 'Kerala', 12355 );
该表将创建如下:
EID | 姓名 | 年龄 | 城市 | 联系方式 |
---|---|---|---|---|
1 | Varun | 32 | Ahmedabad | 12345 |
2 | Mahesh | 22 | Kashmir | 34235 |
3 | Suresh | 43 | Kerala | 12355 |
在以下查询中,我们使用 EXISTS 运算符来获取 CUSTOMERS 的姓名和年龄,其年龄与 EMPLOYEES 表中的年龄相同。
SELECT NAME, AGE FROM CUSTOMERS WHERE EXISTS( SELECT * FROM EMPLOYEES WHERE CUSTOMERS.AGE = EMPLOYEES.AGE );
输出
以下是上述查询的输出:
姓名 | 年龄 |
---|---|
Ramesh | 32 |
Komal | 22 |
IN 与 EXISTS
下表总结了 IN 和 EXISTS 之间的所有区别:
序号 | IN | EXISTS |
---|---|---|
1 | 它应用于 SQL 查询以删除多个 OR 条件。 |
它用于查找子查询中的数据是否真正存在。 |
2 | 它执行 IN 块中包含的所有值。 |
如果值匹配,则显示给定值的详细信息。如果满足条件,它将终止进一步的过程。 |
3 | 它可用于比较空值,因为它返回真、假和空值。 |
它不能用于比较空值,因为它只返回真和假值。 |
4 | 它可以与子查询以及值一起使用。 |
它只能与子查询一起使用。 |
5 | 当子查询较小时,它执行速度更快。 |
当子查询较大时,它执行速度更快。因为它比 IN 更有效,并且只返回布尔值。 |