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.
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
.
Hãy lấy một số ví dụ để hiểu cách hoạt động của toán tử EXISTS
.
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
.
EXISTS
với một subquery tương quanHã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ề.
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
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.
Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Trong hướng dẫn này, bạn sẽ tìm hiểu về GUID trong SQL Server và cách sử dụng hàm NEWID() để tạo giá trị GUID.
Trong hướng dẫn này, bạn sẽ học cách sử dụng kiểu dữ liệu DATETIMEOFFSET trong SQL Server để thao tác datetime với múi giờ.
Trong hướng dẫn này, bạn sẽ học cách lưu trữ thời gian trong ngày trong cơ sở dữ liệu bằng cách sử dụng kiểu dữ liệu TIME trong SQL Server.
Trong hướng dẫn này, bạn sẽ học cách sử dụng kiểu dữ liệu DATE trong SQL Server để lưu trữ dữ liệu ngày tháng trong một bảng.