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 |