Mục lục
Điều kiện EXISTS trong SQL được sử dụng để kiểm tra sự tồn tại của bất kỳ bản ghi nào trong truy vấn phụ. Kết quả trả về của EXISTS là một giá trị boolean TRUE hoặc FALSE. Nó có thể được sử dụng trong câu lệnh SELECT, UPDATE, INSERT hoặc DELETE.
Cú pháp
SELECT column_name(s) FROM table_name WHERE EXISTS (SELECT column_name(s) FROM table_name WHERE condition);
Ví dụ chúng ta có bảng Customers và Orders sau
| customer_id | Lname | Fname | website |
| 401 | Singh | Dolly | abc.com |
| 402 | Chauhan | Anuj | def.com |
| 403 | Kumar | Niteesh | ghi.com |
| 404 | Gupta | Shubham | jkl.com |
| 405 | Walecha | Divya | abc.com |
| 406 | Jain | Sandeep | jkl.com |
| 407 | Mehta | Rajiv | abc.com |
| 408 | Mehra | Anand | abc.com |
Và bản Orders
| order_id | c_id | order_table |
| 1 | 407 | 2017-03-03 |
| 2 | 405 | 2017-03-05 |
| 3 | 408 | 2017-01-18 |
| 4 | 404 | 2017-02-05 |
Sử dụng EXISTS với SELECT
Để lấy họ và tên của những customer đã đặt ít nhất một đơn hàng.
SELECT fname, lname
FROM Customers
WHERE EXISTS (SELECT *
FROM Orders
WHERE Customers.customer_id = Orders.c_id);
Output
| fname | lname |
| Shubham | Gupta |
| Divya | Walecha |
| Rajiv | Mehta |
| Anand | Mehra |
Sử dụng NOT với EXISTS
Tìm nạp họ và tên của những Customer chưa đặt hàng.
SELECT lname, fname
FROM Customer
WHERE NOT EXISTS (SELECT *
FROM Orders
WHERE Customers.customer_id = Orders.c_id);
Output
| fname | lname |
| Singh | Dolly |
| Chauhan | Anuj |
| Kumar | Niteesh |
| Jain | Sandeep |
Sử dụng EXISTS Với DELETE
Xóa bản ghi của tất cả dòng trong bảng Order khi Custommer có họ là ‘Mehra’.
DELETE
FROM Orders
WHERE EXISTS (SELECT *
FROM customers
WHERE Customers.customer_id = Orders.cid
AND Customers.lname = 'Mehra');
SELECT * FROM Orders;
| order_id | c_id | order_table |
| 1 | 407 | 2017-03-03 |
| 2 | 405 | 2017-03-05 |
| 3 | 404 | 2017-02-05 |
Sử dụng EXISTS với UPDATE
Cập nhật tên là ‘Kumari’ của customer có customer_id là 401.
UPDATE Customers
SET lname = 'Kumari'
WHERE EXISTS (SELECT *
FROM Customers
WHERE customer_id = 401);
SELECT * FROM Customers;
Output
| customer_id | Lname | Fname | website |
| 401 | Kumari | Dolly | abc.com |
| 402 | Chauhan | Anuj | def.com |
| 403 | Kumar | Niteesh | ghi.com |
| 404 | Gupta | Shubham | jkl.com |
| 405 | Walecha | Divya | abc.com |
| 406 | Jain | Sandeep | jkl.com |
| 407 | Mehta | Rajiv | abc.com |
| 408 | Mehra | Anand | abc.com |