Toán tử EXISTS trong SQL Server
Trong hướng dẫn này, bạn sẽ học tìm hiểu cách sử dụng toán tử EXISTS
trong SQL Server để kiểm tra sự tồn tại của các bản ghi trong một truy vấn con.
Tổng quan về toán tử EXISTS trong SQL Server
Toán tử EXISTS
là một toán tử logic cho phép bạn kiểm tra xem một subquery có trả về bất kỳ bản ghi nào không. Toán tử EXISTS
trả về TRUE
nếu subquery trả về một hoặc nhiều bản ghi.
Sau đây minh họa cú pháp của toán tử EXISTS
trong SQL Server :
EXISTS ( subquery)
Trong cú pháp này, truy vấn con chỉ là một câu lệnh SELECT
. Ngay sau khi truy vấn con trả về các bản ghi, toán tử EXISTS
sẽ trả về TRUE
và ngừng xử lý ngay lập tức.
Lưu ý rằng ngay cả khi truy vấn con trả về một giá trị
NULL
, toán tửEXISTS
vẫn trả vềTRUE
.
Ví dụ về toán tử EXISTS trong SQL Server
Hãy lấy một số ví dụ để hiểu cách hoạt động của toán tử EXISTS
.
Sử dụng toán tử EXISTS
với một truy vấn con trả về NULL
Hãy xem bảng customers
trong cơ sở dữ liệu mẫu BikeStores.

Ví dụ sau đây trả về tất cả các bản ghi từ bảng customers
:
SELECT
customer_id,
first_name,
last_name
FROM
sales.customers
WHERE
EXISTS (SELECT NULL)
ORDER BY
first_name,
last_name;

Trong ví dụ này, truy vấn con trả về một tập hợp kết quả có chứa NULL
, nhưng do toán tử EXISTS
trả về TRUE
. Do đó, toàn bộ truy vấn trả về tất cả các bản ghi từ bảng customers
.
Sử dụng toán tử EXISTS
với một subquery tương quan
Hãy xem bangr customers
và orders
trong cơ sở dữ liệu mẫu BikeStores.

Ví dụ sau đây tìm tất cả những khách hàng đã đặt nhiều hơn hai đơn hàng:
SELECT
customer_id,
first_name,
last_name
FROM
sales.customers c
WHERE
EXISTS (
SELECT
COUNT (*)
FROM
sales.orders o
WHERE
customer_id = c.customer_id
GROUP BY
customer_id
HAVING
COUNT (*) > 2
)
ORDER BY
first_name,
last_name;

Trong ví dụ này, chúng tôi có một subquery tương quan trả về những khách hàng đặt nhiều hơn hai đơn đặt hàng.
Nếu số lượng đơn đặt hàng do khách hàng đặt ít hơn hoặc bằng hai, truy vấn con trả về tập kết quả trống khiến toán tử EXISTS
trả về FALSE
.
Dựa trên kết quả của toán tử EXISTS
, khách hàng sẽ được đưa vào bộ kết quả trả về.
Toán tử EXISTS
so với toán tử IN
Câu lệnh sau sử dụng toán tử IN
để tìm đơn đặt hàng của khách hàng từ San Jose:
SELECT
*
FROM
sales.orders
WHERE
customer_id IN (
SELECT
customer_id
FROM
sales.customers
WHERE
city = 'San Jose'
)
ORDER BY
customer_id,
order_date;
Câu lệnh sau sử dụng toán tử EXISTS
trả về cùng một kết quả:
SELECT
*
FROM
sales.orders o
WHERE
EXISTS (
SELECT
customer_id
FROM
sales.customers c
WHERE
o.customer_id = c.customer_id
AND city = 'San Jose'
)
ORDER BY
o.customer_id,
order_date;

Toán tử EXISTS so với mệnh đề JOIN
Toán tử EXISTS
trả về TRUE
hoặc FALSE
trong khi mệnh đề JOIN
trả về bản ghi từ bảng khác.
Bạn sử dụng toán tử EXISTS
để kiểm tra xem một truy vấn con có trả về bất kỳ bản ghi nào không và dừng ngay khi có bất kỳ bản ghi được trả về. Trong khi đó, bạn sử dụng mệnh đề JOIN
để mở rộng tập kết quả bằng cách kết hợp nó với các cột từ các bảng có liên quan.
Trong thực tế, bạn sử dụng EXISTS
khi bạn chỉ cần kiểm tra sự tồn tại của các hàng từ các bảng liên quan mà không cần trả về dữ liệu từ chúng.
Trong hướng dẫn này, bạn đã tìm hiểu cách sử dụng toán tử EXISTS
SQL Server để kiểm tra xem truy vấn con có trả về bản ghi hay không.