SQL 中的 IN 与 EXISTS
SQL 代表结构化查询语言。它用于在数据库中存储数据、修改或操作数据库中的数据以及从数据库中检索数据。我们可以说 SQL 在关系数据库管理系统 (RDBMS) 中管理数据。
用于与数据库通信以执行任务、功能和数据查询的指令称为 SQL 语句。 SQL 不区分大小写。通常,SQL 关键字以大写形式编写。
SQL 中的 IN 运算符:
为了将表达式与值列表进行匹配,SQL 提供了 IN 运算符。所以我们不需要在 SELECT、UPDATE 等中使用多个 OR 条件。
我们可以直接列出值,也可以向 IN运算符提供查询结果。
Syntax : SELECT columnName(s) FROM tableName WHERE columnNamex IN (value1, value2, ...);
此处ColumnNameX与列表中的每个值(value1、value2、...)匹配。如果发生匹配,则 IN 评估为 TRUE,如果发生不匹配,则 IN 评估为 FALSE。
假设我们有一个名为“Customers”的表:
现在我们想查看 id 可以是 1 或 2 或 5 或 6 或 7 的客户的详细信息,我们可以使用 IN运算符并给出一组值进行检查。
SQL 中的现有运算符:
如果参数子查询非空,则存在构造返回值真,否则假。要检查是否通过此子查询返回行,请使用它。如果通过执行子查询返回一行或多行,则返回 True,否则,如果没有返回行,则返回 False。
Syntax :
SELECT columnName(s) FROM tableName1 WHERE EXISTS
(subquery);
subquery is of the form : SELECT columnName FROM tableName2 WHERE condition
这里首先执行子查询。
子查询是一个 SELECT 语句。如果子查询在其结果集中返回至少一条记录,则将满足 EXISTS 条件并返回 TRUE,否则将不满足 EXISTS 条件并返回 FALSE。
注意:子查询为外部查询表中的每一行返回。
现在,假设我们有另一个表: “帐户”为:
现在要查看存在任何类型帐户的所有客户,我们可以使用exists关键字作为:
我们在这里检查:将客户表中的每个CUSTOMERID与帐户表中的 CUSTOMERID 匹配。
如果 CUSTOMER.CUSTOMERID = ACCOUNTS.CUSTOMERID 在子查询中评估为真,则返回一行,因此子查询评估为真,我们的外部查询(Select * from Customer)为该特定客户执行。
注意:要做同样的事情,即查看存在任何类型帐户的所有客户,我们也可以使用IN关键字:
IN & EXISTS 运算符之间的主要区别是: IN Operator EXISTS Operator 1. IN can be used as a replacement for multiple OR operators. To determine if any values are returned or not, we use EXISTS. 2. IN works faster than the EXISTS Operator when If the sub-query result is small. If the sub-query result is larger, then EXISTS works faster than the IN Operator. 3. In the IN-condition SQL Engine compares all the values in the IN Clause. Once true is evaluated in the EXISTS condition then the SQL Engine will stop the process of further matching. 4. To check against only a single column, IN operator can be used. For checking against more than one single column, you can use the EXISTS Operator. 5. The IN operator cannot compare anything with NULL values. The EXISTS clause can compare everything with NULLs. 6. A direct set of values can be given for comparison. Cannot compare directly the values, sub-query needs to be given.