Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

SQL IN so với SQL EXISTS

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cải thiện bảo trì phân vùng với số liệu thống kê gia tăng

  2. Cách theo dõi những gì người dùng làm

  3. Kết nối với Vertica trong IRI Workbench

  4. Đã cập nhật tùy chọn cấp cơ sở dữ liệu SQL Azure

  5. Mô hình dữ liệu