Tóm tắt :trong hướng dẫn này, bạn sẽ học cách sử dụng SQLite EXISTS
toán tử để kiểm tra sự tồn tại của các hàng được trả về bởi một truy vấn con.
Giới thiệu về SQLite EXISTS
toán tử
EXISTS
toán tử là một toán tử logic kiểm tra xem một truy vấn con có trả về bất kỳ hàng nào hay không.
Đây là cú pháp cơ bản của EXISTS
nhà điều hành:
EXISTS(subquery)
Code language: SQL (Structured Query Language) (sql)
Trong cú pháp này, truy vấn con là SELECT
câu lệnh trả về không hoặc nhiều hàng.
Nếu truy vấn con trả về một hoặc nhiều hàng, thì EXISTS
toán tử trả về true. Nếu không, EXISTS
toán tử trả về false hoặc NULL
.
Lưu ý rằng nếu truy vấn con trả về một hàng có NULL
, kết quả của EXISTS
toán tử vẫn đúng vì tập kết quả chứa một hàng với NULL.
Để phủ định EXISTS
, bạn sử dụng NOT EXISTS
toán tử như sau:
NOT EXISTS (subquery)
Code language: SQL (Structured Query Language) (sql)
NOT EXISTS
toán tử trả về true nếu truy vấn con không trả về hàng.
SQLite EXISTS
ví dụ toán tử
Xem Customers
sau và Invoices
bảng từ cơ sở dữ liệu mẫu:
Câu lệnh sau tìm những khách hàng có hóa đơn:
SELECT
CustomerId,
FirstName,
LastName,
Company
FROM
Customers c
WHERE
EXISTS (
SELECT
1
FROM
Invoices
WHERE
CustomerId = c.CustomerId
)
ORDER BY
FirstName,
LastName;
Code language: SQL (Structured Query Language) (sql)
Hình ảnh sau đây cho thấy tập hợp kết quả từng phần:
Trong ví dụ này, đối với mỗi khách hàng, EXISTS
nhà điều hành kiểm tra xem id khách hàng có tồn tại trong invoices
không bảng.
- Nếu có, truy vấn con trả về một hàng có giá trị 1 gây ra
EXISTS
toán tử đánh giá thành true. Do đó, truy vấn bao gồm đồng phân khối trong tập kết quả. - Trong trường hợp id khách hàng không tồn tại trong
Invoices
bảng, truy vấn con không trả về hàng nào gây raEXISTS
toán tử để đánh giá thành false, do đó truy vấn không bao gồm khách hàng trong tập kết quả.
Lưu ý rằng bạn có thể sử dụng IN
toán tử thay vì EXISTS
trong trường hợp này để đạt được kết quả tương tự:
SELECT
CustomerId,
FirstName,
LastName,
Company
FROM
Customers c
WHERE
CustomerId IN (
SELECT
CustomerId
FROM
Invoices
)
ORDER BY
FirstName,
LastName;
Code language: SQL (Structured Query Language) (sql)
Khi truy vấn con trả về hàng đầu tiên, EXISTS
toán tử ngừng tìm kiếm vì nó có thể xác định kết quả. Mặt khác, IN
toán tử phải quét tất cả các hàng được trả về bởi truy vấn con để xác định kết quả.
Nói chung, EXISTS
toán tử nhanh hơn IN
toán tử nếu tập kết quả được trả về bởi truy vấn con lớn. Ngược lại, IN
toán tử nhanh hơn EXISTS
toán tử nếu tập kết quả được trả về bởi truy vấn con nhỏ.
SQLite NOT EXISTS
ví dụ toán tử
Xem bảng Nghệ sĩ và Album sau từ cơ sở dữ liệu mẫu:
Truy vấn này tìm tất cả các nghệ sĩ không có bất kỳ album nào trong bảng Album:
SELECT
*
FROM
Artists a
WHERE
NOT EXISTS(
SELECT
1
FROM
Albums
WHERE
ArtistId = a.ArtistId
)
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)
Đây là kết quả một phần:
Trong hướng dẫn này, bạn đã học cách sử dụng SQLite EXISTS
toán tử để kiểm tra sự tồn tại của các hàng được trả về bởi một truy vấn con.