在使用子查询时,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)
广告