Computer >> Máy Tính >  >> Lập trình >> MySQL

Việc sử dụng toán tử EXIST và EXIST NOT với truy vấn con MySQL là gì?


Kiểm tra toán tử EXIST về sự tồn tại của các hàng trong tập kết quả của truy vấn con. Nếu một giá trị hàng truy vấn con được tìm thấy thì truy vấn con TỒN TẠI là TRUE và KHÔNG tồn tại truy vấn con nếu FALSE. Để minh họa điều đó, chúng tôi đang sử dụng các bảng "Ô tô", "Khách hàng" và "Đặt chỗ" có dữ liệu sau -

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)

Sau đây là truy vấn con MySQL với EXIST sử dụng các bảng được đề cập ở trên -

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ên cung cấp tên của những khách hàng đã đặt chỗ.

Sau đây là truy vấn con MySQL KHÔNG TỒN TẠI bằng cách sử dụng các bảng được đề cập ở trên -

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ên cung cấp tên của những khách hàng chưa đặt chỗ trước.