Trong SQL, EXISTS
toán tử chỉ định một truy vấn con để kiểm tra sự tồn tại của các hàng. Nó trả về TRUE
khi truy vấn con trả về một hoặc nhiều hàng.
Truy vấn con là một truy vấn được lồng vào bên trong một truy vấn khác (hoặc thậm chí là một truy vấn con khác)
Bài viết này chứa một số ví dụ cơ bản về EXISTS
nhà điều hành.
Bảng nguồn
Các bảng sau được sử dụng cho các ví dụ trên trang này.
SELECT * FROM PetTypes;
SELECT * FROM Pets;
Kết quả:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | | 4 | Rabbit | +-------------+-----------+ (4 rows affected) +---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+ (8 rows affected)
Ví dụ
Dưới đây là một ví dụ để chứng minh EXISTS
nhà điều hành.
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
Kết quả:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
Ví dụ này cho chúng ta thấy có bao nhiêu loại vật nuôi trong khách sạn vật nuôi của chúng tôi. Thực tế có bốn loại thú cưng, nhưng chỉ có ba loại trong số đó phù hợp với một thú cưng thực tế trong Pets
bảng.
Điều này cung cấp cùng một kết quả mà chúng tôi sẽ nhận được với truy vấn sau sử dụng IN
nhà điều hành.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Sử dụng NOT EXISTS
Chúng tôi có thể thêm NOT
toán tử để phủ định kết quả và xem có bao nhiêu loại vật nuôi không trong khách sạn thú cưng của chúng tôi.
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE NOT EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
Kết quả:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
Trong trường hợp này, cơ sở dữ liệu của chúng tôi chứa một loại vật nuôi là Rabbit
, nhưng chúng tôi hiện không có bất kỳ con thỏ nào làm thú cưng.