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
EXISTStoá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
Invoicesbảng, truy vấn con không trả về hàng nào gây raEXISTStoá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.