The EXISTS tells if the query returned results or not while IN can be used for comparing one value with other. IN uses literal values.
Note − IN is preferred in a subquery whenever a subquery result is very small. If the subquery result is very large then EXISTS is used.
Since IN is a preferred choice for subquery results that are smaller, we are considering an example of IN.
To create a table.
mysql> create table InSubQueryDemo -> ( -> PNumber int, -> PName varchar(100) -> ); Query OK, 0 rows affected (0.60 sec)
Inserting records into the table.
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)
Displaying all records.
mysql> select *from InSubQueryDemo;
The following is the output.
+---------+------------------+ | PNumber | PName | +---------+------------------+ | 1 | Laptop | | 2 | WirelessKeyboard | | 3 | WirelessMouse | +---------+------------------+ 3 rows in set (0.00 sec)
The following is the syntax for IN, that includes a subquery to fetch “PNumber” greater than 1.
mysql> select *from InSubQueryDemo -> where PNumber IN (select PNumber from InSubQueryDemo WHERE PNumber > 1);
Here is the output.
+---------+------------------+ | PNumber | PName | +---------+------------------+ | 2 | WirelessKeyboard | | 3 | WirelessMouse | +---------+------------------+ 2 rows in set (0.04 sec)