Tags:

SQL | EXISTS Kiểm tra sự tồn tại trong SQL

Đ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

 

5 3 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x