SQL IN so với SQL EXISTS
Bài viết này thảo luận chi tiết về toán tử IN và EXISTS trong SQL . Đó là một câu hỏi phổ biến giữa các nhà phát triển rằng sự khác biệt giữa hai nhà khai thác này là gì. Để biết sự khác biệt, trước tiên chúng ta hãy thảo luận chi tiết về từng toán tử này.
Nhà điều hành IN
Toán tử IN được sử dụng để nhận kết quả khi một giá trị được chỉ định khớp với một giá trị trong một tập giá trị hoặc được trả về bởi một truy vấn bên trong. Toán tử này cũng có thể được sử dụng với WHERE mệnh đề để chỉ định nhiều hơn một giá trị. Toán tử IN thường được gọi là từ viết tắt của toán tử OR vì nó làm giảm việc sử dụng nhiều điều kiện OR trong các truy vấn CHỌN, CHÈN, CẬP NHẬT hoặc XÓA .
Trong toán tử này, truy vấn con được giải quyết đầu tiên và kết quả đó sau đó được sử dụng để giải quyết truy vấn bên ngoài.
Sau đây là cú pháp chung của toán tử IN:
SELECT column_name FROM table_name WHERE column_name IN (value1, value2, …);
Ví dụ:
Hãy xem xét bảng Khách hàng sau đây.
Cust_id | Cust_name | Thành phố | Nghề nghiệp |
1 | Harry | Kolkata | Doanh nghiệp |
2 | Ron | Mumbai | Bác sĩ |
3 | Albus | Delhi | Kỹ sư |
4 | Sở thích | Pune | Nhà khoa học |
5 | Snape | Bangalore | Sinh viên |
Truy vấn:
SELECT * FROM Customer WHERE Occupation IN ('Doctor', 'Scientist', 'Engineer');
Truy vấn trên sẽ trả về tất cả các khách hàng là Tiến sĩ hoặc Nhà khoa học hoặc Kỹ sư.
Đầu ra:
Cust_id | Cust_name | Thành phố | Nghề nghiệp |
2 | Ron | Mumbai | Bác sĩ |
3 | Albus | Delhi | Kỹ sư |
4 | Sở thích | Pune | Nhà khoa học |
Nhà điều hành TỒN TẠI
Toán tử EXISTS, không giống như toán tử IN, trả về giá trị Boolean. Toán tử này kiểm tra kết quả của truy vấn bên trong và trả về giá trị Boolean, tức là đúng hoặc sai. Nếu truy vấn bên trong trả về một bản ghi duy nhất hoặc nhiều bản ghi, thì toán tử trả về giá trị true nếu không, toán tử trả về giá trị false khi không tìm thấy bản ghi nào.
Toán tử này cũng hiệu quả vì nó ngừng xử lý thêm ngay sau khi sự kiện đúng đầu tiên được phát hiện.
Sau đây là cú pháp của toán tử EXISTS:
SELECT column_names FROM table_name WHERE NOT EXISTS ( SELECT column_names FROM table_name WHERE condition );
Ví dụ:
Hãy xem xét bảng Khách hàng sau đây.
Cust_id | Tên | Nghề nghiệp | Tuổi |
101 | Harry | Kỹ sư | 32 |
102 | Ron | Nhà phát triển | 30 |
103 | Sở thích | Trưởng nhóm | 28 |
104 | Albus | Nhà khoa học | 45 |
105 | Snape | Thợ mộc | 26 |
106 | Gừng | Diễn viên | 25 |
107 | KHÔNG ĐẦY ĐỦ | KHÔNG ĐẦY ĐỦ | KHÔNG ĐẦY ĐỦ |
Hãy xem xét một bảng khác Đơn hàng.
Order_id | Cust_id | Product_name | Order_date |
1 | 101 | Máy tính xách tay | 2021-01-10 |
2 | 103 | Máy tính để bàn | 2021-02-12 |
3 | 106 | iPhone | 2021-02-15 |
4 | 104 | Di động | 2021-03-05 |
5 | 102 | TV | 2021-03-20 |
Truy vấn:
SELECT Name, Occupation FROM Customer WHERE EXISTS ( SELECT * FROM Orders WHERE Customer.Cust_id = Orders.Cust_id );
Truy vấn trên sẽ trả về tên và nghề nghiệp của tất cả những khách hàng đã đặt ít nhất một đơn hàng.
Đầu ra:
Name | Nghề nghiệp |
Harry | Kỹ sư |
Ron | Nhà phát triển |
Sở thích | Trưởng nhóm |
Albus | Nhà khoa học |
Ginger | Diễn viên |
Bảng khác biệt giữa toán tử IN và EXISTS
Sự khác biệt chính giữa toán tử IN và toán tử EXISTS được liệt kê dưới đây theo cách dạng bảng:
IN Operator | Toán tử HIỆN TẠI |
Nó giảm thiểu việc sử dụng các điều kiện OR. | Nó kiểm tra sự tồn tại của một bản ghi trong truy vấn bên trong. |
Nó so sánh các giá trị của truy vấn bên trong với giá trị của truy vấn bên ngoài. | Nó không so sánh các giá trị giữa truy vấn bên trong và truy vấn phụ. |
Nó kiểm tra tất cả các giá trị bên trong khối của mệnh đề IN. | Nó dừng bất kỳ quá trình thực thi nào nữa ngay sau khi điều kiện đúng đầu tiên được đáp ứng. |
Nó có thể trả về TRUE, FALSE hoặc NULL. | Nó trả về TRUE hoặc FALSE. |
Nó có thể được sử dụng để kiểm tra các giá trị NULL. | Nó không thể được sử dụng để kiểm tra giá trị NULL. |
Nó được sử dụng với cả truy vấn con và giá trị. | Nó chỉ được sử dụng với các truy vấn con. |
Thực thi nhanh hơn khi kết quả của truy vấn bên trong ít hơn. | Việc thực thi nhanh hơn ngay cả khi kết quả của truy vấn bên trong lớn. Nó hiệu quả hơn toán tử IN. |
Cú pháp :SELECT column_names FROM table_name WHERE column_name IN (truy vấn con); | Cú pháp :SELECT column_namesFROM table_nameWHERE [NOT] EXISTS (subquery); |
Kết luận:
Trong chủ đề này, một phép so sánh đã được thực hiện giữa toán tử IN và toán tử EXISTS của SQL. Cả hai nhà khai thác đều thực hiện cùng một hoạt động nhưng hoạt động bên trong của họ khác nhau. Họ có cách làm việc hợp lý khác nhau. Bất kỳ một trong số chúng có thể được chọn theo yêu cầu. Tuy nhiên, nếu tập dữ liệu lớn, bạn nên sử dụng toán tử EXISTS.