在使用子查询时,MySQL EXISTS和IN之间哪一个更可取?


EXISTS说明查询是否返回了结果,而IN则可用于将一个值与另一个值进行比较。IN使用文字值。

注意 - 当子查询结果非常小的时候,IN是子查询中的首选。如果子查询结果非常大,则使用EXISTS。

由于IN是子查询结果较小的情况下的首选,因此我们考虑一个IN的示例。

创建表。

mysql> create table InSubQueryDemo
   -> (
   -> PNumber int,
   -> PName varchar(100)
   -> );
Query OK, 0 rows affected (0.60 sec)

向表中插入记录。

mysql> insert into InSubQueryDemo values(1,'Laptop');
Query OK, 1 row affected (0.17 sec)

mysql>  insert into InSubQueryDemo values(2,'WirelessKeyboard');
Query OK, 1 row affected (0.21 sec)

mysql>  insert into InSubQueryDemo values(3,'WirelessMouse');
Query OK, 1 row affected (0.12 sec)

显示所有记录。

mysql> select *from InSubQueryDemo;

以下是输出。

+---------+------------------+
| PNumber | PName            |
+---------+------------------+
|       1 | Laptop           |
|       2 | WirelessKeyboard |
|       3 | WirelessMouse    |
+---------+------------------+
3 rows in set (0.00 sec)

以下是IN的语法,其中包括一个子查询来获取大于1的“PNumber”。

mysql> select *from InSubQueryDemo
   -> where PNumber IN (select PNumber from InSubQueryDemo  WHERE PNumber > 1);

以下是输出。

+---------+------------------+
| PNumber | PName            |
+---------+------------------+
|       2 | WirelessKeyboard |
|       3 | WirelessMouse    |
+---------+------------------+
2 rows in set (0.04 sec)

更新于:30-Jul-2019

63 次浏览

开启您的 职业生涯

完成课程获得认证

开始
广告