Computer >> Computer tutorials >  >> Programming >> MySQL

What is the use of EXIST and EXIST NOT operator with MySQL subqueries?


The EXIST operator test for the existence of rows in the result set of the subquery. If a subquery row value is found then EXISTS subquery is TRUE and NOT EXISTS subquery if FALSE. To illustrate it we are using the tables ‘Cars’, ‘Customers’ and ‘Reservations’ having the following data −

mysql> Select * from Cars;
+------+--------------+---------+
| ID   | Name         | Price   |
+------+--------------+---------+
|    1 | Nexa         | 750000  |
|    2 | Maruti Swift | 450000  |
|    3 | BMW          | 4450000 |
|    4 | VOLVO        | 2250000 |
|    5 | Alto         | 250000  |
|    6 | Skoda        | 1250000 |
|    7 | Toyota       | 2400000 |
|    8 | Ford         | 1100000 |
+------+--------------+---------+
8 rows in set (0.02 sec)

mysql> Select * from Customers;
+-------------+----------+
| Customer_Id | Name     |
+-------------+----------+
|           1 | Rahul    |
|           2 | Yashpal  |
|           3 | Gaurav   |
|           4 | Virender |
+-------------+----------+
4 rows in set (0.00 sec)

mysql> Select * from Reservations;
+------+-------------+------------+
| ID   | Customer_id | Day        |
+------+-------------+------------+
|    1 |           1 | 2017-12-30 |
|    2 |           2 | 2017-12-28 |
|    3 |           2 | 2017-12-29 |
|    4 |           1 | 2017-12-25 |
|    5 |           3 | 2017-12-26 |
+------+-------------+------------+
5 rows in set (0.00 sec)

Following is MySQL subquery with EXIST using the above-mentioned tables −

mysql> Select Name from customers WHERE EXISTS (SELECT * FROM Reservations WHERE Customers.customer_id = Reservations.customer_id);
+---------+
| Name    |
+---------+
| Rahul   |
| Yashpal |
| Gaurav  |
+---------+
3 rows in set (0.06 sec)

The above query gives the names of the customers who have made a reservation.

Following is MySQL subquery with NOT EXIST using the above-mentioned tables −

mysql> Select Name from customers WHERE NOT EXISTS (SELECT * FROM Reservations WHERE Customers.customer_id = Reservations.customer_id);
+----------+
| Name     |
+----------+
| Virender |
+----------+
1 row in set (0.04 sec)

The above query gives the names of the customers who have not made any reservation.