Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sử dụng toán tử EXISTS và NOT EXISTS với truy vấn con MySQL


Toán tử EXISTS kiểm tra sự tồn tại của hàng trong tập kết quả của truy vấn con. Nếu tìm thấy hàng, EXISTS trả về TRUE, NOT EXISTS trả về FALSE.

Minh họa với 3 bảng: Cars, Customers, Reservations:

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 |
+------+--------------+---------+

mysql> Select * from Customers;
+-------------+----------+
| Customer_Id | Name     |
+-------------+----------+
|           1 | Rahul    |
|           2 | Yashpal  |
|           3 | Gaurav   |
|           4 | Virender |
+-------------+----------+

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 |
+------+-------------+------------+

Ví dụ EXISTS

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)

Truy vấn trả về tên khách hàng đã đặt chỗ (có bản ghi trong Reservations).

Ví dụ NOT EXISTS

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)

Truy vấn trả về tên khách hàng chưa đặt chỗ nào (không có bản ghi trong Reservations).