SQL IN和EXISTS的区别

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运算符的语法-

SELECT Columns_name FROM table_name WHERE column_name IN (val1, val2, …, valN);

在上述语法中,column_name与每个值(val1,val2,… valN)匹配。如果匹配发生,则IN的值为真,否则IN的值为假。

示例

在以下示例中,我们正在创建一个SQL查询,该查询将从ID为1、2或3的customers表中获取客户的姓名和工资。

以下是customers表的内容−

+------+----------+------+-----------+--------+
| ID   | NAME     | AGE  | ADDRESS   | SALARY |
+------+----------+------+-----------+--------+
|    1 | Ramesh   |   32 | Ahmedabad |   2000 |
|    3 | kaushik  |   23 | Kota      |   2000 |
|    4 | Chaitali |   25 | Mumbai    |   6500 |
|    2 | Aman     |   23 | Ranchi    |  40000 |
+------+----------+------+-----------+--------+

以下是用于获取详细信息的SQL查询-

SELECT Name, Salary FROM customers WHERE ID IN(1, 2, 3);

输出

当我们执行上述的SQL查询语句时,我们得到了ID为1、2或3的客户的姓名和工资。

+---------+--------+
| Name    | Salary |
+---------+--------+
| Ramesh  |   2000 |
| kaushik |   2000 |
| Aman    |  40000 |
+---------+--------+

SQL EXISTS

EXISTS操作符用于查找满足一组条件的给定表中的行的存在。它是一个布尔运算符,将子查询的结果与现有记录进行比较,并返回true或false。

如果子查询获取单个或多个记录,则返回值为true,如果没有匹配的记录,则返回false。它与子查询结合使用,检查通过此子查询是否返回了行。

EXISTS操作符遵循查询的效率特性。当检测到第一个真事件时,它将自动停止进一步处理。

我们可以将EXISTS操作符与SELECT、UPDATE、INSERT和DELETE查询一起使用。

语法

SELECT column_name FROM table_name
WHERE EXISTS(
SELECT column_name FROM table_name
WHERE condition );

示例

在以下的 SQL 查询中,我们正在从员工表中获取与年龄匹配的客户的姓名和年龄。

以下是客户表 –

+------+----------+------+-----------+--------+
| ID   | NAME     | AGE  | ADDRESS   | SALARY |
+------+----------+------+-----------+--------+
|    1 | Ramesh   |   32 | Ahmedabad |   2000 |
|    3 | kaushik  |   23 | Kota      |   2000 |
|    4 | Chaitali |   25 | Mumbai    |   6500 |
|    2 | Aman     |   23 | Ranchi    |  40000 |
+------+----------+------+-----------+--------+

以下是员工表 –

+-----+-------+-----+--------+------------+
| EID | NAME  | AGE | CITY   | C_Phone    |
+-----+-------+-----+--------+------------+
|   1 | Aman  |  23 | Ranchi | 1122567800 |
|   2 | Vivek |  25 | Ranchi | 9304567890 |
+-----+-------+-----+--------+------------+

以下是显示记录的SQL查询语句:-

SELECT NAME, AGE FROM customers WHERE EXISTS( SELECT * FROM employeeS WHERE customers.AGE = employees.AGE);

输出

执行上述SQL查询时,如果两个表的年龄列匹配,使用exists运算符获得客户的姓名和年龄。

+----------+------+
| NAME     | AGE  |
+----------+------+
| kaushik  |   23 |
| Chaitali |   25 |
| Aman     |   23 |
+----------+------+

IN vs EXISTS

以下是IN与EXISTS的区别:

序号 IN条件 EXISTS条件
1 用于SQL查询,删除多个OR条件。 用于判断子查询中的数据是否真正存在。
2 执行IN块中包含的所有值。 如果匹配该值,显示给定值的详细信息。如果条件满足,将终止进一步的处理。
3 可用于对null值进行比较,因为它返回true、false和null值。 不能用于对null值进行比较,因为它只返回true和false值。
4 可与子查询和值一起使用。 只能与子查询一起使用。
5 当子查询较小时执行较快。 当子查询较大时执行较快,因为它比IN更高效,只返回布尔值。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程