SQL IN和EXISTS的区别
总体上,为了使查询易于理解或避免在查询中使用多个OR条件,我们使用IN。 SQL中的IN运算符可以将表达式与值列表进行匹配。而EXISTS是用于返回布尔值(即真或假)的运算符。一般而言,如果EXISTS检查子查询中是否有一个或多个行可用,则返回true,否则返回false。
SQL IN
IN运算符用于检查指定值是否与值集中的任何其他值匹配。该值集可以通过单独指定或由任何子查询返回。
IN与WHERE子句一起使用,可以让我们使用多个值。它减少了在SELECT、UPDATE、INSERT和DELETE查询中使用多个OR条件语句的使用。
假设我们有一个名为Customers的表,我们想根据其ID查看客户的详细信息。在这种情况下,我们可以使用IN运算符和WHERE子句来获取这些ID的详细信息。
语法
以下是IN运算符的语法-
在上述语法中,column_name与每个值(val1,val2,… valN)匹配。如果匹配发生,则IN的值为真,否则IN的值为假。
示例
在以下示例中,我们正在创建一个SQL查询,该查询将从ID为1、2或3的customers表中获取客户的姓名和工资。
以下是customers表的内容−
以下是用于获取详细信息的SQL查询-
输出
当我们执行上述的SQL查询语句时,我们得到了ID为1、2或3的客户的姓名和工资。
SQL EXISTS
EXISTS操作符用于查找满足一组条件的给定表中的行的存在。它是一个布尔运算符,将子查询的结果与现有记录进行比较,并返回true或false。
如果子查询获取单个或多个记录,则返回值为true,如果没有匹配的记录,则返回false。它与子查询结合使用,检查通过此子查询是否返回了行。
EXISTS操作符遵循查询的效率特性。当检测到第一个真事件时,它将自动停止进一步处理。
我们可以将EXISTS操作符与SELECT、UPDATE、INSERT和DELETE查询一起使用。
语法
示例
在以下的 SQL 查询中,我们正在从员工表中获取与年龄匹配的客户的姓名和年龄。
以下是客户表 –
以下是员工表 –
以下是显示记录的SQL查询语句:-
输出
执行上述SQL查询时,如果两个表的年龄列匹配,使用exists运算符获得客户的姓名和年龄。
IN vs EXISTS
以下是IN与EXISTS的区别:
序号 | IN条件 | EXISTS条件 |
---|---|---|
1 | 用于SQL查询,删除多个OR条件。 | 用于判断子查询中的数据是否真正存在。 |
2 | 执行IN块中包含的所有值。 | 如果匹配该值,显示给定值的详细信息。如果条件满足,将终止进一步的处理。 |
3 | 可用于对null值进行比较,因为它返回true、false和null值。 | 不能用于对null值进行比较,因为它只返回true和false值。 |
4 | 可与子查询和值一起使用。 | 只能与子查询一起使用。 |
5 | 当子查询较小时执行较快。 | 当子查询较大时执行较快,因为它比IN更高效,只返回布尔值。 |