Trong SQL, hai mệnh đề IN và EXISTS được sử dụng để lọc dữ liệu theo các giá trị cụ thể. Trong bài viết này, chúng ta sẽ tìm hiểu về cả hai mệnh đề này và khác biệt giữa chúng.
Mệnh đề IN
Mệnh đề IN được sử dụng để lấy kết quả khi giá trị được chỉ định khớp với bất kỳ giá trị nào trong một tập giá trị hoặc được trả về bởi một truy vấn con. Điều này giúp giảm việc sử dụng nhiều điều kiện OR trong các truy vấn SELECT, INSERT, UPDATE và DELETE.
Ví dụ, để lấy thông tin chi tiết về khách hàng là bác sĩ, kỹ sư hoặc nhà khoa học, chúng ta có thể sử dụng câu lệnh sau:
SELECT *
FROM customers
WHERE profession IN ('doctor', 'engineer', 'scientist');
Mệnh đề EXISTS
Mệnh đề EXISTS được sử dụng để kiểm tra sự tồn tại của bất kỳ bản ghi nào trong một truy vấn con. Nó trả về TRUE nếu truy vấn con trả về ít nhất một bản ghi.
Ví dụ, để lấy tên và nghề nghiệp của khách hàng đã đặt ít nhất một đơn hàng, chúng ta có thể sử dụng câu lệnh sau:
SELECT name, profession
FROM customers
WHERE EXISTS (
SELECT *
FROM orders
WHERE orders.customer_id = customers.id
);
Sự khác biệt chính giữa IN và EXISTS
Dưới đây là một số điểm khác biệt chính giữa mệnh đề IN và EXISTS:
- Mệnh đề IN so sánh các giá trị giữa truy vấn con và truy vấn mẹ, trong khi EXISTS chỉ xác minh sự tồn tại của dữ liệu trong truy vấn con.
- Khi kết quả truy vấn con lớn, EXISTS cung cấp hiệu suất tốt hơn. Ngược lại, khi kết quả truy vấn phụ nhỏ, IN nhanh hơn EXISTS.
- Mệnh đề IN luôn chọn danh sách giá trị phù hợp, trong khi EXISTS trả về TRUE hoặc FALSE.
- EXISTS chỉ có thể được sử dụng với truy vấn con, trong khi IN có thể được sử dụng với cả truy vấn con và giá trị.
- EXISTS có thể so sánh mọi thứ với NULL, trong khi IN không thể so sánh với NULL.
- IN thực hiện đối sánh trực tiếp giữa các cột được chỉ định và kết quả truy vấn con. Ngược lại, EXISTS chỉ kiểm tra sự tồn tại của dữ liệu trong truy vấn con.
Kết luận
IN và EXISTS đều là những mệnh đề hữu ích trong SQL để lọc dữ liệu theo các giá trị cụ thể. Tuy cả hai mệnh đề này hoạt động cho cùng một mục đích, nhưng cách thức hoạt động của chúng khác nhau. Khi làm việc với một bảng chứa nhiều bản ghi, việc sử dụng EXISTS sẽ hiệu quả hơn là IN.
Nhớ rằng, khi sử dụng cả IN và EXISTS, hãy kiểm tra cú pháp và điều kiện của chúng để đảm bảo kết quả đúng đắn.