SQLでは、EXISTS
演算子は、行の存在をテストするサブクエリを指定します。 TRUE
を返します サブクエリが1つ以上の行を返すとき。
サブクエリは、別のクエリ(または別のサブクエリ)内にネストされたクエリです
この記事には、EXISTS
の基本的な例がいくつか含まれています オペレーター。
ソーステーブル
このページの例では、次の表を使用しています。
SELECT * FROM PetTypes;
SELECT * FROM Pets;
結果:
+-------------+-----------+ | 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)
例
EXISTS
を示す例を次に示します。 オペレーター。
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
結果:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
この例は、ペットホテルにペットの種類がいくつあるかを示しています。実際には4つのペットの種類がありますが、Pets
で実際のペットと一致するのはそのうちの3つだけです。 テーブル。
これにより、IN
を使用する次のクエリで得られる結果と同じ結果が得られます。 オペレーター。
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
NOT EXISTS
の使用
NOT
を追加できます 結果を否定し、ペットの種類の数を確認するための演算子 私たちのペットホテルで。
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE NOT EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
結果:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
この場合、データベースにはペットタイプのRabbit
が含まれています 、しかし現在、ペットとしてのウサギはいない。