- 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 - 选择进入
- SQL - 插入选择
- SQL - 更新查询
- SQL - 删除查询
- SQL - 对结果进行排序
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL-Where 子句
- SQL - 顶部子句
- SQL - 不同子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL-Having 子句
- SQL - 与与或
- SQL - 布尔(位)运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY、ALL 运算符
- SQL - EXISTS 运算符
- SQL-案例
- SQL - NOT 运算符
- SQL - 不等于
- SQL - 为空
- SQL - 不为空
- SQL - 非空
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION 与 UNION ALL
- SQL - 相交运算符
- SQL - EXCEPT 运算符
- 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 - 非聚集索引
- 高级SQL
- SQL - 通配符
- SQL - 注释
- SQL-注入
- SQL-托管
- SQL - 最小值和最大值
- SQL - 空函数
- SQL - 检查约束
- SQL - 默认约束
- SQL-存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL-自动递增
- SQL - 日期和时间
- SQL-游标
- SQL - 公用表表达式
- SQL - 分组依据与排序依据
- 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 运算符检查子查询中是否存在一行或多行,并根据此条件返回 true 或 false。如果子查询找到至少一行,则 EXISTS 运算符返回 true;否则,返回 false。
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 运算符返回 true;否则为假。
例子
首先,让我们使用以下查询创建一个名为 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 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
2 | 基兰 | 25 | 德里 | 1500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
4 | 柴塔利 | 25 | 孟买 | 6500.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
6 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
7 | 莫菲 | 24 | 印多尔 | 10000.00 |
以下查询从 CUSTOMERS 表中检索 ID 为 1、2 或 3 的行的 NAME 和 SALARY 列。
SELECT NAME, SALARY FROM CUSTOMERS WHERE ID IN(1, 2, 3);
输出
执行上面的查询时,输出显示为 -
姓名 | 薪水 |
---|---|
拉梅什 | 2000.00 |
基兰 | 1500.00 |
考希克 | 2000.00 |
SQL EXISTS 运算符
EXISTS 运算符用于查找给定表中是否存在满足一组条件的行。它是一个布尔运算符,将子查询的结果与现有记录进行比较并返回 true 或 false。
如果子查询获取单个或多个记录,则返回值为 true;如果没有记录匹配,则返回 false。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 );
该表将创建如下 -
伊德 | 姓名 | 年龄 | 城市 | 接触 |
---|---|---|---|---|
1 | 瓦伦 | 32 | 艾哈迈达巴德 | 12345 |
2 | 马赫什 | 22 | 克什米尔 | 34235 |
3 | 苏雷什 | 43 | 喀拉拉邦 | 12355 |
在下面的查询中,我们使用 EXISTS 运算符来获取 AGE 与 EMPLOYEES 表中的 AGE 相同的 CUSTOMERS 的姓名和年龄。
SELECT NAME, AGE FROM CUSTOMERS WHERE EXISTS( SELECT * FROM EMPLOYEES WHERE CUSTOMERS.AGE = EMPLOYEES.AGE );
输出
以下是上述查询的输出 -
姓名 | 年龄 |
---|---|
拉梅什 | 32 |
科马尔 | 22 |
IN 与 EXIST
下表总结了 IN 和 EXISTS 之间的所有差异 -
编号 | 在 | 存在 |
---|---|---|
1 | 它应用于SQL查询中去除多个OR条件。 |
用于判断子查询中的数据是否真实存在。 |
2 | 它执行 IN 块中包含的所有值。 |
如果值匹配,则显示给定值的详细信息。如果满足条件,它将终止进一步的过程。 |
3 | 它可用于比较 null 值,因为它返回 true、false 和 null 值。 |
它不能用于比较 null 值,因为它仅返回 true 和 false 值。 |
4 | 它可以与子查询以及值一起使用。 |
它只能与子查询一起使用。 |
5 | 当子查询较小时,执行速度会更快。 |
当子查询较大时,执行速度会更快。因为它比 IN 更高效并且仅返回布尔值。 |